WSL2 设置代理

WSL2 设置代理

WSL2 使用虚拟网络适配器,默认与 Windows 主机不在同一网段。要让 WSL2 内的命令行工具(apt、curl、git 等)走 Windows 上的代理软件,需要正确获取 Windows 主机的 IP 地址并配置环境变量。

核心思路

WSL2 中 Windows 主机的 IP 可以通过 ip route 获取(default 网关即为 Windows 主机)。代理软件(如 Clash、v2rayN)通常在 Windows 上监听 0.0.0.0:7890,WSL2 内通过该 IP + 端口即可访问。

配置别名

~/.bashrc~/.zshrc 中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export hostip=$(ip route show | grep -i default | awk '{ print $3}')

alias proxy='
export https_proxy="http://${hostip}:7890";
export http_proxy="http://${hostip}:7890";
export all_proxy="socks5://${hostip}:7890";
echo -e "Acquire::http::Proxy \"http://${hostip}:7890\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
echo -e "Acquire::https::Proxy \"http://${hostip}:7890\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'

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;
'

逐段说明

部分 作用
hostip=$(ip route show | grep default | awk '{print $3}') 获取 Windows 主机在 WSL2 虚拟网中的 IP
http_proxy / https_proxy 设置 HTTP/HTTPS 代理,curl、wget、git 等工具会读取
all_proxy 设置 SOCKS5 代理,部分工具(如 ssh)会读取
/etc/apt/apt.conf.d/proxy.conf apt 的代理配置文件,单独设置

使用方式

1
2
3
4
5
6
7
source ~/.bashrc   # 重新加载配置

proxy # 开启代理
apt update # 走代理下载
curl https://api.github.com

unproxy # 关闭代理

验证代理

1
2
curl -v https://www.google.com 2>&1 | grep -i proxy
echo $http_proxy

注意事项

  1. 代理软件监听地址:确保 Windows 代理软件允许 LAN 连接(监听 0.0.0.0 而非 127.0.0.1
  2. 端口一致:上面示例用 7890,如果你的代理软件用其他端口(如 10808080),请修改别名中的端口号
  3. 防火墙:Windows 防火墙可能会阻止 WSL2 访问 Windows 端口,需要在防火墙中放行
  4. WSL1 用户:WSL1 与 Windows 共享网络栈,直接用 127.0.0.1:7890 即可,不需要获取 hostip

小结

通过 ip route 动态获取 Windows 主机 IP,配合 alias 快速切换代理状态,是 WSL2 下最省心的代理配置方案。不需要手动查 IP,也不受 WSL 重启后 IP 变化的影响。