尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WSL 网络配置终极实战:从“连不上网“到“局域网随便访问“的完整指南

WSL 网络配置终极实战:从“连不上网“到“局域网随便访问“的完整指南 WSL 网络配置终极实战从连不上网到局域网随便访问的完整指南【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSLWSLWindows Subsystem for LinuxWindows 里的 Linux 子系统的网络由四种接线方式决定NAT、桥接、镜像和实验性的 Consomme。选错任何一种都会遇到WSL 能上网但 Windows 访问不了里面的服务局域网设备连不进 WSL这类问题。本文按你要达成的目标带你配好 .wslconfig每一步都给出验证命令和最容易踩的坑。10 秒自查你的症状对应哪种网络配置先对号入座再往下翻对应小节你遇到的情况推荐接线方式一句话解释WSL 里curl能上网但 Windows 浏览器打不开 WSL 起的服务NAT默认确认没改坏默认模式自带端口转发多半是转发没开Windows 和 WSL 想互相用localhost谁都不用记 IP镜像 mirroredWSL 直接借用 Windows 的网络身份双向直通手机、同事的电脑要访问 WSL 里的服务桥接 bridgedWSL 拿到和 Windows 同网段的独立 IP成为局域网正式成员大量数据传输、跑数据库嫌默认网络慢Consomme实验性前置条件是开启 virtio走虚拟化的半虚拟化网卡吞吐高、延迟低公共配置三个方案都要先做的 3 件事1. 找到配置文件。所有网络开关都写在用户目录下的.wslconfig里路径是%UserProfile%\.wslconfig。文件不存在就新建存在就编辑。2. 认识总开关。四种模式都靠同一个键切换——[wsl2]段下的networkingMode取值分别为NAT、bridged、mirrored和Consomme。下面是基础骨架后文只贴每个方案不同的几行[wsl2] networkingMode NAT localhostForwarding true3. 改完必须重启才生效。配置只在虚拟机启动时读取所以每次改动后都要在 Windows 的 PowerShell 里执行wsl --shutdown再重新wsl启动。这一步被跳过是改了没反应的头号原因。通用验证命令。进入 WSL 后执行ip addr show eth0看网卡拿到的 IP 段再执行curl -s https://api.ipify.org确认出网正常。IP 落在 172.x、192.168.65 这类私有段通常是 NAT落在你路由器分配的网段和 Windows 的 IP 同段则是桥接或镜像生效了。目标一WSL 正常上网Windows 能访问 WSL 里的服务NATNAT 的意思是WSL 躲在 Windows 背后上网WSL 自己没有公网身份但 Windows 到 WSL 的 localhost 端口转发默认是通的。配置上只需要保证networkingMode NAT并确认localhostForwarding true这一行存在。验证在 WSL 里用 Python 起一个静态服务python3 -m http.server 8000然后 Windows 浏览器直接打开localhost:8000能看到目录页就通了。⚠️ 最大的坑很多人把.wslconfig存成了.wslconfig.txt或放进了 WSL 内部的文件系统Windows 侧根本读不到。用记事本打开%UserProfile%确认扩展名没有.txt尾巴。目标二Windows 和 WSL 互相用 localhost不用记任何 IP镜像镜像模式下 WSL 不再单独挂一块网卡而是直接共享 Windows 的网络栈——WSL 里的服务自动出现在 Windows 的 localhost 上反方向用host.lxcontainer也能摸到 Windows。在骨架文件基础上把模式行改成[wsl2] networkingMode mirrored验证WSL 里跑python3 -m http.server 8000Windows 和 WSL 各自的浏览器都能用localhost:8000打开两边结果一致。⚠️ 最大的坑镜像模式会自动开启 Hyper-V 防火墙保护个别端口被拦是正常现象。如果某个端口死活不通实验性的ignoredPorts设置可以把端口加白名单但先用wsl --shutdown重启再试一遍多数不通只是忘重启。目标三让局域网里其他设备直接访问 WSL桥接桥接把 WSL 从Windows 的影子变成局域网里的独立成员路由器的 DHCP 会直接给 WSL 的 eth0 分配一个和 Windows 同网段的 IP手机、其他电脑都能用这个 IP 找上门。相比骨架桥接要新增一行vmSwitch填你物理网卡的名称PowerShell 里Get-NetAdapter | Where-Object Status -eq Up可以列出来选你正在用上网的那个[wsl2] networkingMode bridged vmSwitch Wi-Fi不指定 MAC 时 WSL 会自动生成一个随机 MAC 并记住它重启后 IP 身份保持稳定所以这一项通常不用手写。验证ip addr show eth0看 IP 是否和 Windows 处于同一网段比如 Windows 是 192.168.1.10WSL 拿到 192.168.1.x 即为成功再拿手机连同一 WiFi 访问http://WSL的IP:8000。⚠️ 最大的坑vmSwitch填错适配器比如填了没启用或休眠状态的网卡WSL 会启动后没有网络且没有任何报错。填完先确认该适配器状态是已连接。目标四高吞吐、低延迟的大流量场景Consomme virtio先说清楚事实仓库代码里的正式模式只有 NAT、Bridged、Mirrored 三种Consomme目前标注为实验性且硬依赖 virtio——如果没开 virtioWSL 启动时会警告并自动回退到 NAT你看到的将是配了但没生效。开启分两步先加virtio true让虚拟化走半虚拟化驱动再把模式改成Consomme[wsl2] virtio true networkingMode Consomme验证ip addr确认网卡正常起来后在 WSL 里装iperf3起服务端iperf3 -sWindows 侧用iperf3 -c WSL的IP打流量对比默认 NAT 模式的吞吐差距。⚠️ 最大的坑它是实验性通道遇到不兼容的硬件或驱动组合会直接静默降级成 NAT。改完启动后用ip addr确认 IP 段和预期一致别只看能上网就下结论。故障速查表症状先查什么处理动作Windows 访问不了 WSL 里的端口是否改过 networkingMode、localhostForwarding是否为 true恢复 NAT 或加开转发wsl --shutdown后重启WSL 完全上不了外网/etc/resolv.conf里的 DNS 是否指向死地址手动写入nameserver 223.5.5.5或检查 NAT 网关地址是否被策略覆盖桥接后没有 IPvmSwitch指向的适配器是否可用换用当前正在上网的适配器名重启 WSL局域网设备偶发连不上 WSL桥接下 DHCP 分配的 IP 漂移在路由器里给 WSL 的 MAC 绑一个固定 IPConsomme 配置后像没生效是否漏开virtio true补上 virtio 行仍降级就暂时退回 NAT进阶实战动手任务给 WSL 里起两个不同的服务——一个 Web 服务要能被抓包设备抓到真实源 IP另一个 API 只服务 Windows 本机的前端。提示.wslconfig是全局文件两种模式没法在同一个文件里同时给不同发行版分配想想 WSL 里多个独立运行环境还能怎么拆。源码去哪儿看想追到底层怎么实现的看这两处就够Windows 侧的模式解析与校验逻辑在 src/windows/common/WslCoreConfig.cppWSL 内部的 localhost 转发在 src/linux/init/localhost.cpp。更完整的机制说明在仓库自带的 doc/docs/technical-documentation/ 目录下配置项有任何新增都以那里为准。【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表