背景
在项目现场,我遇到了一个反复发作的问题:WSL2里的Hermes Agent无法连接公网API,但Windows本机完全正常,同事的OpenClaw也能正常访问。
更诡异的是——连手机热点时一切正常,一回现场网络就断。而且重启WSL、甚至重启电脑后,有时能恢复,有时不行。
工控现场的网络环境通常比较特殊——物理网卡上绑定了两个IP:
192.168.18.21:上网网段,走默认网关访问公网
192.168.1.250:工控内网网段,访问MES服务器
就是这种"双IP"环境,让WSL2的NAT网络模式彻底暴露了短板。
问题根源:WSL2 NAT + 双IP源地址选择的叠加效应
WSL2默认采用NAT网络模式,意味着WSL内部有独立的虚拟网段(通常172.x.x.x),所有出站流量都要经过Windows宿主机做一次NAT地址转换,再发出去。
问题出在NAT转发的源地址选择上:
Windows原生程序(浏览器、PowerShell)走的是系统原生网络栈,会智能选择与网关同网段的IP作为源地址,因此访问正常
WSL2的NAT转发逻辑比较简单粗暴,直接选中网卡上第一个绑定的IP作为转换后的源地址
如果你的工控内网IP(192.168.1.250)排在第一个,NAT转发后源地址就是这个IP,它与默认网关(192.168.18.1)不在同一网段,网关直接丢弃数据包,表现为WSL内所有公网请求连接超时。
手机热点场景下网卡只有一个IP,不存在选路冲突,所以一切正常。
方案一回顾:调整IP顺序(治标)
7月23日第一次排查时,我采用的方案是调整物理网卡IP的绑定顺序:
打开「控制面板 → 网络和共享中心 → 更改适配器设置」
右键以太网 → 属性 → IPv4 → 属性 → 高级
把两个IP都删除,先添加
192.168.18.21(上网网段),再添加192.168.1.250(工控内网)上网网段填默认网关,工控内网IP不填默认网关
确保
192.168.18.21在IP列表上方
这个方案当时有效,但7月26日再次复发——说明调整IP顺序只是治标不治本。休眠/重启/网络切换后,IP顺序可能被重置,问题就会卷土重来。
方案二:WSL2镜像网络模式(根治)
如果不想每次休眠/重启后都折腾一遍,彻底根治的方法是放弃WSL2默认的NAT模式,改用镜像网络模式(mirrored networking mode)。
什么是镜像网络模式?
Windows 11 22H2及以上版本原生支持WSL2的镜像网络模式。开启后,WSL直接共享Windows的网络栈,不再有NAT转发、源IP选择、虚拟网卡干扰等问题。
简单说:镜像模式下,WSL内的网络表现和Windows本机完全一致。你在Windows里能访问什么,WSL里就能访问什么——不需要任何额外的路由配置。
开启方法
第一步:在Windows用户目录下创建 .wslconfig 文件
路径:C:\Users\你的用户名.wslconfig
写入以下内容:
[wsl2] networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true第二步:以管理员身份打开PowerShell,执行:
wsl --shutdown第三步:重新启动WSL(在终端输入 wsl 或直接打开Ubuntu),验证网络:
curl -s -m 5 -o /dev/null -w ”%{http_code}” https://www.baidu.com# 应该返回 200各配置项说明
配置项 | 作用 | 推荐值 |
|---|---|---|
networkingMode=mirrored | 镜像网络模式,共享Windows网络栈 | 必填 |
dnsTunneling=true | DNS隧道,让WSL使用Windows的DNS解析 | 推荐开启 |
firewall=true | 防火墙镜像,让Windows防火墙规则应用到WSL | 推荐开启 |
autoProxy=true | 自动代理,让WSL继承Windows的代理设置 | 推荐开启 |
两种方案对比
对比维度 | 调整IP顺序 | 镜像网络模式 |
|---|---|---|
操作难度 | ⭐⭐ 中等(控制面板操作多步) | ⭐ 简单(创建文件+重启) |
是否根治 | ❌ 治标,休眠/重启后可能复发 | ✅ 根治,一次配置永久生效 |
兼容性 | ✅ 所有Windows版本 | ⚠️ 需要Windows 11 22H2+ |
对工控内网影响 | ✅ 不影响 | ✅ 不影响 |
对WSL性能影响 | 无 | 无(网络性能反而更好) |
维护成本 | 高(每次复发要重配) | 低(配一次就忘了) |
注意事项
Windows版本要求:镜像网络模式需要Windows 11 22H2及以上版本。Windows 10用户只能用方案一。
防火墙规则:开启
firewall=true后,Windows防火墙规则会应用到WSL,如果某个API在WSL内连不上,先确认Windows本机能不能连。代理配置:开启
autoProxy=true后,WSL自动继承Windows的代理设置,不需要在WSL内单独配置HTTP_PROXY环境变量。回退方案:如果镜像模式出现兼容性问题,删除
.wslconfig文件再执行wsl --shutdown即可恢复到默认NAT模式。WSL版本:确保WSL已更新到最新版(PowerShell执行
wsl --update)。
总结
工控现场的双IP网络环境是WSL2用户的常见痛点。调整IP顺序可以临时解决问题,但会反复发作。镜像网络模式是对WSL2网络架构的根本性改进,让WSL完全共享Windows网络栈,从架构层面消除NAT转发带来的源地址选择问题。
如果你也在工控现场使用WSL2,并且反复遇到"Windows能上网,WSL不能"的诡异问题,不妨试试镜像网络模式——一次配置,永久解决。