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

之前耕读君写过一篇关于 WSL 应用安装时报 0x80071772 错误的博文,今天就来解决另一个 WSL 常见的错误 —— wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。

原因分析

很多用户都会在 Windows 上使用一些神秘软件,需要更改 Windows 的系统代理,就导致了 WSL 上出现这个错误。具体原因如下:

你的 Windows 主机上设置了一个本地(localhost)代理,比如 127.0.0.1:1080,但这个代理配置没有正确同步到 WSL 里的 Linux 子系统,而在 WSL 的 NAT 网络模式下,localhost(127.0.0.1)在 WSL 和 Windows 主机是隔离的。

通俗一点说:

  • Windows 主机的 127.0.0.1 是 Windows 的回环地址。
  • WSL2 里的 127.0.0.1 是 WSL 虚拟机内部的回环地址,不是 Windows 主机的地址!
  • NAT 网络意味着 WSL 和 Windows 主机通过虚拟网卡通信,它们的 localhost 不是同一个。
  • 你如果在 WSL 里直接连接 127.0.0.1:1080,实际上是连到 WSL 自己,而不是 Windows 的代理服务。
  • 所以系统警告你:这种配置在 NAT 模式(WSL2 默认就是 NAT)下不能直接用,需要额外处理。

解决方案

当前大多数用户都在使用 WSL2,因此我们可以利用 WSL 全局配置文件这项实验特性来解决。

操作方法是在用户目录,即 C:\Users\你的用户名 下创建一个 .wslconfig 文件,内容为:

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

保存文件后,在终端执行  wsl --shutdown 命令关闭 WSL,再重新打开安装的 WSL 应用(如 Ubuntu 22.04)来重启 WSL,这个提示就消失了。

考虑到你可能好奇配置文件里的内容都做了什么,以下具体解析——

配置项含义备注
autoMemoryReclaim=gradual自动回收 WSL 内存,让 WSL 不再一直占用很多内存(渐进式回收)。和代理无关,是优化内存用的。
networkingMode=mirrored网络镜像模式:让 WSL2 的网络直接“镜像” Windows 的网络环境,包括 localhost。关键点!让 WSL 的 localhost 和 Windows 主机的 localhost 指向同一套网络,不再隔离。
dnsTunneling=trueDNS 请求通过 Windows 主机发送,避免 DNS 污染和解析错误。辅助作用,和代理有关联。
firewall=trueWSL 网络流量经过 Windows 防火墙,可以统一控制。安全增强,跟提示没直接关系。
autoProxy=true自动同步 Windows 的系统代理设置到 WSL 环境里。关键点!自动把 Windows 的代理(比如 127.0.0.1:1080)配置到 WSL,不需要手动设置 http_proxy

耕读君
耕读君

热爱科技,热爱折腾,有一个可爱的女儿

文章: 365

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注