本质是WSL2自动生成的/etc/resolv.conf被覆盖或指向错误DNS,须禁用自动生成并手动锁定有效DNS:编辑/etc/wsl.conf设generateResolvConf = false,删除旧resolv.conf,写入真实可用DNS(如192.168.1.1),再用chattr +i锁定,最后wsl --shutdown重启验证。

Win11下WSL2执行apt update或curl google.com时提示“无法解析域名”,本质是WSL2自动生成的/etc/resolv.conf被覆盖为空、指向错误DNS或被反复重写,必须禁用自动生成并手动锁定真实可用的DNS地址。
禁用WSL自动重写resolv.conf
这一步不操作,后续所有手动配置都会在下次重启WSL后失效。编辑全局wsl.conf文件,告诉系统别碰resolv.conf:
在WSL终端中运行:sudo nano /etc/wsl.conf
输入以下内容(若文件不存在则新建):
[network]
generateResolvConf = false
按Ctrl+O保存→回车确认→Ctrl+X退出。注意:该配置作用于当前发行版,不是Windows全局配置。
手动创建并锁定resolv.conf
禁用后旧文件可能仍残留错误内容,需彻底清除并重建:
执行:sudo rm /etc/resolv.conf
接着写入你本地网络真正有效的DNS服务器地址。不要盲目填8.8.8.8——如果宿主机本身连不上它,WSL也一样失败。最稳妥的是填你的路由器网关IP(通常为192.168.1.1、192.168.0.1等):
echo "nameserver 192.168.1.1" | sudo tee /etc/resolv.conf
再加一层保险,防止其他进程意外改写:sudo chattr +i /etc/resolv.conf
⚠️ 注意:【chattr +i 是不可逆操作,后续如需修改必须先执行 sudo chattr -i /etc/resolv.conf】
验证并强制生效
第一步:立即验证DNS是否可用
运行:nslookup google.com,若返回非空的A记录(如34.123.45.67),说明配置成功;若仍超时或报错,说明填的nameserver地址本身不通,需换为宿主机实际能用的DNS(如114.114.114.114或223.5.5.5)。
第二步:确保配置在WSL全生命周期生效
管理员权限打开PowerShell → 执行:wsl --shutdown
等待3秒 → 重新启动Ubuntu终端 → 再次运行nslookup google.com确认结果。

















