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% 以上的域名解析失败问题。

相关推荐
lyx49492 小时前
在 Win11 上用 Claude Code 接入 Gemini 模型(无需 WSL/Ubuntu)
linux·ubuntu·gemini模型·claude coode
郝亚军2 小时前
Ubuntu启一个http server,通过terminal测试通不通
linux·运维·ubuntu
草莓熊Lotso4 小时前
Linux 基础 IO 初步解析:从 C 库函数到系统调用,理解文件操作本质
linux·运维·服务器·c语言·数据库·c++·人工智能
Cx330❀4 小时前
从零实现Shell命令行解释器:原理与实战(附源码)
大数据·linux·数据库·人工智能·科技·elasticsearch·搜索引擎
学嵌入式的小杨同学10 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
EverydayJoy^v^10 小时前
RH134学习进程——十二.运行容器(1)
linux·运维·容器
syseptember10 小时前
Linux网络基础
linux·网络·arm开发
zl_dfq11 小时前
Linux 之 【多线程】(线程的概念、Linux中的线程、页表)
linux
郝亚军11 小时前
如何在Ubuntu和win10/11之间通过samba访问对方的文件
linux·服务器·ubuntu