在WSL中 ping某个站点报错Temporary failure in name resolution,要怎么解决

问题

在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
  1. 修复主机名解析(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

然后再进入。再测试下,应该就可以了。

相关推荐
Mr-Apple12 小时前
系统找不到指定的文件-CreateInstance/CreateVm/HCS/ERROR_FILE_NOT_FOUND
linux·windows·ubuntu·wsl
2601_962298935 天前
配置 Python 解释器
pycharm·wsl·虚拟环境·配置python解释器·远程解释器
2601_962294616 天前
AI 基础设施的“去 Python 化“:Rust 与 C# 的两条替代路径
ai·rust·c·基础设施·去python化
x868 天前
WSL 里的 node 不是你装的那个
wsl
玖石书11 天前
WSL升级到2代并设置默认版本
wsl
youngerwang12 天前
【WSL2 VHDX 文件格式深度研究报告(开发 + 性能优化向)】
性能优化·wsl·vhdx·文件格式解析
玖石书12 天前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
lsz15259020 天前
港口自动控制系统技术白皮书与核心模块全解
控制·通信·基础设施·plc编程·自动控制系统·港口
DAVIED91 个月前
llama.cpp 本地部署完全指南
windows·llama·wsl·llamacpp
深念Y1 个月前
Windows → WSL2 全面迁移:工具链、Docker、OpenCode
linux·运维·windows·docker·容器·环境·wsl