在WSL2中使用Clash verge镜像配置代理网络连接

!NOTE:
WSL2版本:2.6.3.0
WSL2内核:6.6.87.2-1
Windows版本:Windows 11 25H2

背景

在平时打开WSL@Ubuntu时,会发现一行提示:

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

这意味着WSL2中的网络连接无法使用Windows的localhost代理,需要手动配置代理才能访问外网。
经过查询,发现WSL2的网络默认是通过NAT进行转换的,而Windows的localhost在WSL2中是不可见的,因此需要将Windows的代理配置镜像到WSL2中。

解决方案

!NOTE:
配置更改的8秒原则:
必须等到运行你的 Linux 发行版的子系统完全停止运行并重启,配置设置更新才会显示。 这通常需要关闭发行版 shell 的所有实例后大约 8 秒。
如果启动分发版(例如 Ubuntu),请修改配置文件,关闭分发版,然后重启它,你可能会假设配置更改已立即生效。 但当前情况并非如此,因为子系统可能仍在运行。 在重新启动之前,必须等待子系统停止,以便有足够的时间让系统识别你的更改。 可以通过使用 PowerShell 和以下命令来检查关闭 Linux 发行版 (shell) 后其是否仍在运行:wsl --list --running。 如果分发版未运行,则会收到响应:“没有正在运行的分发版。”现在可以重启分发版,以查看应用的配置更新。
命令 wsl –shutdown 是重新启动 WSL 2 发行版的快速途径,但它会关闭所有正在运行的发行版,因此请谨慎使用。 还可以使用 wsl --terminate <distroName>来终止正在运行的特定发行版。

因为我本地开了Clash verge代理软件,所以需要将Clash verge的代理配置镜像到WSL2中。而新版的WSL2已经支持了Mirrored网络模式,可以直接将Windows的代理配置镜像到WSL2中。

  1. 打开Clash verge,进入设置页面,打开局域网连接
    ClashVergeLan
  2. 进入系统代理页面,保持PAC关闭:
    ClashVergeSystemProxy
  3. 打开WSL settings,进入网络设置界面,把第一个网络模式设置为Mirrored即可。
    WslNetworkMirrored
  4. 最后打开WSL@Ubuntu-24.04终端,输入sudo visudo,把下面绿色框里的注释取消掉:
    visudo

验证

重新启动WSL@Ubuntu-24.04终端,输入wget www.google.com,如果能正常下载Google首页的HTML代码,说明代理配置成功。

ConfirmSetting

参考资料

2026年1月2日