问题
在WSL中 ping某个站点报错Temporary failure in name resolution

解决方案
打开路径:
C:\Users\你的Windows用户名.wslconfig
没有就新建一个文本文档,重命名为 .wslconfig
写入:
bash
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=false
autoProxy=true
执行:
powershell
bash
wsl --shutdown
再进 WSL,ping 8.8.8.8 必通。
现在ping 8.8.8.8 能通、域名不通,说明网络已经正常,只剩 DNS 解析没修好,两步就能彻底搞定:
第一步:临时修复 DNS(立刻能 ping 域名)
在 WSL 里执行:
bash
# 删掉自动生成的 resolv.conf
sudo rm /etc/resolv.conf
# 新建一个,写入国内公共 DNS
sudo tee /etc/resolv.conf <<EOF
nameserver 114.114.114.114
nameserver 223.5.5.5
nameserver 8.8.8.8
EOF
然后直接测试
bash
ping www.163.com
第二步:永久修复(防止重启后又失效)
因为你开了镜像网络,WSL 还是会自动覆盖 DNS,所以要锁住配置:
编辑 wsl 配置
bash
sudo nano /etc/wsl.conf
粘贴这两行,保存退出(Ctrl+O → 回车 → Ctrl+X)
bash
[network]
generateResolvConf = false
给 DNS 文件加锁,不让系统改它
bash
sudo chattr +i /etc/resolv.conf
重启 WSL(Windows 终端里执行)
bash
wsl --shutdown
如果导致su切换不了
bash
# 解锁 resolv.conf(必须执行!)
su -
# 输入密码后,然后ctrl+C,进入root
chattr -i /etc/resolv.conf
- 修复主机名解析(su 认证必查)
bash
# 查看你的 WSL 主机名(记住输出的名字,比如 ubuntu)
hostname
# 编辑 hosts 文件
sudo nano /etc/hosts
在第一行追加如下:
bash
127.0.0.1 localhost 你的主机名
::1 localhost 你的主机名
重启认证
bash
systemctl restart systemd-logind
然后测试su
如果不行,那么重启wsl
windows下执行
bash
wsl --shutdown
然后再进入。再测试下,应该就可以了。