拓冰建站拓冰建站
首页 / 资讯中心 / 正文

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

WSL 网络配置实战指南NAT、镜像、桥接 3 种模式怎么选、怎么配【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL这篇文章带你看懂 Windows Subsystem for LinuxWSL里的网络配置。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] networkingModeNAT localhostForwardingtrue这一步在做什么[wsl2]是段落头networkingModeNAT明确锁定为 NATlocalhostForwardingtrue允许 Windows 把对本地端口的请求转发进 Linux。2. 重启 WSL 让配置生效。配置只在虚拟机重建时读取wsl --shutdown wslwsl --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.hNat1 / Bridged2 / Mirrored3Linux 一侧的本地端口处理见 src/linux/init/localhost.cpp。这一节帮你让 Windows 直接访问 WSL 里的服务这是新手最常卡住的地方Linux 里python -m http.server 8000起来了Windows 浏览器却打不开localhost:8000。根因是 NAT 模式下两个系统的localhost不是同一个。切到镜像模式能一劳永逸。1. 改配置。把networkingMode改成mirrored# %UserProfile%\.wslconfig [wsl2] networkingModemirrored这一步在做什么镜像模式让 WSL2 直接共享宿主机的网络命名空间Windows 和 Linux 的localhost指向同一套接口端口双向可达。2. 重启生效wsl --shutdown wsl3. 验证。在 WSL 里起服务再在 Windows 里访问# WSL 内 python3 -m http.server 8000# Windows 内 curl http://localhost:8000Windows 这边能拿到 200 响应说明双向打通。底层在哪里镜像模式的宿主侧实现见 src/windows/service/exe/MirroredNetworking.cpp 与 src/windows/service/exe/WslMirroredNetworking.cpp请求转发相关的代理逻辑在 src/windows/service/exe/LxssHttpProxy.cpp。前提提醒镜像模式要求较新的 WSL 版本和内核。如果你的系统版本太老、切完ip addr报错先升级 WSLwsl --update再配。这一节帮你让局域网其他设备直连 WSL当你想让办公室的同事、家里的手机直接访问 WSL 上跑的服务比如一个内部 API 或 Git 服务器就需要 WSL 拥有真实网段里的 IP。这正是桥接模式干的事。1. 改配置。# %UserProfile%\.wslconfig [wsl2] networkingModebridged这一步在做什么桥接让 WSL2 的虚拟网卡直接插到物理网卡所在的网段由路由器 DHCP 分配一个局域网真实 IPLinux 就此成为网络里的平等成员。2. 重启wsl --shutdown wsl3. 验证。看 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.8Windows 访问 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。动手挑战让一个服务两边都够得着给你一个能直接练的场景把三种模式的价值一次吃透先用默认NAT在 WSL 里python3 -m http.server 8000观察 Windows 的localhost:8000能否访问记录结果。切成镜像重复上面步骤对比localhost:8000的行为变化——你会直观感受到两个 localhost 是否合一。最后切桥接从局域网另一台设备访问 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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门