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 同样会同步这个失效配置。





好复杂,看不懂![[mayday-4]](https://resource.mfuns.net/image/sticker/51/趴窝.png)