1. 现象描述
在 Windows 11 中开启了 WSL2 的镜像网络模式 (Mirrored Mode) 后,虽然系统具备基础的连通性(如可以 Ping 通外网 IP),但在执行 sudo apt update或使用域名访问网页时,频繁出现如下错误:
Temporary failure resolving 'mirrors.tuna.tsinghua.edu.cn'
Err:2 http://security.ubuntu.com/ubuntu noble-security InRelease
通过 cat /etc/resolv.conf发现,DNS 指向了一个奇怪的地址:
nameserver 10.255.255.254
2. 根因分析
在 WSL2 传统模式下,网络通过 NAT 转发,WSL 依赖虚拟网关进行 DNS 转发。而在 Win11 镜像模式下,WSL 与 Windows 共享网络栈,理应直接继承宿主机的 DNS 配置。
导致失效的三个核心原因:
-
解析路径死循环 :WSL 自动生成的
10.255.255.254在镜像模式下往往无法正确回传至 Windows 的解析器。 -
配置冲突 :WSL 的内置
dnsTunneling特性与部分 VPN 或第三方防火墙不兼容。 -
遗留逻辑 :系统重启后,WSL 默认会重写
/etc/resolv.conf,覆盖掉用户手动设置的有效 DNS。
3. 解决方案(标准化流程)
第一步:关闭 WSL 自动生成 DNS 功能
我们需要接管 DNS 的控制权,防止 WSL 在每次启动时"自作聪明"地修改配置。
编辑 WSL 配置文件:
sudo nano /etc/wsl.conf
添加或修改如下内容:
[network]
generateResolvConf = false
第二步:手动配置高可用 DNS 服务器
由于原文件通常是软链接,需要先删除再重建物理文件。
# 删除软链接
sudo rm /etc/resolv.conf
# 写入可靠的 DNS (阿里 DNS & Google DNS)
sudo bash -c 'echo "nameserver 223.5.5.5" > /etc/resolv.conf'
sudo bash -c 'echo "nameserver 8.8.8.8" >> /etc/resolv.conf'
# (可选) 锁定文件防止被意外修改
sudo chattr +i /etc/resolv.conf
第三步:优化 .wslconfig 选项
在 Windows 宿主机用户目录下(%UserProfile%\.wslconfig),确保镜像模式配置科学。
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
第四步:彻底重启 WSL 实例
在 Windows PowerShell 中执行命令,确保配置被重新加载:
wsl --shutdown
4. 进阶排查建议
如果配置后仍不稳定,建议检查以下两项:
-
防火墙放行:镜像模式下,Windows 防火墙可能拦截 UDP 53 端口。管理员权限运行:
New-NetFirewallRule -DisplayName "WSL DNS" -Direction Inbound -Action Allow -Protocol UDP -LocalPort 53 -
VPN 干扰:部分代理软件开启"系统代理"或"TUN 模式"时会强制劫持 DNS。建议在开发时将代理设置为"规则模式"而非"全局模式"。
5. 总结
WSL2 的镜像模式极大方便了本地开发,但也带来了复杂的网络交互。通过"禁用自动生成 + 手动锁定 DNS"的组合拳,可以解决 90% 以上的域名解析失败问题。