• DNS Is Too Slow

Windows 10でWSLを使っていたら、パッケージマネージャーaptコマンドが失敗することがあった。しかし、同じコマンドを繰り返すとうまくいく。結論からいうと、DNSの応答が遅く、そのためにインターネット側のリポジトリとの接続が正しくできなくなったためだった。症状は、Windows 10マシンで発生したが、筆者宅のマシンでは、発生するものとそうでないものがある。Windows 10固有の問題というわけでもなさそうだ。

最初は、単にインターネットが遅いのかと速度を測定してみることにした。これには、“speednet-cli”をつかってみた。Win32側などGUIが使える環境なら、WebブラウザでSpeedtest.netを開けばいい。実際に比較してみたところ、1~2割程度の差しかなく、遅いと感じるほどの差はなかった。

次にnslookupの速度を測ってみた。それには、bashのtimeコマンドを使った。具体的には


time nslookup mynavi.jp

などのようにする。Win32側であれば、PowerShellから


Measure-Command { nslookup.exe mynavi.jp }

とすることでコマンドの実行時間を測定できる。

やってみると、nslookupの実行に10秒以上かかっている。なにかおかしな感じがするので、nslookupをデバッグモードで起動する(Win32のnslookup.exeもオプションは同じ)。


nslookup -debug mynavi.jp

そうすると、どうもDNSサーバーとなっているWin32側からの応答が遅く、タイムアウトしている(写真01)。試しにnslookupでGoogleのDNSサーバーを指定してみるととたんに速くなる。また、DNSのアクセスは、Win32側では特に問題は発生していない。

  • 写真01: WSL2上でnslookupの実行時間を測定すると時間が掛かりすぎていた。デバッグモードを使うと、問い合わせがタイムアウトしている。試しにGoogleのDNSサーバーに問い合わせを行わせると短時間でnslookupが終了する。おそらくWSL2ホスト側に何か問題があり、DNS問い合わせがうまくいっていないのだと思われる

Linuxでは、DNSサーバーを/etc/resolv.confで指定する。標準ではWSL2で自動設定されたものになっている。これを書き換えればいいのだが、ディストリビューションの起動時に毎回、強制的にこのファイルを最新のもので書き換えている(IPアドレス割り当てが変更されることがあるため)。まずは、WSL2ディストリビューションの設定を変更する必要がある。わかりにくいが、/etc/resolv.confの冒頭の注釈に記載がある。

まずは、/etc/wsl.confファイルに以下の記述を追加する(wsl.confは、なければ作る)。


[network]
generateResolvConf = false

次に、/etc/resolv.confを以下のように書き換える。


nameserver 8.8.8.8

これで、WSL2によるresolv.confの自動設定が禁止され、書き換えたresolv.confが常に使われるようになる。なお、8.8.8.8は、Googleの運営するDNSサーバーである。応答が早ければもちろん、他のDNSサーバーでもかまわない。

DNSサーバーが遅いと、アクセス前の名前解決に時間がかかるようになる。このため、ネットワークが遅くなったように感じることがある。WSLに限らず、汎用的に利用できる手法である。覚えておいて損はない。自宅などルーターの設定変更ができるなら、ルーターのDHCPサーバーの設定で通知するDNSサーバーアドレスを変更するのが最も簡単だ。なお、Chromebookでは、DHCPでIPアドレスを指定しながら、DNSサーバーをGoogleのものにするという設定が可能だ。

今回のタイトルの元ネタは、Sir Fred Hoyleの“October The First Is Too Late”(1966。邦題 10月1日では遅すぎる)である。Hoyleは天文学者でさまざまな業績を残し、ケンブリッジ大学の天文学研究所の所長も務めた。現在では宇宙の起源を「ビッグバン」とすることが有力だが、この呼び方はHoyleがラジオ番組の中で命名したもの。

まったくの偶然だろうが、Hoyleはもう1つ命名を行っている。Hoyleが共同で脚本を書いたイギリスのテレビドラマ“A for Andromeda”(1961年。Hoyle自身によるノベライズ版がハヤカワSF文庫の「アンドロメダのA」)は、アンドロメダ星雲からの信号を解読してコンピュータを組み立て、送られてきたプログラムに従い、そのコンピュータがクローン人間を作るという話になっている。この話には国際複合企業「Intel」が登場するが、マイクロプロセッサのIntelが創業したのはこのドラマ放送の7年後(1968年)である。

残念ながらテレビドラマは見ていないが、ハヤカワの「アンドロメダのA」は1970年台に読んだ。のちにコンピュータに関わるようになると、簡易なアセンブラでコンパイラを作り、さらにコンパイラでインタプリタを作るといったソフトウェアの段階を表しているようで奇妙な一致を感じた。このドラマが「Intel」という企業名を作り、同じ名前のIntelがマイクロプロセッサを開発したというのも奇妙な感じがある。