WSL Ver.2.0.7でミラードモードを試した画面。Win32側をipconfigで表示(上部)。「networkingMode=NAT」の場合、Win32側とは異なるIPアドレスが設定されている(中央)。しかし、「networkingMode=mirrored」にすると、Win32側と同じIPアドレス(IPv4、IPv6)が設定される
10月31日にWSL Ver.2.0.7がリリースされた。今回はネットワーキングモード(networkingMode)とDNSトンネリング(dnsTunneling)を試してみた。
なお、ネットワーキングモード、DNSトンネリングモードは、マイクロソフトのWindows Command Lineブログの記事(https://devblogs.microsoft.com/commandline/windows-subsystem-for-linux-september-2023-update/)によれば、Windows Insider ProgramのCannary、Release Preview チャンネルでのみ動作するとの表記がある。この記事が公開されたときには、Windows 11 Ver.23H2は正式配布はされてなかった。
試したところ、この2つの機能は、Windows Ver.23H2でも動作した。Betaチャンネルのプレビュー版では、ミラードモードでIPアドレスがWin32側と同じになったが、ネットワークアクセスができなかった。また、Devチャンネルでは、ミラードモードにしてもIPアドレスは変化しなかった。
実際に試す場合には、Windows 11 Ver.23H2か、Release PreviewチャンネルまたはCanaryチャンネルのプレビュー版Windows 11を使う必要がある。また、WSL Ver.2.0.7では、Linux側でのQEMUの実行が失敗するなど、Linux側プログラムに影響があった。プレビュー版であるため、日常的にWSLを利用している場合にはインストールは避けるべきだろう。
なお、最新のプレビュー版であるWSL Ver.2.0.7にアップデートすると、Linux側でパッケージマネージャーを使って、システムやライブラリなどを更新する必要がある。UbuntuなどDebian系のならば、
sudo apt update
sudo apt upgrade
として、ディストリビューションを最新にする。また、WSLのバージョンは、Win32側で「wsl.exe -v」を実行すると表示させることができる。
DNSトンネリングを設定する
WSLで、インターネットにアクセスするとエラーが表示されることがある。たとえば、apt updateコマンドなどだ。このとき、DNSの問い合わせがエラーになっていることがある。また、応答が返るまでの時間が長すぎ、Linux側でタイムアウトする場合もある。
WSL2では、/etc/wsl.confの「[network]」セクションにある「generateResolvConf」設定がtrueの場合、起動時にWin32側アドレスなどを使ってDNS設定である/etc/resolv.confを自動生成する。これが標準で/etc/resolv.confの「nameserver」設定は仮想スイッチでのWin32側(ホスト側)のIPアドレスになる。
このため、WSLディストリビューションからのDNS問い合わせは、すべてWin32側に送られ、Win32側で改めてDNS問い合わせるようになっている。このとき、DNSの問い合わせパケットは、仮想スイッチを経由してWin32側へ送られる。
この過程で、DNS問い合わせがエラーになることがあるようだ。こうした問題を解決する設定の1つが、DNSトンネリングだ。DNSトンネリングを有効にすると、DNS問い合わせは、直接Win32側に送られ、仮想スイッチを経由しなくなる。このため、WSL側やWin32側のネットワーク設定に影響を受けることなくDNS問い合わせができる。
なお、WSL Ver.2.x以前の場合には、手動で/etc/resolv.confを設定することで状況が回復することがある。/etc/wsl.confの「generateResolvConf=false」とすると、/etc/resolv.confの自動生成が停止する。その上で、/etc/resolv.confでnameserverにプロフバイダなどが提供するDNSアドレスを設定すると、「apt update」コマンドなどのインターネットアクセスのエラーが解消できることがある。
WSL Ver.2.0.7で、DNSトンネリングを行うと、筆者の環境では/etc/resolv.confで定義されているnameserverが「127.0.0.42」に設定された。IPv4では、ローカルループバックアドレスは、127.0.0.0/8(127.0.0.0から127.255.255.255の範囲)であるとされ、このアドレスもローカルループバックアドレスになる。
おそらくは、この特殊なアドレスに対して、DNS問い合わせをすると、カーネル側あるいは仮想マシン支援環境側で、これを捕まえて、トンネリングするのではないかと考えられる。なお、マイクロソフトのWSL関連のドキュメント(https://learn.microsoft.com/ja-jp/windows/wsl/networking#accessing-windows-networking-apps-from-linux-host-ip)では、/etc/resolv.confを見て、Win32側のIPアドレス(仮想スイッチ側)を調べろとある。DNSトンネリングではこの方法が不可能になるので注意されたい。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











