在 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 启动时
- 为初始用户添加 bashrc 条目
echo "sudo su -" >> ~/.bashrc
- 为初始用户创建 sudoers 条目
sudo su -
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
- 为 root 用户添加 bashrc 条目
echo "nameserver 8.8.8.8" > /etc/resolv.conf
笔记:这将覆盖/etc/resolv.conf文件。您可以使用sed命令根据需要执行任何特定的修改