このページの本文へ

前へ 1 2 次へ

Windows Info 第405回

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

2023年11月12日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷
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トンネリングではこの方法が不可能になるので注意されたい。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン