这个问题是因为 WSL2 使用 NAT 网络模式,无法直接访问 Windows 的 localhost 代理。解决方法如下:
✅ 方案一:改用 Windows 主机 IP(推荐)
在 WSL 中,不要用 127.0.0.1 或 localhost,而是用 Windows 在 WSL 中的 IP。
1️⃣ 获取 Windows 主机 IP
在 WSL 中执行:
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
输出类似:172.20.0.1
2️⃣ 设置代理环境变量
假设你的代理端口是 7890:
export http_proxy="http://172.20.0.1:7890"
export https_proxy="http://172.20.0.1:7890"
export all_proxy="socks5://172.20.0.1:7890"
3️⃣ 永久生效(可选)
写入 ~/.bashrc 或 ~/.zshrc:
echo 'export http_proxy="http://$(grep nameserver /etc/resolv.conf | awk '''{print $2}'''):7890"' >> ~/.bashrc
source ~/.bashrc
✅ 方案二:让代理监听 0.0.0.0
在 Windows 代理软件中:
• 将 监听地址 从 127.0.0.1 改为 0.0.0.0
• 允许局域网连接(Allow LAN)
⚠️ 注意:这样会让同一局域网的设备都能使用你的代理,请确保网络安全。
✅ 方案三:使用 .wslconfig(仅部分情况有效)
在 Windows 用户目录创建 %USERPROFILE%.wslconfig:
[wsl2]
networkingMode=mirrored
然后重启 WSL:
wsl --shutdown
📌 要求 Windows 11 22H2+,且可能带来其他网络变化。
✅ 方案四:关闭 WSL 代理检测(治标不治本)
临时关闭警告:
unset http_proxy https_proxy all_proxy
🔍 验证是否成功
curl ipinfo.io
或
curl google.com
🧠 原因总结
项目 说明
WSL2 网络 NAT,不是桥接
localhost 指向 WSL 自身
Windows 代理 在宿主机上
正确做法 用 Windows 的 真实 IP
