外观
WSL 2 连不上 Windows 的 Clash 代理?按 NAT 和镜像模式排查
约 1899 字大约 6 分钟
WSL 2ClashNAT镜像网络
2026-11-09
Windows 浏览器能上网,Ubuntu 终端里填同一个 127.0.0.1 和代理端口,curl 却报连接失败。此时先确认 WSL 2 怎样连接宿主 Windows。默认 NAT 模式下,发行版通常要填 Windows 宿主在 WSL 虚拟网络里的 IP。镜像模式生效后,可以用 IPv4 回环地址 127.0.0.1 连接 Windows 服务。两种方式都要配上 Clash 实际启用的 HTTP 或混合端口。Microsoft Learn 的 WSL 网络说明
本文只检查 WSL 发行版中的 curl 怎样把请求交给 Windows 上的 Clash 或 Mihomo 客户端。先保持当前节点和分流设置,逐段核对地址、监听和请求结果。这样即使浏览器通过其他方式联网,也能单独判断这条路径。
先辨别 WSL 版本和网络模式
在 Windows PowerShell 运行 wsl -l -v,找到你实际使用的发行版,查看 VERSION 是否为 2。这列只表示 WSL 版本。进入该发行版后,如果系统带有 wslinfo,可以运行 wslinfo --networking-mode 查看当前网络模式。较早版本可查看 Windows 用户目录的 .wslconfig 中的 networkingMode,同时留意启动时有没有降级或配置失败提示。配置文件表示想启用的模式,排查时以实际运行状态为准。WSL 基本命令 · WSL 配置参考
| 当前模式 | 在 WSL 中填写的代理主机 | 接着检查 |
|---|---|---|
| NAT | Windows 宿主在 WSL 虚拟网络里的 IPv4 地址 | 宿主监听是否覆盖该地址,来源是否允许 |
| 镜像(mirrored) | 127.0.0.1 | Windows 的 IPv4 本地代理入口是否正常 |
NAT 模式下查宿主地址
在 WSL 的 Linux 终端运行下面的命令。普通 NAT 环境的 default via 后面会显示网关地址,微软的访问示例用这个地址连接 Windows。重启后如旧地址失效,重新查询即可。若出现多条默认路由或配置了自定义虚拟网络,先核对哪条路由对应 WSL 的 NAT 接口。DNS 隧道会影响 /etc/resolv.conf 里的解析器地址,优先从路由表找网关。Microsoft Learn 的 NAT 和 DNS 隧道说明
ip -4 route show default镜像模式下用 IPv4 回环
在支持镜像模式的 Windows 11 22H2 或更高版本上,确认 mirrored 已生效后,用 127.0.0.1 访问 Windows 上的 HTTP 代理。微软说明,这条访问路径支持 IPv4 回环,::1 不适用于此用法。如果目前是 NAT,只有在确实需要镜像模式、且设备允许修改时,才备份 Windows 用户目录的 .wslconfig,在 [wsl2] 段设置 networkingMode=mirrored。保存发行版中的工作后,从 Windows 执行 wsl --shutdown,再重新打开并核对模式。这条命令会结束所有运行中的 WSL 发行版。如果切换影响原有开发环境,恢复原网络模式后按同样方式重启。WSL 网络说明 · WSL 配置生效方式
核对 Clash 的端口和监听范围
先在客户端设置里找 HTTP 或 Mixed(混合)端口。下面的 7890 仅用于示例,换成实际数字。Get-NetTCPConnection 是只读查询,结果为空时,先核对核心是否正在运行、填写的端口是否正确。若找到监听,可用 OwningProcess 核对它属于哪个进程,避免把同端口上的其他程序当成 Clash。Mihomo 代理端口文档 · Microsoft Learn 的监听查询命令
$proxyPort = 7890
Get-NetTCPConnection -LocalPort $proxyPort -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess镜像模式可先用 Windows 上已有的 IPv4 回环监听。NAT 模式下,如果端口只监听 127.0.0.1,需要先处理宿主接口的监听范围。继续用 NAT 时,选择能从 WSL 到达的宿主接口,限制代理端口的来源为 WSL,并保留防火墙。在 Mihomo 的配置中,bind-address 对应 Windows 上接收连接的地址,lan-allowed-ips 对应发起连接的 WSL 来源地址。若客户端只提供一键开放整个局域网的选项,先保留原监听。受管理设备应由管理员确认策略。修改绑定后,再确认 Windows 本机应用原先使用的代理入口仍然可达。Mihomo 的监听和来源限制 · 站内局域网共享安全指南
在 WSL 里发一次显式代理请求
把下面两行变量换成你已经核对过的主机和端口,再在 WSL 的 Bash 中运行。镜像模式用 127.0.0.1,NAT 用刚才查到的宿主 IP。-q 放在最前面以忽略 curl 配置文件,空的 --noproxy 仅在这次测试中清除代理例外,--proxy 指定 HTTP 代理入口。测试目标是公开的 HTTPS 文档页,输出正文丢弃,终端保留连接过程和目标响应码。
proxy_host=127.0.0.1
proxy_port=7890
curl -q -v --noproxy '' --proxy "$proxy_host:$proxy_port" \
--connect-timeout 5 --max-time 15 --output /dev/null \
--write-out '目标响应:%{http_code}\n' \
https://learn.microsoft.com/en-us/windows/wsl/networking先找 Trying 或 Connected to,核对显示的地址和端口。随后看发往 learn.microsoft.com:443 的 CONNECT。代理接受隧道以后,curl 才能继续和目标站完成 HTTPS 交互。可以同时打开 Clash 的连接记录,确认同一时刻的目标和命中规则。客户端接到请求后,仍会按配置选择直连、拒绝或代理组。Mihomo 的运行模式说明
| 实际看到的结果 | 先查哪一段 |
|---|---|
| 代理端口连接被拒绝或在建立 TCP 前超时 | 模式、地址、监听、端口和来源限制 |
| 已连到代理,收到 407 或隧道错误 | 代理认证要求、端口协议和 Clash 对应日志 |
| 隧道建立后报证书错误 | WSL 的时间和证书信任,保留证书验证 |
| 返回目标响应,Clash 也记录了该请求 | 已能把请求交给宿主代理,按规则和目标响应继续判断 |
单次测试通过后,再检查自动代理
显式命令能用而日常工具仍失败时,检查该工具是否读取当前 Linux 进程的代理配置。Windows 11 支持的 autoProxy 会把 Windows 的 HTTP 代理信息带给 WSL。它与网络模式是两项设置,导入的代理地址仍要能从发行版访问。自动配置脚本 PAC 对应的 WSL_PAC_URL 也需要工具有相应支持。先在新开终端核对目标工具读到的地址、端口和例外列表,再调整该工具的设置。微软的 WSL 代理环境说明 · Windows 回环代理与 WSL 的配置示例
排查记录留四项就够用。记下实际网络模式、宿主监听地址、curl 是否连到代理,以及 Clash 里对应的规则和出站。需要求助时,遮住带有用户名、密码或订阅令牌的内容。

