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 和桌面应用可能使用各自的代理设置,环境变量并非通用开关。
排障顺序
- Windows 本机通过同一代理端口能否访问目标?
- 代理是否允许 WSL 地址连接,端口协议是否一致?
- WSL 路由、DNS 和 Windows 防火墙是否符合当前模式?
- 显式
curl --proxy成功后,再检查应用自己的配置。
不要一开始就固定公网 DNS 或覆盖 resolv.conf;这些做法可能破坏 DNS 隧道、企业域名和 VPN 分流。