1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

WSLプレビューVer.2.0.7でMirroredネットワーク、DNSトンネリングを試す

ASCII.jp / 2023年11月12日 10時0分

WSL
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トンネリングではこの方法が不可能になるので注意されたい。

ミラードモードを試す

 ミラードモードにすると、WSL側のIPアドレス割り当てが変わる(記事冒頭画面)。

 具体的には、Win32側と同じIPv4、IPv6アドレスが割り当てられる。Microsoftのドキュメントによれば、WSL Ver.2.x以前には、WSLからIPv6アドレスへのアクセスができなかった(https://learn.microsoft.com/ja-jp/windows/wsl/networking)。ただし、Win32側からWSLに割り当てられたIPv6アドレスへのアクセスは可能だった。

 従来は、WSL2は仮想ネットワークアダプタと仮想スイッチを使って独自のIPアドレスを持ち、仮想スイッチ経由でNAT(Network Address Translation)をし、LANやインターネットにアクセスしていた。これに対して、ミラードモードでは、Linuxカーネル内のIPスタックを使わず、Win32側のIPスタックを利用する。このため、IPv6へのアクセスも可能になる。

 ミラードモードを有効にするには、WSLが終了されているときにユーザーフォルダ下の「.wslconfig」ファイルを修正する。WSL Ver.2.0.7では、「[WSL2]」セクションにnetworkingMode設定を記述する。

[WSL2] networkingMode=mirrored

 この設定でWSLを起動すると、ミラードモードになる。ミラードモードでは、前述のようにWin32側のIPスタックが使われる。このため、IPv6によるアクセスなどが可能になる。

 ミラードモードが正しく動作していたCannary/Release Preview ChannelおよびWindows 11 Ver.23H2では、ミラードモードを有効にすると、WSL側からLAN側のIPv6アドレスにアクセスすることができた。確認は、node.jsで記述したhttpサーバーとcurlでしている。NATモードでは接続できなかったため、ミラードモードでIPv6によるアクセスが動作していると見ていいだろう。

 Windows 11 Ver.23H2では、プレビュー版WSLを導入することで、ミラードモードやDNSトンネリングが利用可能になる。ただし、WSL自体の挙動に影響があるようなので、安定版まで待つべきだろう。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください