1. 在 Clash 客户端内的操作

打开客户端的允许局域网连接 (Allow LAN) 开关,如图所示。 记录下客户端内的端口 (Port), 一般默认端口为 7890.

2. 配置

方法一

这个方法需要 Windows 10/11 22H2 和 WSL 2.0.5 及以上版本,如果你不满足版本要求,请参考方法二。 你可以使用 winver 和 wsl -v 查看你的 Windows 和 WSL 版本。

如果你使用这个方法,你需要确保 Clash 客户端中设置的系统代理类型为 HTTP 而不是 PAC,否则无法代理 HTTPS 请求。

如果你确实需要使用 PAC 模式,请参考方法二,在 shell 的配置文件中添加:

export https_proxy=$http_proxy

在 WSL 2.0.5 版本后,一些特性得以稳定,这里要用到的是镜像模式网络。

在 C:\Users<UserName>.wslconfig 文件中 (如果不存在就手动创建一个) 加入以下内容:

[wsl2]
networkingMode=mirrored

不过需要注意,shell 的配置文件中不能再 export http_proxy=....

方法二

WSL 2.2.1 版本默认启用了 DNS 隧道, 会导致该方法失效。如果你正在使用该版本可以参照官方文档配置,在 C:\Users<UserName>.wslconfig 文件中 (如果不存在就手动创建一个) 加入以下内容以关闭 DNS 隧道:

[wsl2]
dnsTunneling=false

你可以执行 wsl -v 查看你的 WSL 版本。

这里默认你使用 bash, 如果你使用其他的 shell, 我相信你知道该改哪里。

编辑 .bashrc,在文件末尾根据第 1 步记录的数据,加入三行内容:

host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export http_proxy="http://$host_ip:[端口]"
export https_proxy="http://$host_ip:[端口]"

输入 source ~/.bashrc 使文件修改生效,可以通过输入 echo $http_proxy 验证修改是否成功。

3. 使 root 用户保留先前设置的环境变量

在使用 sudo 执行命令时,之前设置的环境变量并不会生效,需要进一步设置。 输入 sudo visudo, 加入以下内容并保存。

Defaults env_keep="http_proxy https_proxy"

4. 测试

输入 wget www.google.com, 可以发现连接成功.