因为在win用的v2ray,为了解决 WSL2 内访问受限资源(如 Google 搜索、安装 Go 语言包等)的网络问题,仅用于学习,文章灵感来源于 知乎-WSL2内使用windows的v2ray代理配置方式 并重新排版。
配置步骤:
Windows v2ray 客户端设置:
打开你的 v2rayN 或其它 v2ray 客户端。
开启“允许来自局域网的连接” (Allow connections from LAN) 选项。这是关键一步,使 WSL2 能访问到代理服务。
记下客户端使用的 SOCKS5 代理端口 (通常是
10808
,请根据你的实际设置确认)。
WSL2 内 DNS 配置 (解决域名解析问题):
默认 WSL2 使用 Windows 主机的 DNS,但配合代理时可能导致解析失败,也就是域名无法转换成ip地址。
关闭 WSL2 自动生成 DNS 配置:
sudo nano /etc/wsl.conf
添加或修改为以下内容:
[network] generateResolvConf = false
保存并退出 (
Ctrl+O
,Enter
,Ctrl+X
)。
重启 WSL2 (在 Windows PowerShell 或 CMD 中执行
wsl --shutdown
,然后重新打开 WSL 终端)。手动设置 DNS 服务器:
sudo nano /etc/resolv.conf
删除所有现有
nameserver
行,替换为可用的公共 DNS (例如 Google DNS):nameserver 8.8.8.8 nameserver 8.8.4.4 # 或者 nameserver 1.1.1.1 (Cloudflare)
重要: 为防止文件被自动覆盖,设置其不可变属性 (每次 WSL 重启后可能需要重新设置):
sudo chattr +i /etc/resolv.conf
配置代理环境变量和快捷命令:
编辑 WSL2 用户的
~/.bashrc
文件:nano ~/.bashrc
在文件末尾添加以下内容 (请将
10808
替换为你在 步骤 1 中确认的 v2ray 客户端 SOCKS5 端口):# ====== v2ray Proxy Configuration for WSL2 ====== # Get the IP address of the Windows host visible inside WSL2 export hostip=$(ip route | grep default | awk '{print $3}') # Set the port to your v2ray SOCKS5 port (DEFAULT: 10808) export hostport=10808 # Alias to ENABLE the proxy alias proxy=' export HTTPS_PROXY="socks5://${hostip}:${hostport}"; export HTTP_PROXY="socks5://${hostip}:${hostport}"; export ALL_PROXY="socks5://${hostip}:${hostport}"; echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null; echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null; echo "Proxy settings (including APT) ACTIVATED."; ' # Alias to DISABLE the proxy alias unproxy=' unset HTTPS_PROXY; unset HTTP_PROXY; unset ALL_PROXY; sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf; sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf; echo "Proxy settings DEACTIVATED."; ' # ====== End of Proxy Configuration ======
保存并退出 (
Ctrl+O
,Enter
,Ctrl+X
)。使更改立即生效 (或打开新的终端):
source ~/.bashrc
启用代理并测试:
在 WSL2 终端中输入命令启用代理配置:
proxy
你应该会看到
Proxy settings (including APT) ACTIVATED.
的提示。
使用
curl
测试访问 Google:curl -v https://google.com.hk
如果代理工作正常,你应该能看到 Google 主页的 HTML 内容返回 (或经过重定向后的内容)。
-v
参数会输出详细过程,有助于观察是否通过代理连接。
验证通过后:
现在在 WSL2 中执行的命令 (如
go get
,git clone
,wget
,curl
,apt update/install
等),只要它们遵守HTTP_PROXY/HTTPS_PROXY/ALL_PROXY
环境变量或 APT 的代理配置,就会通过 Windows 上的 v2ray 代理进行网络访问。使用
unproxy
命令可以随时关闭代理设置。
故障排除 (如果测试 curl
失败):
检查域名解析:
运行
ping google.com.hk
期望结果: 能解析出 IP 地址 (如
142.250.xxx.xxx
)。即使所有 ping 包都丢失 (100% packet loss
) 也没关系,只要能解析出 IP 就说明 步骤 2 的 DNS 配置基本正确。如果失败: 无法解析 IP 地址,请仔细检查 步骤 2 (
/etc/wsl.conf
,/etc/resolv.conf
,chattr +i
) 是否正确执行并重启了 WSL。
验证 Windows v2ray 客户端本身:
在 Windows 上打开 PowerShell 或 CMD。
尝试在 Windows 终端内运行:
curl -x socks5://127.0.0.1:10808 -v https://google.com.hk
(将
10808
替换为你的实际端口)期望结果: 能成功获取 Google 的响应。如果这里也失败,说明 v2ray 客户端本身配置有问题或节点不可用,请先解决 Windows 端的代理问题。
检查 WSL2 环境变量:
在 WSL2 终端运行
proxy
后,执行:echo $HTTP_PROXY echo $HTTPS_PROXY echo $ALL_PROXY
期望结果: 三个命令都应输出
socks5://<Windows_host_IP>:<Your_Port>
(例如socks5://172.25.112.1:10808
)。<Windows_host_IP>
应该是 WSL2 默认网关的 IP (可用ip route | grep default
查看)。
确认 v2ray 客户端端口:
仔细核对你在 步骤 1 中记下的 v2ray 客户端的 SOCKS5 监听端口,确保与 步骤 3 中
~/.bashrc
文件里设置的hostport
变量值 完全一致。这是最常见的配置错误点。
检查 Windows 防火墙:
确保 Windows 防火墙没有阻止 WSL2 虚拟机网络适配器对
localhost
(或127.0.0.1
) 上代理端口的访问。可以尝试暂时完全关闭 Windows 防火墙测试是否是它的问题。
使用提示:
每次需要让 WSL2 通过代理访问外网时,在终端输入
proxy
。不需要代理时,输入
unproxy
。