WSL1上のDNS名解決がたまに遅い問題について
Symptom
- WSL1 を利用している
- Public DNS を利用している
- ping 等で名前解決を試行すると、名前解決に時間がかかる場合とそうでない場合がある
- dig で直接DNSサーバにクエリを投げた場合は問題がない
Resolution
strace ping してホストPCから出て行くパケットを観測ていると、よう分からんが A と AAAA それぞれのqueryを投げているがanswerが片方しかない場合があり、その場合はpingが名前解決に失敗して一度タイムアウトしている。 resolv.conf に "options single-request" を付与すると解決する
— k5s (@0x8100) March 13, 2023
記載のとおり、 /etc/resolv.conf に options single-request
を記入することで解決する。ただしこの場合は、 WSLによる /etc/resolv.conf の自動生成は利用できなくなる。
Appendix
こんなことをしている理由は
そしてWSL1が自動生成する resolv.conf は「DHCPのやつ + VPN指定のやつ」になっており、結果WSLはDHCPのDNSサーバにクエリを投げ解決に失敗するというクソ事情が発生し、そのため「VPNの状態に合わせて resolv.conf を VPN指定 or Public DNSに書き換えるクソ拭いツール」を使っているからです
— k5s (@0x8100) March 13, 2023
このスレッドにあるとおり、WSL2では問題が発生しない (そもそもGlobalProtectの制限にヒットしないで済むのだが)