命令行代理

WSL2 怎么走 Clash Verge 代理:宿主机 IP 加混合端口,环境变量与 Tun 对照

Windows 上 Clash 已经能上网,WSL2 里 curl / git / npm 却还是直连或超时——正常。WSL2 是单独网络命名空间,不会自动继承 Windows 的系统代理。要在子系统里显式指到宿主机的代理端口。

验收顺序固定:先证明 Windows 宿主浏览器走 Clash 正常,再进 WSL 配环境变量。宿主都没通,先别折腾 WSL。

最小写法:宿主机 IP + 混合端口

在 WSL 里查到 Windows 宿主机 IP(发行版/网络模式不同,命令也不同;mirrored 模式与旧 NAT 模式表现不一样,以你当前 WSL 文档为准):

# 旧 NAT 模式:默认网关通常就是 Windows 宿主
ip route show default | awk '{print $3}'

# 也可看 resolv.conf 的 nameserver
grep nameserver /etc/resolv.conf

# 镜像(mirrored)模式:宿主与 WSL 同栈,一般直接用 127.0.0.1

拿到 IP 后设置(端口以 Clash 设置页为准):

export http_proxy=http://宿主机IP:混合端口
export https_proxy=http://宿主机IP:混合端口
export ALL_PROXY=socks5://宿主机IP:混合端口

端口以 Clash 设置页为准。Clash 需允许局域网连接;Windows 防火墙放行该端口。只在当前窗口 export 会丢,写入 ~/.bashrc / ~/.zshrc 才持久。只想代理部分命令,可以用函数包一层,避免全局污染。

Tun、Git/npm/Docker、IDE

Tun 主要接管 Windows 侧流量,对 WSL2 不是「开了就全自动」。多数情况仍要环境变量或镜像网络模式配合。Git、npm、Docker-in-WSL 各自读代理变量的方式略有差别,失败时看是超时、连接拒绝还是 DNS。Remote WSL 的 IDE 终端同样要带上这些变量。

公司 VPN + WSL + Clash 三重叠加时,一次只改一层:先断 VPN 对比,再动代理。HTTPS 中间人/公司证书会导致 npm 报证书错,那是证书信任问题,不是简单换节点能好。

常见失败与残留

连接拒绝:Allow LAN 没开、防火墙拦、IP 写错。超时:节点或链路问题,先回宿主测。DNS 异常:子系统解析和 Windows 不一致时,先简化 DNS 再测代理。关掉代理后 WSL 仍走代理:清环境变量并开新 shell。WSL1 与 WSL2 经验不要混用。

怎样算通了

WSL 里访问外网与宿主表现一致;git/npm 在需要时代理成功;关掉变量后新终端不再误走代理。命令行代理总览也可对照命令行代理;端口问题见端口占用。

先保证 Windows 侧代理是好的

WSL 排错前,先在 Windows 浏览器验证 Clash 可用,再向下钻 Linux 子系统。