我目前正在使用 Windows 11 的 Insider 版本。(22458)
但是,我在其他版本上也遇到过几次这个问题。(并且 wsl 以前可以正常工作)
当我启动 wsl 时,无法发出 DNS 请求。(直接 ping IP 地址即可。)
我把这个问题追溯到文件:/etc/resolv.conf
其中包括 DNS 服务器地址。
默认值为:172.22.192.1
但是,这个不起作用。
如果我将其更改为 1.1.1.1(Cloud Flare DNS),它就会再次起作用。
但是,每次重新启动 wsl 后,它都会将其改回默认值。
有一个名为 wsl.conf 的文件,我可以在其中禁用此文件的生成,但如果每次重新启动后总是会完全删除该文件。
那么我该如何解决这个问题?
我的第一个想法是完全重置 wsl,但无论是重置应用程序还是通过功能重新安装 WSL 都无法解决问题。
还有人知道该怎么做吗?
答案1
正如大多数答案所述,创建以下配置文件,然后重新启动 WSL 就足够了:
/etc/wsl.conf
[network]
generateResolvConf = false
/etc/resolv.conf
nameserver 8.8.8.8
然而,由于某种原因,resolv.conf
每次启动时我的系统都会不断重新创建。
所以我必须让它不可变,就像这样:
sudo chattr +i /etc/resolv.conf
这个问题困扰了我很多次,最终我编写了这个简单的辅助代码:
答案2
这是 WSL 的问题,而不是 Ubuntu 或 Windows 的问题。有很多解决方案,我发现最好的一个https://gist.github.com/coltenkrauter/608cfe02319ce60facd76373249b8ca6
它还包含 VPN 信息,但这些步骤即使没有 VPN 也可以完成。
在 Ubuntu 终端中运行这些命令。
cd ~/../../etc # Go to etc folder in WSL. echo "[network]" | sudo tee wsl.conf # Create wsl.conf file and add the first line. echo "generateResolvConf = false" | sudo tee -a wsl.conf # Append wsl.conf the next line. wsl --terminate Debian # Terminate WSL in Windows cmd, in case the OS is Ubuntu not Debian. cd ~/../../etc # Go to etc folder in WSL. sudo rm -Rf resolv.conf # Delete the resolv.conf file.
在连接 VPN 的 Windows cmd、PowerShell 或终端中执行:
Get-NetIPInterface
或ipconfig /all
获取 DNS 主键和辅助键。使用从第 2 步中获得的主 DNS 和辅助 DNS。在下一步中将 XXXX 中的数字替换为
echo "nameserver X.X.X.X" | sudo tee resolv.conf
(创建 resolv.conf 并添加该行。)
echo "nameserver X.X.X.X" | sudo tee -a resolv.conf
(在 resolv.conf 中附加该行)
wsl --terminate Debian
(如果是 Ubuntu 而不是 Debian,请在 Windows cmd 中终止 WSL)。
sudo chattr +i resolv.conf
最后在 Windows cmd、PowerShell 或终端中:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
来源:@MartinCaccia、@yukosgiti、@machuu 和@AlbesK:
https://github.com/microsoft/WSL/issues/4277
https://github.com/microsoft/WSL/issues/4246
答案3
WSL 从 Windows 的 DHCP 服务器获取其 IP 地址(以及 DNS 服务器、网络掩码和其他内容)。请在 Windows 上修复它,或修复 172.22.192.1 上的 DNS 服务器。
这是 Windows 的问题,而不是 Ubuntu 的问题。
不,我不知道 Windows 如何执行 DHCP。
答案4
问题是 WSL 未采用 VPN 以太网适配器的 DNS 服务器设置。以下步骤对我有用,可以手动添加这些设置:https://gist.github.com/akshayhiremath/1b3bff527b3eca6cd41cf60ce88f3a56/8570f9fb4dbd681fc7aabcc817fa18cbab5f1e86#file-fix-wsl2-dns-resolution
我已经分叉并更新了步骤 https://gist.github.com/coltenkrauter让它们变得更容易。