










| 组件 / 环境 | 版本 / 配置信息 |
|---|---|
| 宿主机操作系统 | Windows 11 23H2 / 24H2 |
| 子系统架构 | WSL2 (Linux 6.6.x 内核) |
| WSL 网络模式 | 镜像模式 (networkingMode=mirrored) |
| 宿主机代理工具 | Clash Verge Rev / Sing-box / Mihomo (启用 TUN 模式) |
| 本地网络拓扑 | 宿主机物理 IP 为 192.168.1.100/24,网关为 192.168.1.1 |
在 Windows PowerShell 或命令提示符中,访问同局域网另一子网下的目标主机(192.168.10.50)一切正常。但在 WSL2 终端中发起 ICMP 探测或 TCP 请求时,均无法连通:
1 | ping -c 2 192.168.10.50 |
控制台立即返回如下 ICMP 路由不可达报错:
1 | PING 192.168.10.50 (192.168.10.50) 56(84) bytes of data. |
198.18.0.1 Destination Host Unreachable,报错并非超时(Request Timed Out),而是明确的网关拒绝。wsl --shutdown 重启后,物理网络正常访问外网,但只要宿主机开启 TUN 模式,该跨网段局域网请求依然失败。核心根本原因简述:WSL2 镜像网络将 Windows 端代理的 TUN 虚拟网卡及大段路由同步至 Linux 内部,导致非直连物理子网的私网 IP 被 TUN 路由抢占并发送给代理核心,代理核心无法在远端解析该私网地址从而丢包。
在 WSL2 内部执行 ip route 查看当前全局路由规则:
1 | 0.0.0.0/8 via 198.18.0.2 dev eth0 proto kernel metric 1 |
通过 ip route get 192.168.10.50 进行路由选路决策跟踪:
1 | ip route get 192.168.10.50 |
graph TD
A["WSL2 发起请求<br/>目标: 192.168.10.50"] --> B{"查询内核路由表决策"}
B -->|"优先匹配 192.0.0.0/2<br/>(Metric 1 极高优先级)"| C["出口: eth0 (TUN 网卡 198.18.0.1)"]
B -.->|"未能命中 192.168.1.0/24<br/>(非本机直连物理网段)"| D["出口: eth2 (物理网卡 192.168.1.1)"]
C --> E["代理核心 (Mihomo / Clash / Sing-box)"]
E -->|"私网 IP 无法路由至远端节点"| F["直接回送 ICMP Unreachable 丢包"]eth2 属于 192.168.1.0/24 子网,直连链路路由仅覆盖 192.168.1.0 ~ 192.168.1.255。192.0.0.0/2 via 198.18.0.2(覆盖 192.0.0.0 至 255.255.255.255),其跃点数(Metric)为 1。192.168.10.50 不属于 192.168.1.0/24,因此匹配到了 Metric 极小的 192.0.0.0/2,流量被送往 eth0(TUN 虚拟网卡 198.18.0.1)。根据使用场景,可选择WSL 内部指定路由(快速生效)或宿主机代理绕过(长期根治)。
在 WSL2 终端中,显式为目标私网网段添加一条精确路由,指定通过宿主机物理网卡网关发送:
1 | sudo ip route add 192.168.10.0/24 via 192.168.1.1 dev eth2 |
参数说明:
192.168.10.0/24:需要访问的对端局域网网段。192.168.1.1:当前物理局域网网关(可通过ip route show default确认)。eth2:WSL2 镜像网络中对应的物理网卡接口。
如果使用 Clash Verge Rev / Mihomo Party / Sing-box 等客户端,修改 TUN 配置中的绕过列表(Bypass CIDR):
1 | tun: |
修改后重启代理内核的 TUN 模式即可生效。
在 WSL2 中重新查询选路状态并执行探测:
1 |
|
控制台输出正常连通响应:
1 | PING 192.168.10.50 (192.168.10.50) 56(84) bytes of data. |
~/.wslconfig 中开启 networkingMode=mirrored 后,WSL2 将完整继承 Windows 宿主机的网络命名空间与适配器。若 Windows 存在全局 VPN、TUN 驱动或虚拟网卡,Linux 内部也会同步感知其路由规则。route-exclude-address 覆盖至整个 Class B/C 私网网段(如 192.168.0.0/16),避免跨子网时因精细掩码不匹配而落入代理大网段规则。/etc/wsl.conf 的 [boot] 段配置 command 执行路由注入脚本。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。