WSL2 网络配置:NAT、桥接、镜像、Virtio 4 选 1,到底改哪一行?
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
在 WSL2 里起了服务,Windows 浏览器死活打不开?想让局域网设备直连,又嫌容器网络慢?这份 WSL2 网络配置指南只讲改哪一行.wslconfig、跑哪条命令、怎么确认生效,不扯内核原理。
30 秒选模式:按需求对号入座
- 你的需求是「Windows 浏览器打开 WSL 里的本地服务」→ 选NAT + localhostForwarding
- 你的需求是「让局域网同事/设备直连 WSL」→ 选bridged(桥接)
- 你的需求是「前后端分离,localhost 两边都要通」→ 选mirrored(镜像)
- 你的需求是「Docker / 高吞吐 / 容器网络慢」→ 选Virtio(Consomme)
| 需求 | 推荐模式 | 改动的 key |
|---|---|---|
| 本地服务 + Windows 访问 | NAT | networkingMode+localhostForwarding |
| 局域网直连 | bridged | networkingMode+defaultBridge |
| localhost 双向互通 | mirrored | networkingMode |
| 高性能 / 容器网络 | Virtio(Consomme) | networkingMode |
先别急着改配置:wsl --status看一眼当前版本和模式,确认 WSL 够新,再动手。
本地服务打不开?NAT + localhostForwarding 让 Windows 直连
你起了服务,Windows 浏览器却连localhost:3000都打不开?多半是 NAT 模式下本地转发没开。90% 的情况改这两行就行:
[wsl2] networkingMode=NAT localhostForwarding=true改完跑wsl --shutdown,再进 WSL 起服务。然后在Windows 的 PowerShell里跑这一条确认转发通了:
curl.exe -I http://localhost:3000⚠️ 常见坑:改了.wslconfig却没wsl --shutdown,配置根本不生效——每次改完都必须重启 WSL。
NAT 模式靠 WSL 内的localhost进程监听已绑定的 TCP 端口,再通过wslrelay.exe把流量转到 Windows,逻辑见 localhost 转发实现 和 NAT 网络支持。
让局域网直连 WSL 的桥接配置
你想让同一网段的其他设备直接用 WSL 的 IP 访问,而不是只能从 Windows 转发?这时 NAT 就不够用了,得让 WSL 拿到一个局域网里真实的 IP。
[wsl2] networkingMode=bridged defaultBridge=Wi-FidefaultBridge填你机器上真实的网卡名。重启后在 WSL 里跑这一条,看拿到的是不是网段内的 IP(而不是 172.x 的 NAT 地址):
ip addr show eth0⚠️ 常见坑:bridge 名字写错会被静默忽略、回落到 NAT,用系统里的网络适配器名核对一下再填。
镜像模式下 localhost 互通的验证命令
前后端分离,前端跑在 Windows、后端跑在 WSL,两边都想用localhost互访?镜像模式会让 WSL 和 Windows 共享同一套回环地址,localhost直接双向通。
[wsl2] networkingMode=mirrored镜像模式在 WSL 里注册了一个 BPF 程序拦截bind()调用,把流量交给 Windows 路由,实现见 镜像网络实现。重启后,WSL 里起个服务,然后在Windows里跑这一条验证:
curl.exe -I http://localhost:8000⚠️ 常见坑:镜像模式对系统版本和 WSL 内核有要求,老版本会悄悄回落成 NAT,先wsl --version确认再上。
Docker / 高吞吐场景的 Virtio 网络配置
容器网络慢、Docker 吞吐上不去?NAT 的转发链路开销不小,Virtio(源码里叫 Consomme)给虚拟机挂了一块 virtio-net 网卡,由宿主机的用户态 NAT 直接处理,吞吐更高、延迟更低,实现见 Virtio 网络支持。
[wsl2] networkingMode=Consomme enableFirewall=true重启后在 WSL 里iperf3 -s,再从Windows跑这一条测实际吞吐:
iperf3 -c <WSL-IP>⚠️ 常见坑:Consomme 依赖 virtio,老 WSL 会提示 "requires Virtio" 并自动回落 NAT,先wsl --update升到新版再试。
排错速查:5 个高频故障对号入座
| 故障现象 | 最常见原因 | 一条解决命令 |
|---|---|---|
| DNS 解析失败 | resolv.conf指向了失效的 NAT 网关 DNS | cat /etc/resolv.conf看 nameserver,临时换成8.8.8.8 |
| 端口不通 | 改完.wslconfig没重启 WSL | wsl --shutdown |
| 桥接拿不到局域网 IP | bridge 名写错被忽略 | ip addr show eth0核对,改defaultBridge |
| Windows 访问被拦 | 防火墙规则没放行端口 | 防火墙放行对应端口后重试 |
| 性能不达标 | NAT 转发开销 / 内存不够 | 切Consomme或加大memory |
动手玩一把:两种模式混着用
试试让两个发行版跑不同模式:默认那个走bridged给局域网开服务,再wsl --install装一个专门走mirrored,前后端 localhost 互通。改哪个发行版就改哪份.wslconfig,互不影响。
收尾
四种模式本质都是.wslconfig里一个networkingMode的差异,选对了基本不用碰别的。下一步建议:把你当前的痛点场景对到上面某一行,改完wsl --shutdown验证一次,再决定要不要叠加第二种模式。
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考