如何在WSL2上使用本机代理
由于近日笔者经常用Python下载各种模型,终要解决困扰已久的wsl2与Windows主机代理不互通的问题。笔者浪费了半个下午后终于搞定,在得力助手Gemini的帮助下,主要步骤如下:
- Windows的
.wslconfig设置 - v2rayN的核心设置
- Windows的防火墙设置
- wsl2的旧设置清理
- wsl2的
~/.bashrc设置 - wsl2的
curl -v测试
参考网站:
Advanced settings configuration in WSL | Microsoft Learn
WSL2 使用 V2RayN 局域网 proxychains 代理方案 · Issue #2653 · 2dust/v2rayN
记一次用wsl2中共享宿主机的代理-v2rayN - 沉迷于学习,无法自拔_
.wslconfig
-
访问Windows下的个人账户文件夹,按下
Win + R,输入%UserProfile%并回车 -
检查是否有
.wslconfig文件。如果没有,新建一个文本文件并命名为.wslconfig -
将以下内容粘贴到
.wslconfig中:[wsl2]
# 开启镜像网络模式
networkingMode=mirrored
# 允许 WSL2 访问 Windows 本地服务
localhostForwarding=true
# 自动同步代理设置(可选true/false)
autoProxy=true需注意的是:
autoProxy这个参数决定了wsl2代理的方式,设置为true可以不再配置~/.bashrc,但是问题在于:- 当我们使用
env | grep -i proxy命令,会看到很多奇怪的和网络有关的变量,虽然确实能成功实现代理。 - 不能在wsl2中开关代理,导致很多流量都通过代理来走
后面我们将其设置为
false,以便于在wsl2内部可以方便地控制代理的开关,保证wsl2系统的清晰透明。 - 当我们使用
-
在Windows终端中输入
wsl --shutdown关闭wsl2
v2rayN
- 在v2rayN(撰文时版本为V7.15.7)的基础设置中,启用“允许来自局域网的连接”以及“为局域网开启新的端口”(可选)
- 在v2rayN客户端的主界面左下角能看到为互联网开放的端口,笔者这里是
10810 - 这里系统代理是“自动配置系统代理”,路由模式是“绕过(Whitelist)”
- 然后选好节点,保持v2rayN的进行
FireWall
- 在 Windows 搜索框输入“防火墙”,选择 Windows Defender 防火墙
- 点击 “允许应用或功能通过 Windows Defender 防火墙”。
- 找到或添加
v2rayN.exe和其核心程序(如v2ray.exe或xray.exe),确保 专用 和 公用 都勾选上。通常路径分别在v2rayN\和v2rayN\bin\xray下 - 在防火墙高级设置中,新建一个入站规则,允许端口
10810的 TCP 流量(与v2rayN相对应)
wsl2
清理旧设置
# 1. 清除旧的、混乱的代理环境变量 |
确保在第一步已开启镜像网络模式并重启好wsl2。当然这步也不是必须的,因为后面~/.bashrc会自动处理这些就变量。
~/.bashrc
# 用其它的编辑器同理 |
在与Gemini多次实验后,得出以下内容用于添加到~/.bashrc底部:
function proxy_on() { |
保存以上内容后,输入:
source ~/.bashrc |
然后再:
curl -I https://www.google.com |
应该就会出现以下内容,表示连接成功:
笔者同时也用ping去测试了一下,虽然不成功,但不影响使用。
HTTP/1.1 200 Connection established |
笔者再次尝试下载模型,果然成功:
import gensim.downloader as api |
再不成功的解决方案
最有效的方法的就是在完成了上面步骤后,wsl2中输入:
curl -v https://www.google.com |
然后把输出的结果交给AI,它会告诉你的。
除特別聲明外,本博客所有文章均採用CC BY-NC-SA 4.0 授權協議。轉載請註明出處:边个濑椰のBlog。