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

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

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

$ ping www.google.com
ping: www.google.com: Temporary failure in name resolution

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

[network]
generateResolvConf = true

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

nameserver 8.8.8.8

这很好用。

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

当然,如果我改为/etc/wsl.conf下面这样,并再次重启:

[network]
generateResolvConf = false

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

/etc/resolv.conf那么如何使我的更改在 WSL 2 上永久生效?

答案1

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

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

答案2

我尝试评论snuczek 的回答但声誉不够。

来自链接解决方案在他们的回答中补充道:

[network]
generateResolvConf=false

确实会/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

答案3

这些措施将确保/etc/resolv.conf已正确配置名称服务器 8.8.8.8每次 wsl 启动时

  1. 为初始用户添加 bashrc 条目
echo "sudo su -" >> ~/.bashrc
  1. 为初始用户创建 sudoers 条目
sudo su -
    
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
  1. 为 root 用户添加 bashrc 条目
echo "nameserver 8.8.8.8" > /etc/resolv.conf

笔记:这将覆盖/etc/resolv.conf文件。您可以使用sed命令根据需要执行任何特定的修改

相关内容