在 WSL 2 中永久更改 /etc/resolv.conf

Oli*_*ire 34 networking resolv.conf windows-subsystem-for-linux

在 WSL 2 上,当我尝试连接到网站时,遇到问题:

$ ping www.google.com
ping: www.google.com: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)

现在,为了解决这个问题,我必须添加/etc/wsl.conf以下内容:

[network]
generateResolvConf = true
Run Code Online (Sandbox Code Playgroud)

我需要将我的更改/etc/resolv.conf为:

nameserver 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

这很好用。

但是,当我重新启动系统时,当我关闭 wsl 或执行类似操作时,/etc/resolv.conf会被以前的值覆盖。

当然,如果我更改/etc/wsl.conf为以下内容并重新启动:

[network]
generateResolvConf = false
Run Code Online (Sandbox Code Playgroud)

上面提到的修复又消失了。

那么如何/etc/resolv.conf在 WSL 2 上将更改永久更改?

小智 56

在这里找到了这个解决方案

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,之后我必须使用 PowerShell 中的“wsl --shutdown”命令重新加载 WSL。 (2认同)
  • [此问题](https://github.com/microsoft/WSL/issues/6977) 指的是同一件事,并强调 `/etc/resolv.conf` 可能以符号链接开始,因此需要先将其删除创建常规文件;WSL 中存在一个错误,因此即使使用“generateResolvConf=false”,您也需要“sudo chattr +i /etc/resolv.conf”,这显然会抑制该错误。请注意,“/etc/wsl.conf”也可以有一个“[boot]”节行“systemd=true”,但我没有关于如何处理的建议。 (2认同)

Imp*_*tor 10

我试图对snuczek 的答案发表评论,但没有足够的声誉。

从他们的答案中链接的解决方案中,添加:

[network]
generateResolvConf=false
Run Code Online (Sandbox Code Playgroud)

to/etc/wsl.conf确实会阻止 wsl 自动生成文件,但仅限于关闭一次后。完成后,配置将受到尊重,并且不需要/etc/resolv.conf使用chattr +i命令使文件不可变。

要关闭 wsl,请wsl --shutdown在 Windows 命令提示符下运行(这将关闭所有 WSL 发行版)。

当然,您仍然需要将 dns 服务器添加到文件中/etc/resolv.conf(例如):

nameserver 1.1.1.1
nameserver 1.0.0.1
Run Code Online (Sandbox Code Playgroud)