在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程

[复制链接]
发表于 2026-10-6 11:41:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

在 Windows 11 上用 WSL2 跑 Ubuntu,绝大多数网络问题都出在「两系统的网络栈互相看不见」:Windows 上的 127.0.0.1 指向 Windows 自己,WSL 里的 127.0.0.1 指向 WSL 自己,于是宿主机访问 WSL 服务、局域网设备访问 WSL 服务、VPN 环境下 DNS 解析,都会时好时坏。Windows 11 23H2 起,微软在 .wslconfig 里加入了 networkingMode=mirrored,让 WSL2 直接复用宿主机的网络配置,这一类问题基本一次性解决。本文按「配前检查 → 写配置 → 重启验证 → 排常见坑」的顺序说明。

一、先确认版本够不够

mirrored 模式对版本有硬性要求,版本不够时写了配置也不会生效。

  • Windows:Windows 11 23H2 及以上(内部版本号 22631.3xxx 起)。
  • WSL:2.0.0 及以上。

在 PowerShell 或命令提示符里查版本:

wsl --version

低于 2.0.0 就先升到预览通道再拉正式版本:

wsl --update --pre-release
wsl --update

二、写 .wslconfig

2.1 打开配置文件

.wslconfig 位于当前 Windows 用户家目录(也就是 C:\Users\你的用户名\)。直接用记事本打开编辑最省事:

notepad $env:USERPROFILE\.wslconfig

文件原本不存在也没关系,记事本保存时会自动新建。

2.2 逐项说明配置含义

[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
firewall=true

[experimental]
autoMemoryReclaim=gradual
sparseVhd=true
hostAddressLoopback=true

每一项的作用如下:

  • networkingMode=mirrored:核心开关,WSL2 与 Windows 主机共享同一份网络配置,IP 与主机一致。
  • dnsTunneling=true:把 DNS 请求通过隧道交给宿主解析,VPN、公司内网这类复杂网络下尤其有用。
  • autoProxy=true:同步 Windows 里设置的代理到 WSL,开了浏览器代理却不知 WSL 里 apt 为何不走代理时,这项基本能解决。
  • firewall=true:纳入 Windows 防火墙管理,与 Windows Defender 防火墙规则联动。
  • hostAddressLoopback=true:允许通过主机局域网 IP 访问 WSL 中监听的服务。
  • autoMemoryReclaim 与 sparseVhd:内存渐进回收与虚拟硬盘稀疏分配,属于锦上添花的资源优化项。

三、重启 WSL2 并验证

写完配置必须 shutdown 一次,WSL 是按需启动的进程,不重启旧实例配置不会加载:

wsl --shutdown

等几秒再重新进入 Ubuntu,然后做两步验证。

3.1 看 IP 是否一致

ip addr

若 WSL 里的地址与主机在同一网段、甚至是同一个地址,说明镜像网络已生效。

3.2 测端口互通

在 WSL 里起一个临时 HTTP 服务:

python3 -m http.server 8000

然后在 Windows 浏览器打开 http://localhost:8000。能打开即为配置成功;这一步同时也覆盖了「宿主机访问 WSL 服务」这个最常见的需求。

四、常见坑与处理

4.1 局域网其他设备访问不了 WSL 服务

通常是 Hyper-V 防火墙拦了入站连接。放开默认入站动作:

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

只想放行某一个端口更稳妥,规则粒度更细:

New-NetFirewallHyperVRule -Name "AllowPort8000" -DisplayName "Allow Port 8000" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 8000

4.2 Docker 容器里访问不到宿主机服务

容器网络与 WSL 网络在镜像模式下仍可能隔离,给 docker daemon 关掉 iptables 转发即可:

{
  "iptables": false
}

随后重启 Docker 服务:

sudo service docker restart

4.3 端口被 Windows 占用

Windows 会 reserve 一段动态端口,和 Linux 常用端口撞车。调整动态端口范围即可让出区间:

netsh int ipv4 set dynamic tcp start=50000 num=15536

4.4 IPv6 地址通但用不上

镜像模式支持 IPv6,但 localhost 的 IPv6 地址(::1)并非所有服务都会监听,排查时优先用 IPv4 地址访问再判断。

五、几点提醒

  • mirrored 模式下 WSL 不再有独立网段,原本依赖「给 WSL 单独配静态 IP」的脚本需要改掉。
  • 开了 firewall=true 后,之前靠 Windows 出站放行才能用的服务,可能反而要补规则,改配置时留个心。
  • 代理同步开启后,WSL 里的 apt、curl 会跟着走系统代理;代理不可用时会一起失败,排查时记得先 unset 相关环境变量。
  • 遇到诡异现象,先看 .wslconfig 是否真在用户家目录、有没有写错段落名([wsl2] 与 [experimental] 不能合并)。

总之,WSL2 的镜像网络就是把「网络栈差异」这一步消除掉,配置本身并不复杂,难的是验证与排障。按上面三步走完,再对照常见坑逐条核对,绝大多数网络互通问题都能闭环。

qidao123.com企服评测-应用市场 编辑提示:本文所述命令均为 Windows 与 WSL 公开文档中常见做法的整理与归纳,未引用任何外部链接;不同 Windows 版本对 mirrored 模式的支持程度略有差异,请以本机实际版本为准进行验证。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表