JOURNAL / WORDS & IDEAS

WSL2 访问 Windows 代理:NAT 与镜像网络

区分 WSL2 两种网络模式,整理主机地址、代理端口、环境变量与排障方法。

阅读设置

先确认 WSL 的网络模式

WSL2 常见 NAT 与镜像网络两种模式。可在 Windows 终端查看 wsl --version,并检查用户目录下的 .wslconfig。镜像网络需要受支持的 Windows/WSL 版本;修改配置后通常需重启 WSL。

本文中的 PROXY_PORT 表示代理软件实际开放的 HTTP 或混合端口,不能直接用 SOCKS 端口替代 HTTP 端口。

NAT 模式:从 Linux 找到 Windows 一侧地址

在 WSL 中查看默认路由:

ip route show default

通常默认网关是访问 Windows 宿主机的候选地址,但 VPN、多路由和网络策略可能改变这一点。不要只把 /etc/resolv.conf 的 nameserver 当作宿主机地址;启用 DNS 隧道时它可能是专用 DNS 地址。

Windows 代理需监听 WSL 可达的接口,并在防火墙中仅允许所需 WSL 来源。只监听 127.0.0.1 的服务通常不能直接从 NAT 客体访问。

## 把地址与端口替换为自己的实际配置
curl -I --connect-timeout 5 --max-time 15 \
  --proxy http://WINDOWS_HOST:PROXY_PORT https://example.com

镜像网络:优先验证 localhost

镜像网络支持在合适配置下从 WSL 使用 Windows 的 localhost 服务:

curl -I --connect-timeout 5 --max-time 15 \
  --proxy http://127.0.0.1:PROXY_PORT https://example.com

是否可达仍受监听地址、Hyper-V 防火墙、VPN 和软件版本影响。先让这一条显式代理请求成功,再改环境变量。

环境变量与撤销

export http_proxy=http://WINDOWS_HOST:PROXY_PORT
export https_proxy="$http_proxy"
export no_proxy=localhost,127.0.0.1,::1
## 不再需要时
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY all_proxy

只有需要 SOCKS 且应用支持时,才单独配置如 all_proxy=socks5h://HOST:PORT。socks5h 通常让代理端解析目标主机名;支持情况依客户端而定。

确认稳定后再把设置写入 shell 配置。Git、apt、Docker 和桌面应用可能使用各自的代理设置,环境变量并非通用开关。

排障顺序

  1. Windows 本机通过同一代理端口能否访问目标?
  2. 代理是否允许 WSL 地址连接,端口协议是否一致?
  3. WSL 路由、DNS 和 Windows 防火墙是否符合当前模式?
  4. 显式 curl --proxy 成功后,再检查应用自己的配置。

不要一开始就固定公网 DNS 或覆盖 resolv.conf;这些做法可能破坏 DNS 隧道、企业域名和 VPN 分流。