Windows11 WSL2 镜像模式下 DNS 解析失效(Temporary failure resolving)

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 配置。

导致失效的三个核心原因:

  1. 解析路径死循环 :WSL 自动生成的 10.255.255.254在镜像模式下往往无法正确回传至 Windows 的解析器。

  2. 配置冲突 :WSL 的内置 dnsTunneling特性与部分 VPN 或第三方防火墙不兼容。

  3. 遗留逻辑 :系统重启后,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% 以上的域名解析失败问题。

相关推荐
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
groundhappy14 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕14 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫16 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生16 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1117 小时前
linux基础IO
linux·运维·服务器
BelongPanda19 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯19 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983420 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器
yunwei3720 小时前
eBPF 教程:检查 exec 后真正安装的可执行镜像
linux·开源