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

相关推荐
北极熊kw15 小时前
FreeBSD 安装 Xrdp 后,远程桌面时只显示白色终端 Xterm
linux·运维·服务器·rdp·freebsd·xterm
枳实-叶15 小时前
【Linux驱动开发】第二天:内核模块生命周期+内存分配全解
linux·驱动开发
计算机安禾15 小时前
【Linux从入门到精通】第28篇:文本处理三剑客(中)——sed 流编辑器
linux·服务器·编辑器
Will_Ye15 小时前
Ubuntu:系统断网后自动重连指定wifi脚本
linux·运维·ubuntu
郝学胜-神的一滴15 小时前
深入epoll封装:event_set与event_add核心原理剖析
linux·服务器·开发语言·网络·c++·unix
HABuo15 小时前
【linux(四)】套接字编程--socket套接字及其接口认识
linux·运维·服务器·c语言·c++·ubuntu·centos
凤年徐15 小时前
命令行进度条完全指南:倒计时、缓冲区刷新与动态下载
linux
北山有鸟15 小时前
address-cell& size-cell
linux·网络
小则又沐风a15 小时前
基础的开发工具(Linux)
linux·运维·服务器
深邃-15 小时前
【Web安全】-Kali,Linux配置(2):Java环境配置,Python环境配置,Conda使用,PIP配置使用,SSH远程登录
java·linux·python·安全·web安全·网络安全·php