1. 问题现象与核心原因
常见报错信息
- 启动 WSL 时提示警告:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。 - 终端工具(如
rustup、curl、git)联网报错:
或通过error: failed to download file ... Connection refused (os error 111)curl -v排查看到:* Uses proxy env variable https_proxy == 'http://<Windows局域网IP>:<端口>' * connect to <Windows局域网IP> port <端口> failed: Connection refused
根本原因
- 网络模式隔离:WSL2 默认采用 NAT 网络模式,无法直接与 Windows 宿主机的
127.0.0.1(localhost)共享网络接口。 - 端口监听与流量接管限制:
- 开启 WSL2 镜像模式与自动代理(
autoProxy)后,WSL 会自动继承 Windows 宿主机的局域网 IP 代理变量(如http://172.x.x.x:7890);但桌面代理客户端默认仅监听本地回环127.0.0.1,未开启 Allow LAN(允许局域网连接),导致来自 WSL 虚拟网卡的请求被拒绝。 - 部分终端命令行工具不遵循环境变量或系统代理,需要通过 TUN(虚拟网卡)模式在网络层透明接管流量。
- 开启 WSL2 镜像模式与自动代理(
2. 基础配置:开启 WSL2 镜像网络与自动代理
无论后续选择哪种代理方案,均建议先完成此项基础配置:
- 按
Win + R键,输入%UserProfile%并回车,打开 Windows 用户主目录(C:\Users\<你的用户名>)。 - 在该目录下新建或编辑名为
.wslconfig的文件(注意:文件名前面有个点,且没有.txt后缀)。 - 写入以下配置内容并保存:
[wsl2] networkingMode=mirrored autoProxy=true - 打开 Windows 终端(PowerShell / CMD),彻底关闭 WSL 以使配置生效:
(等待约 5~8 秒后重新启动 WSL。)wsl --shutdown
3. 代理客户端配置(二选一)
方案 A:开启 Allow LAN + 系统代理(推荐,轻量无需管理员权限)
适用于绝大多数遵循 http_proxy / https_proxy 环境变量的终端工具(如 rustup、cargo、git、curl、apt 等):
- 打开桌面代理客户端,开启 系统代理(System Proxy)。
- 进入客户端设置,找到并开启 允许局域网连接(Allow LAN) 开关(使代理端口监听
0.0.0.0而非仅限127.0.0.1)。 - 若客户端提示“修改配置后需重连生效”,点击重连或重启代理核心。
- 清理此前手动写入
~/.bashrc的残留环境变量(如有),完全交由 WSL2 的autoProxy自动管理:sed -i '/127\.0\.0\.1:/d' ~/.bashrc unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY source ~/.bashrc
方案 B:开启 TUN 模式(虚拟网卡全局接管)
适用于完全无视系统代理与环境变量的特殊命令行程序或容器工具:
- 以管理员身份运行客户端:完全退出桌面代理客户端,右键主程序图标选择 “以管理员身份运行”(创建虚拟网卡需要系统管理员权限)。
- 开启 TUN 开关:进入核心网络设置,打开 TUN(Enable) 开关。
- 关键优化选项(针对 WSL2 建议调整):
- 网络栈(Network stack):建议选择
system或mixed(相比gvisor兼容性更好、吞吐性能更高)。 - DNS 劫持(DNS Hijack):保持开启状态,防止 WSL 内部出现 DNS 污染。
- 严格路由(Strict Route):若开启 TUN 后 WSL 流量仍未被接管,可尝试开启此选项强制路由所有虚拟网卡流量。
- 网络栈(Network stack):建议选择
- 清理代理端口环境变量:TUN 模式下流量在底层被透明拦截,无需且不应在终端里硬编码端口变量:
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
4. 方案对比与选择建议
| 对比维度 | 方案 A:Allow LAN + 系统代理 | 方案 B:TUN 虚拟网卡模式 |
|---|---|---|
| 工作原理 | 开放本地代理端口给 WSL 虚拟网卡访问 | 创建系统级虚拟网卡,底层透明接管路由流量 |
| 系统权限 | 普通用户权限即可运行 | 首次开启必须使用管理员权限 |
| 环境变量依赖 | 依赖 autoProxy 自动注入的代理变量 |
不依赖任何环境变量(对应用完全透明) |
| 推荐场景 | 日常开发首选(与 WSL2 镜像模式兼容性最佳) | 遇到不识别代理环境变量的顽固命令行工具时 |
5. 验证与常用排查命令
配置完成后,重新打开一个 WSL 终端,按顺序执行以下命令验证连通性:
# 1. 查看当前终端的代理环境变量(方案 A 应能看到自动继承的地址,方案 B 可为空)
env | grep -i proxy
# 2. 测试 HTTPS 连通性(返回 HTTP 200 即表示通路正常)
curl -I https://rust-lang.org
6. 安全提示
- 家庭 / 办公室可信内网:可长期保持
Allow LAN开启,方便 WSL2 与局域网设备共享代理。 - 公共 Wi-Fi(咖啡馆、酒店、机场):建议关闭
Allow LAN或改用 TUN 模式,避免同一公共局域网下的陌生设备扫描并占用本地代理端口。