昨日重い腰を上げて、Windows 10 で VirtualBox を使ってる環境の WSL1 を WSL2 に update してみたところ、
なぜか名前の解決が出来なくなってしまった。
今まで、別の PC で WSL2 使ってる分には、特に問題は生じてなかったのに、なぜ?
例えば apt update とかだと
Windows 本体側は
WSL2 側は
更に上流の 192.168.1.1 とかへはちゃんと ping が通るし、
/ets/resolv.conf の nameserver を上流の DNS サーバーに変更すれば、問題は解決する。
172.20.224.1 に ping が通らないのは、他の正常な環境も同様と言った感じ。
Windows Firewall を切っても解消しないので、Windows Firewall のせいではない模様。
%USERPROFILE%/.wslconfig に
その他 WSL から distro unregister して再 install してみたりとか、八方手を尽くしてみたつもりだが、埒が明かずといった感じ。
以下、環境の詳細。
なぜか名前の解決が出来なくなってしまった。
今まで、別の PC で WSL2 使ってる分には、特に問題は生じてなかったのに、なぜ?
例えば apt update とかだと
'example.com' が一時的に解決できませんみたいな感じで DNS による名前解決にしっぱりする。
Windows 本体側は
> ipconfig /all ... イーサネット アダプター vEthernet (WSL): 接続固有の DNS サフィックス . . . . .: 説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter 物理アドレス. . . . . . . . . . . . .: 00-15-5D-C3-6F-E1 DHCP 有効 . . . . . . . . . . . . . .: いいえ 自動構成有効. . . . . . . . . . . . .: はい リンクローカル IPv6 アドレス. . . . .: fe80::6f59:f1ae:d1a:db09%45(優先) IPv4 アドレス . . . . . . . . . . . .: 172.20.224.1(優先) サブネット マスク . . . . . . . . . .: 255.255.240.0 デフォルト ゲートウェイ . . . . . . .: DHCPv6 IAID . . . . . . . . . . . . .: 754980189 DHCPv6 クライアント DUID. . . . . . .: 00-01-00-01-25-E2-F5-4D-D8-CB-8A-9B-A9-76 DNS サーバー. . . . . . . . . . . . .: fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS over TCP/IP . . . . . . . . .: 有効
> nslookup google.com 172.20.224.1 サーバー: mypc.mshome.net Address: 172.20.224.1 権限のない回答: 名前: google.com Addresses: 2404:6800:400a:813::200e 216.239.32.10 2001:4860:4802:32::a 216.239.34.10 2001:4860:4802:34::a 216.239.36.10 2001:4860:4802:36::a 216.239.38.10 2001:4860:4802:38::a 142.250.206.206 216.239.32.10 2001:4860:4802:32::a 216.239.34.10 2001:4860:4802:34::a 216.239.36.10 2001:4860:4802:36::a 216.239.38.10 2001:4860:4802:38::aみたいに名前解決できるんだけど、
WSL2 側は
$ ip r default via 172.20.224.1 dev eth0 proto kernel 172.20.224.0/20 dev eth0 proto kernel scope link src 172.20.235.221
$ cat /etc/resolv.conf # This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf: # [network] # generateResolvConf = false nameserver 172.20.224.1
$ nslookup google.com ;; connection timed out; no servers could be reached
$ dig google.com ; <<>> DiG 9.16.1-Ubuntu <<>> google.com ;; global options: +cmd ;; connection timed out; no servers could be reachedみたいな感じで、Windows 本体から vEthernet (WSL) へは疎通するのに、WSL2 からだとなぜか疎通しなくて resolver 引けない状態。
更に上流の 192.168.1.1 とかへはちゃんと ping が通るし、
/ets/resolv.conf の nameserver を上流の DNS サーバーに変更すれば、問題は解決する。
172.20.224.1 に ping が通らないのは、他の正常な環境も同様と言った感じ。
Windows Firewall を切っても解消しないので、Windows Firewall のせいではない模様。
%USERPROFILE%/.wslconfig に
[wsl2] dnsTunneling=true追加しておけばよいという記述をちらほら見かけるが、
wsl: DNS トンネリングはサポートされていませんって言われるので、どうも Windows 11 限定で Windows 10 では使えん機能っぽい。
その他 WSL から distro unregister して再 install してみたりとか、八方手を尽くしてみたつもりだが、埒が明かずといった感じ。
以下、環境の詳細。
> wsl --version WSL バージョン: 2.2.4.0 カーネル バージョン: 5.15.153.1-2 WSLg バージョン: 1.0.61 MSRDC バージョン: 1.2.5326 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26091.1-240325-1447.ge-release Windows バージョン: 10.0.19045.4780
上流の有効な DNS サーバーで /etc/resolv.conf を上書きする方法は有効だったので、これで泥臭く対応することでお茶を濁した。
設定としては以下の2ファイル。
設定としては以下の2ファイル。
#!/usr/bin/env bash # updateresolv.sh - Workaround for WSL2 DNS problem # Copyright (c) 2024 Koichi OKADA. All right reserved. # This script is distributed under the MIT license. # # This script resolves the problem # that default gw does not response to request from WSL2 for fort 53. # It rewrite namesevers in resolv.conf # with the name servers referenced by nslookup.exe. # PWD0="$PWD" readarray -t nss < <( /mnt/c/WINDOWS/system32/nslookup.exe google.com 2>/dev/null \ | grep Address: \ | tr -d $'\r' \ | sed -E 's/\s+/\n/g' \ | tail -n+2 ) sudo sed -i,$(date -r /etc/resolv.conf +%Y%m%d_%H%M%S) -E '/^nameserver/d' /etc/resolv.conf for ns in "${nss[@]}"; do echo "nameserver $ns" done | tee -a /etc/resolv.conf
- Zenn / 99no_exit / 2024-01-28: WSL2のDNS問題をいい感じに解決する(2024)
タグ
コメントをかく