☰
WSL 网络配置实战指南:NAT、镜像、桥接 3 种模式怎么选、怎么配
2026/10/5 11:22:23 网站建设 项目流程

WSL 网络配置实战指南:NAT、镜像、桥接 3 种模式怎么选、怎么配

【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL

这篇文章带你看懂 Windows Subsystem for Linux(WSL)里的网络配置。WSL 让你在 Windows 上直接跑 Linux,而它能不能上网、能不能被局域网访问、能不能和 Windows 共享本地端口,全取决于一种叫networkingMode(网络模式)的设置。读完本文,你能独立判断该用哪种模式、写好%UserProfile%\.wslconfig里的配置,并验证它真的生效。

这一节帮你解决"到底该选哪种模式"

先建立一个直觉:WSL2 的 Linux 运行在一台轻量虚拟机里,它和 Windows 之间隔着一层"网络边界"。边界怎么画,决定了 Linux 里的localhost(指向自己本机的地址)还等不等于 Windows 的localhost。

官方支持三种networkingMode,用一张表先压住信息:

模式默认?Linux 有独立 IP?和 Windows 共享 localhost?适合场景
NAT是有(虚拟网段,如 172.x)仅靠端口转发单向打通日常开发、跑容器、不折腾
mirrored(镜像)否与 Windows 同网段是,双向直接互通前端连后端、需要 Windows 直接访问 Linux 服务
bridged(桥接)否有(来自真实网卡,可被局域网访问)否,Linux 成为网络里的独立节点局域网内其他设备要直连 WSL

怎么选,一句话决策:

  • 懒得折腾、只要自己能上网→ 用默认 NAT,别动它。
  • WSL 里的服务要被 Windows 本机直接访问(比如浏览器开localhost:8000)→ 切镜像。
  • 局域网里的手机/同事电脑要访问 WSL 上的服务→ 切桥接。

注意:你八成会在别处看到"virtio 模式"这种说法。virtio-net 只是 WSL2 底层给虚拟机用的虚拟网卡设备,不是一个能写进.wslconfig的networkingMode,别被误导去配置它。

这一节帮你把默认 NAT 模式用到极致

NAT 是出厂默认,很多"WSL 连不上/访问不了"的问题,根因都是它没被正确配置。这一节的目标:确认 NAT 处于健康状态,并搞清它的 localhost 转发到底怎么工作。

1. 确认或创建配置文件。.wslconfig是一个 INI 文本文件(不是 JSON),放在用户目录下:

# 文件位置:%UserProfile%\.wslconfig [wsl2] networkingMode=NAT localhostForwarding=true

这一步在做什么:[wsl2]是段落头,networkingMode=NAT明确锁定为 NAT,localhostForwarding=true允许 Windows 把对本地端口的请求转发进 Linux。

2. 重启 WSL 让配置生效。配置只在虚拟机重建时读取:

wsl --shutdown wsl

wsl --shutdown关掉所有正在运行的 WSL2 实例(相当于重启那台虚拟机),下次wsl起来时重新应用配置。

3. 验证。进 Linux 里跑:

ip addr show eth0 curl -s https://api.ipify.org

第一步看eth0拿到的 IP 是不是 172.x 这类虚拟网段地址;第二步看能不能出外网。两个都对,NAT 就是好的。

底层在哪里:NAT 的宿主侧逻辑主要在 src/windows/common/NatNetworking.cpp;模式枚举定义在 src/windows/common/WslCoreConfig.h(Nat=1 / Bridged=2 / Mirrored=3);Linux 一侧的本地端口处理见 src/linux/init/localhost.cpp。

这一节帮你让 Windows 直接访问 WSL 里的服务

这是新手最常卡住的地方:Linux 里python -m http.server 8000起来了,Windows 浏览器却打不开localhost:8000。根因是 NAT 模式下两个系统的localhost不是同一个。切到镜像模式能一劳永逸。

1. 改配置。把networkingMode改成mirrored:

# %UserProfile%\.wslconfig [wsl2] networkingMode=mirrored

这一步在做什么:镜像模式让 WSL2 直接共享宿主机的网络命名空间,Windows 和 Linux 的localhost指向同一套接口,端口双向可达。

2. 重启生效:

wsl --shutdown wsl

3. 验证。在 WSL 里起服务,再在 Windows 里访问:

# WSL 内 python3 -m http.server 8000
# Windows 内 curl http://localhost:8000

Windows 这边能拿到 200 响应,说明双向打通。

底层在哪里:镜像模式的宿主侧实现见 src/windows/service/exe/MirroredNetworking.cpp 与 src/windows/service/exe/WslMirroredNetworking.cpp;请求转发相关的代理逻辑在 src/windows/service/exe/LxssHttpProxy.cpp。

前提提醒:镜像模式要求较新的 WSL 版本和内核。如果你的系统版本太老、切完ip addr报错,先升级 WSL(wsl --update)再配。

这一节帮你让局域网其他设备直连 WSL

当你想让办公室的同事、家里的手机直接访问 WSL 上跑的服务(比如一个内部 API 或 Git 服务器),就需要 WSL 拥有真实网段里的 IP。这正是桥接模式干的事。

1. 改配置。

# %UserProfile%\.wslconfig [wsl2] networkingMode=bridged

这一步在做什么:桥接让 WSL2 的虚拟网卡直接"插"到物理网卡所在的网段,由路由器 DHCP 分配一个局域网真实 IP,Linux 就此成为网络里的平等成员。

2. 重启:

wsl --shutdown wsl

3. 验证。看 IP 是否变成了真实网段(例如 192.168.x.x,和你 Windows 的ipconfig同网段):

ip addr show eth0

然后从局域网另一台设备浏览器里访问这个 IP。能通,桥接就配好了。

底层在哪里:桥接的宿主侧逻辑见 src/windows/service/exe/BridgedNetworking.cpp;网络端点/网卡相关的配置解析在 src/windows/common/WslCoreNetworkEndpointSettings.cpp。

桥接模式对系统版本、网卡和虚拟化环境有要求,且切完如果拿不到 IP,多半是驱动或权限问题,先wsl --update并确认以管理员运行过相关命令。

这一节帮你一次定位"为什么网络不对劲"

配置改完却不通,别慌。按这张表对着查,能覆盖绝大多数情况:

现象最可能的原因排查动作
端口打不开用了 NAT 却忘了开localhostForwarding,或防火墙拦了确认.wslconfig里该开关为 true;检查 Windows 防火墙入站规则
DNS 解析失败/etc/resolv.conf里的 DNS 不对查看cat /etc/resolv.conf,临时换成公共 DNS(如8.8.8.8)
Windows 访问 WSL 的localhost不通处于 NAT 模式、无转发改用镜像模式,或配置端口转发
桥接后拿不到 IP / IP 冲突版本过低、DHCP 冲突先wsl --update;给 WSL 固定静态 IP
时快时慢、不稳定模式与需求不匹配按上面决策树重新选模式

几个通用验证命令,随取随用:

ip addr show eth0 # 看网卡和 IP 是否属于预期网段 ping 8.8.8.8 # 验证基础外网连通(绕过 DNS) cat /etc/resolv.conf # 看当前 DNS 配置

NAT 模式下宿主侧的端口转发/中继逻辑,可参考 src/windows/wslrelay/localhost.cpp;官方对 localhost 转发的机制说明在 doc/docs/technical-documentation/localhost.md。

动手挑战:让一个服务"两边都够得着"

给你一个能直接练的场景,把三种模式的价值一次吃透:

  1. 先用默认NAT,在 WSL 里python3 -m http.server 8000,观察 Windows 的localhost:8000能否访问,记录结果。
  2. 切成镜像,重复上面步骤,对比localhost:8000的行为变化——你会直观感受到"两个 localhost 是否合一"。
  3. 最后切桥接,从局域网另一台设备访问 WSL 的真实 IP,体会"WSL 变成独立网络节点"的含义。

每切一次都记得wsl --shutdown再进。做完这三步,networkingMode对你就不再是一行看不懂的配置,而是三张你能随手切换的网络蓝图。

还想深入 Linux 一侧的启动与网络初始化,可以继续看 doc/docs/technical-documentation/ 下的相关文档,源码入口集中在 src/linux/init/ 和 src/windows/common/。

【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询