简单记录 WSL2 的网络模式。

一、疑惑

偶然的机会,发现 WSL 和 宿主机共享一个 localhost,非常的方便。不过

  1. 一直疑惑实现原理(共享 localhost
  2. 以及外部机器该如何访问到 WSL。(内部访问外部是容易的)

二、网络模式

2.1 NAT 模式(默认)

WSL2 默认是 NAT 模式。和 Vmware WorkstationNAT 没什么区别。

问:那为什么在 Windows 本机上 localhost:端口 能访问到 WSL 里的服务?

答: Windows 额外做了一个叫 localhostForwarding 的便利功能,把本机对 localhost 的请求悄悄转发进 WSL 那台小虚拟机。

这座桥只对 Windows 本机生效。它本质是一座”宿主机回环 → WSL 虚拟机”的私桥

所以其实本质并不是”共享”:是 Windows 能通过 localhost 访问到 WSL 里的服务;反过来,WSL 用 localhost 是访问不到 Windows 的(在 WSL 里 localhost 指的是它自己)。刚刚验证,果然如此。

2.2 镜像模式(mirrored)

镜像模式下,WSL2 没有自己的网卡,而是直接镜像/共享宿主机的真实网络接口和 IP。WSL 和 Windows 等于站在同一组网卡后面,看到的是同一套网络视图。

所以两者的根本区别一句话能说清:

  • NAT:WSL 有自己隔离的私有网卡,只能靠”宿主机专用的 localhost 转发”从本机单向进入,局域网看不见它。

    镜像:WSL 直接用宿主机的网卡,跟宿主机一起暴露在局域网里。

三、开启镜像模式

需要 Windows 11 22H2 及以上 + 较新的 WSL。

  1. 编辑 C:\Users\<你>\.wslconfig
1
2
[wsl2]
networkingMode=mirrored
  1. 重启 WSL
1
wsl --shutdown
  1. 放行 Hyper-V 防火墙
1
2
3
New-NetFirewallHyperVRule -Name "MyService" -DisplayName "My Service" `
-Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' `
-Protocol TCP -LocalPorts 8443

四、参考链接

使用 WSL 访问网络应用程序