在 Windows 里配好代理IP一切正常,切到 WSL 里 curl 还是直连——这是开发者在 WSL2 下常遇到的一类问题。WSL2 是独立的轻量 Linux 运行环境,网络栈和 Windows 不直接打通,Windows 系统代理不会自动作用到 WSL 里的进程,这一段的”坑”几乎都是环境变量与网络模式引起的。
WSL 的代理和 Windows 不是一回事
WSL2 默认使用 NAT 模式运行,意味着 WSL 看到的是一个独立的虚拟网卡,Windows 那边的代理配置对它完全透明。把 Windows 的系统代理当作 WSL 的代理用,是这套环境里最常见的误解。
常见做法:在 Windows 配好代理IP、看到客户端提示已生效,就直接打开 WSL 跑 curl,期望出口已变。
更稳妥的做法:在 WSL 里单独配置 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 等环境变量,让 WSL 里的进程按这些变量走代理;同时核对代理软件是否监听了 WSL 可达的地址。
- 第一步,确认 WSL 网络模式:WSL2 默认 NAT,部分 Windows 版本支持 mirrored 镜像模式(将 WSL 网络与 Windows 合并);在 /etc/wsl.conf 或 .wslconfig 里查看当前模式,镜像模式下很多网络问题会自然消失。
- 第二步,找到 Windows 主机的 IP:NAT 模式下 WSL 看到的默认网关(ip route show)或 /etc/resolv.conf 的 nameserver 通常就是 Windows 主机 IP;这是代理软件监听地址能否被 WSL 访问到的关键。
- 第三步,配置 WSL 内代理IP环境变量:在 ~/.bashrc 或 ~/.profile 写入 export http_proxy=http://主机IP:端口、export https_proxy=$http_proxy、export all_proxy=$http_proxy,保存后 source 一下生效。
- 第四步,验证出口:在 WSL 里 curl 一个出口地址查询页,看返回 IP 是否已变为代理IP;同时确认 git / apt / pip 各自的代理配置(部分工具默认不读环境变量,需要单独配置)。
- 第五步,固化与排错:WSL 重启后环境变量是否还在、代理IP端口是否变化、代理软件是否监听 0.0.0.0 而非仅 127.0.0.1——把这几处逐一确认下来,多数 WSL 下代理IP”不生效”的故障都能定位。
一个常被忽略的细节是 localhost 转发:代理软件若只监听 127.0.0.1,在 NAT 模式下 WSL 默认访问不到 Windows 主机上的 localhost,需要把监听地址改成 0.0.0.0,或在镜像模式下走 localhost 端口;调整后再跑一次第四步的验证。
下次再遇到 WSL 里出口没变的问题,按这五步从网络模式、主机地址、环境变量、工具差异、监听地址五处依次核一遍,绝大多数都能定位到具体原因。
