封面

Windows设置WSL自动使用宿主机代理

WSL2 默认使用 NAT 网络。Windows 代理监听在 127.0.0.1 时,WSL 无法直接访问,经常出现以下提示:

wsl: 检测到 localhost 代理配置,但未镜像到 WSL。
NAT 模式下的 WSL 不支持 localhost 代理。


配置镜像网络

在 Windows PowerShell 中执行:

@"
[wsl2]
networkingMode=mirrored
autoProxy=true
dnsTunneling=true
firewall=true
"@ | Set-Content -Encoding utf8 "$env:USERPROFILE\.wslconfig"


重启 WSL

修改配置后,需要完全关闭 WSL:

wsl --shutdown


然后重新进入:

wsl


检查代理

进入 WSL 后执行:

env | grep -i proxy


代理同步成功时,可以看到类似输出:

http_proxy=http://127.0.0.1:10809
https_proxy=http://127.0.0.1:10809
HTTP_PROXY=http://127.0.0.1:10809
HTTPS_PROXY=http://127.0.0.1:10809


其中 10809 是 Windows 代理软件设置的本地端口,不同软件和配置可能使用不同端口。

测试网络:

curl -I --connect-timeout 10 https://www.php.net


代理关闭时的行为

使用镜像网络和自动代理后:

  • Windows 系统代理开启时,WSL 自动使用宿主机代理。
  • Windows 系统代理关闭时,WSL 使用直连网络。
  • 不需要获取或写死 WSL NAT 模式下会变化的 172.* 宿主机地址。
  • WSL 已经运行时,Windows 代理状态不一定立即同步。

还要确保代理软件退出时会关闭 Windows 系统代理。如果代理程序已经停止,但系统代理仍指向 127.0.0.1,WSL 同样会同步这个失效配置。

发布评论
全部评论(1)
用户头像
空格#1202359

好复杂,看不懂[mayday-4]