在 WSL2 中使用 Clash for Windows 代理连接
本文最后更新于 2024 年 9 月 2 日 中午
本文撰写时基于的系统是 Ubuntu 20.04/22.04, 如果你使用其他发行版,则下文中的部分步骤与实际情况可能有所出入。
因为网络问题,在 WSL2 中配环境时通常会非常缓慢甚至失败。在整合了各方资料及个人实践后,我总结了在 WSL2 中通过 Clash for Windows 连接代理的方法,供大家参考。
1. 在 Clash 客户端内的操作
打开客户端的允许局域网连接 (Allow LAN) 开关,如图 1 所示。
记录下客户端内的端口 (Port),如这里是 16514
. 一般默认端口为 7890
.
2. 配置
方法一
这个方法需要 Windows 11 22H2 和 WSL 2.0.5 及以上版本,如果你不满足版本要求,请参考方法二。
你可以使用 winver
和 wsl -v
查看你的 Windows 和 WSL 版本。
如果你使用这个方法,你需要确保 Clash 客户端中设置的系统代理类型为 HTTP 而不是 PAC,否则无法代理 HTTPS 请求:
如果你确实需要使用 PAC 模式,请参考方法二,在 shell 的配置文件中添加:
1 |
|
在 WSL 2.0.5 版本后,一些特性得以稳定,这里要用到的是镜像模式网络。
在 C:\Users\<UserName>\.wslconfig
文件中 (如果不存在就手动创建一个) 加入以下内容:
1 |
|
WSL 2.3.11 版本新增了图形化配置界面 (WSL Settings),在网络 > 网络模式处选择 Mirrored
即可:
不过需要注意,shell 的配置文件中不能再 export http_proxy=...
.
方法二
WSL 2.2.1 版本以后默认启用了 DNS 隧道, 会导致该方法失效。你可以参照官方文档配置,在 C:\Users\<UserName>\.wslconfig
文件中 (如果不存在就手动创建一个) 加入以下内容以关闭 DNS 隧道:
1 |
|
你可以执行 wsl -v
查看你的 WSL 版本。
这里默认你使用 bash, 如果你使用其他的 shell, 我相信你知道该改哪里。
编辑 .bashrc
,在文件末尾根据第 1 步记录的数据,加入三行内容:
1 |
|
如图 2 所示,修改完后保存即可。
输入 source ~/.bashrc
使文件修改生效,可以通过输入 echo $http_proxy
验证修改是否成功。
3. 使 root 用户保留先前设置的环境变量
在使用 sudo
执行命令时,之前设置的环境变量并不会生效,需要进一步设置。
输入 sudo visudo
, 加入以下内容并保存,如图 3-1 所示。
1 |
|
如果你使用 Ubuntu 22.04, 则你看到的内容应与图 3-1 不同。如下图所示,取消相应行的注释 (删除行首的 #
) 即可.
4. 测试
输入 wget www.google.com
, 可以发现连接成功,至此大功告成,如图 4 所示。
参考资料
为 WSL2 一键设置代理 (zhihu.com)
sudo保持前用用户的env环境变量 (chenyudong.com, 已失效)