DNS 在 WSL 上不起作用

DNS 在 WSL 上不起作用

我目前正在使用 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

这个问题困扰了我很多次,最终我编写了这个简单的辅助代码:

https://github.com/epomatti/wsl2-dns-fix-config

答案2

这是 WSL 的问题,而不是 Ubuntu 或 Windows 的问题。有很多解决方案,我发现最好的一个https://gist.github.com/coltenkrauter/608cfe02319ce60facd76373249b8ca6

它还包含 VPN 信息,但这些步骤即使没有 VPN 也可以完成。

  1. 在 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.
    
  2. 在连接 VPN 的 Windows cmd、PowerShell 或终端中执行:Get-NetIPInterfaceipconfig /all获取 DNS 主键和辅助键。

  3. 使用从第 2 步中获得的主 DNS 和辅助 DNS。在下一步中将 XXXX 中的数字替换为

  4. echo "nameserver X.X.X.X" | sudo tee resolv.conf(创建 resolv.conf 并添加该行。)

  5. echo "nameserver X.X.X.X" | sudo tee -a resolv.conf(在 resolv.conf 中附加该行)

  6. wsl --terminate Debian(如果是 Ubuntu 而不是 Debian,请在 Windows cmd 中终止 WSL)。

  7. sudo chattr +i resolv.conf

  8. 最后在 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让它们变得更容易。

相关内容