随机
Enter 搜索 ↑↓ 切换 Esc 清空

wsl_proxy

命令

配置 WSL2 代理上网

wsl_proxy

配置 WSL2 代理上网

补充说明

WSL2 使用虚拟交换机网络,IP 地址随每次重启动态变化,导致 Windows 宿主机的代理工具(如 Clash、V2Ray)无法直接共享给 WSL2。本教程提供 WSL2 代理配置的完整方案,支持 HTTP/HTTPS/SOCKS5 代理自动适配宿主机 IP。

功能特点

主要章节

章节 内容
原理说明 WSL2 网络架构与代理原理
手动配置 临时设置代理环境变量
自动配置脚本 一键配置持久化代理
代理工具配置 允许局域网连接
常见问题 故障排查

注意事项

原理说明

WSL2 网络架构:

Windows 宿主机 (192.168.1.x / 172.x.x.x)
    ↕ 虚拟交换机
WSL2 实例 (172.x.x.x)

WSL2 通过 /etc/resolv.conf 中的 nameserver 可获取 Windows 宿主机的虚拟交换机 IP,代理客户端监听在 Windows 的某个端口(如 7890),WSL2 通过宿主机 IP + 端口访问代理。

手动配置代理

获取宿主机 IP

在 WSL2 中执行:

# 方法一:从 resolv.conf 获取
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'

# 方法二:使用 hostname
ip route | grep default | awk '{print $3}'

临时设置代理

# 宿主机 IP(替换为实际值)
export host_ip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

# HTTP/HTTPS 代理
export http_proxy="http://$host_ip:7890"
export https_proxy="http://$host_ip:7890"

# SOCKS5 代理
export all_proxy="socks5://$host_ip:7890"

# 测试代理是否生效
curl -I https://www.google.com

自动配置脚本

一键配置脚本

将以下内容添加到 ~/.bashrc

# WSL2 代理配置
function set_proxy() {
    local host_ip=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
    local proxy_port=${1:-7890}

    export http_proxy="http://$host_ip:$proxy_port"
    export https_proxy="http://$host_ip:$proxy_port"
    export all_proxy="socks5://$host_ip:$proxy_port"
    export HTTP_PROXY=$http_proxy
    export HTTPS_PROXY=$https_proxy
    export ALL_PROXY=$all_proxy

    echo "Proxy enabled: http://$host_ip:$proxy_port"
}

function unset_proxy() {
    unset http_proxy https_proxy all_proxy
    unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
    echo "Proxy disabled"
}

function test_proxy() {
    echo "Testing proxy connectivity..."
    curl -s -o /dev/null -w "HTTP: %{http_code}\n" https://www.google.com
    curl -s -o /dev/null -w "HTTPS: %{http_code}\n" https://www.google.com
}

# 默认启用代理(可选,取消注释以启用)
# set_proxy

使配置生效

source ~/.bashrc

# 启用代理(默认端口 7890)
set_proxy

# 指定端口
set_proxy 10809

# 测试
test_proxy

代理开关命令

命令 说明
set_proxy 启用代理(默认端口 7890)
set_proxy 10809 指定端口启用代理
unset_proxy 禁用代理
test_proxy 测试代理连通性

代理工具配置

Clash

Clash 需开启「允许局域网连接」:

  1. 打开 Clash 配置文件
  2. 确保 allow-lan: true
  3. 确保 bind-address: "0.0.0.0"
  4. 检查端口:port: 7890(HTTP)和 socks-port: 7891

V2Ray

V2Ray 客户端需开启局域网监听:

  1. 打开 V2Ray 设置
  2. 启用「允许来自局域网的连接」
  3. 确保监听地址为 0.0.0.0

Windows 防火墙设置

如果连接失败,检查防火墙:

# 添加防火墙规则放行端口
New-NetFirewallRule -DisplayName "WSL Proxy" -Direction Inbound -Protocol TCP -LocalPort 7890,7891 -Action Allow

配置 APT 使用代理

如果仅需 apt 通过代理:

# 临时使用
sudo apt -o Acquire::http::proxy="http://$host_ip:7890" update

# 永久配置
echo 'Acquire::http::proxy "http://$host_ip:7890";' | sudo tee /etc/apt/apt.conf.d/proxy
echo 'Acquire::https::proxy "http://$host_ip:7890";' | sudo tee -a /etc/apt/apt.conf.d/proxy

配置 Git 使用代理

# HTTP/HTTPS
git config --global http.proxy http://$host_ip:7890
git config --global https.proxy http://$host_ip:7890

# 仅对 GitHub 使用代理
git config --global http.https://github.com.proxy http://$host_ip:7890

# 取消代理
git config --global --unset http.proxy

配置 npm/yarn 使用代理

# npm
npm config set proxy http://$host_ip:7890
npm config set https-proxy http://$host_ip:7890

# yarn
yarn config set proxy http://$host_ip:7890
yarn config set https-proxy http://$host_ip:7890

常见问题

连接被拒绝

# 检查宿主机 IP
echo $host_ip

# 测试端口连通性
curl -v http://$host_ip:7890

# 确认代理客户端允许局域网连接

IP 获取失败

如果 cat /etc/resolv.conf 无法获取 IP:

# 使用 ip route 替代
host_ip=$(ip route | grep default | awk '{print $3}')

Windows 防火墙阻止

在 PowerShell 中临时关闭防火墙测试:

# 关闭防火墙(测试用)
New-NetFirewallRule -DisplayName "WSL Proxy Allow" -Direction Inbound -Protocol TCP -LocalPort 7890 -Action Allow

代理仅对当前 shell 生效

确保将 set_proxy 添加到 ~/.bashrc~/.zshrc 中,否则每次新开终端都需要重新执行。

验证配置

# 测试 Google 连通性
curl -I https://www.google.com

# 查看公网 IP
curl -s https://ipinfo.io/json

# 测试 pip 安装
pip install requests

# 测试 git 克隆
git clone https://github.com/torvalds/linux.git /tmp/test-linux

参考链接

相关命令