在 WSL2 中使用 Windows 宿主机的代理服务是一种常见需求,本文提供了一个简单的解决方案,让你能够快速切换代理状态。

脚本内容

创建文件 ~/.proxy-setup.sh

#!/bin/bash

# 自动获取 Windows 宿主机 IP
HOST_IP=$(ip route | grep default | awk '{print $3}')
PORT=7890  # 替换为你的代理端口

function set_proxy() {
    # 如果提供了自定义 IP,则使用它
    if [ -n "$2" ]; then
        HOST_IP="$2"
    fi
    
    export http_proxy="http://${HOST_IP}:${PORT}"
    export https_proxy="http://${HOST_IP}:${PORT}"
    export ALL_PROXY="http://${HOST_IP}:${PORT}"

    echo "代理已启用:"
    echo "http_proxy: $http_proxy"
    echo "https_proxy: $https_proxy"
    echo "ALL_PROXY: $ALL_PROXY"

    # 测试连接
    echo -e "\n正在测试代理连接..."
    curl -I https://www.google.com 2>/dev/null | head -n 1 || echo "代理连接失败。请检查你的设置。"
}

function unset_proxy() {
    unset http_proxy
    unset https_proxy
    unset ALL_PROXY
    echo "代理已禁用"
}

# 根据参数执行操作
case "$1" in
    "on")
        set_proxy "$@"  # 传递所有参数
        ;;
    "off")
        unset_proxy
        ;;
    *)
        echo "用法: source $(basename $0) [on [ip地址] | off]"
        echo "示例: source $(basename $0) on 192.168.1.100"
        echo "      source $(basename $0) off"
        ;;
esac

使用方法

1. 配置脚本

# 创建脚本
nano ~/.proxy-setup.sh

# 将上面的脚本内容复制到文件中

# 添加执行权限
chmod +x ~/.proxy-setup.sh

2. 使用代理

# 开启代理(自动获取宿主机IP)
source ~/.proxy-setup.sh on

# 开启代理(指定宿主机IP)
source ~/.proxy-setup.sh on 192.168.3.100

# 关闭代理
source ~/.proxy-setup.sh off

3. 可选配置:添加别名

如果想要更方便地使用,可以在 ~/.bashrc 中添加别名:

echo 'alias proxy="source ~/.proxy-setup.sh"' >> ~/.bashrc
source ~/.bashrc

之后就可以使用以下命令来控制代理:

# 开启代理
proxy on

# 开启代理(指定IP)
proxy on 192.168.3.100

# 关闭代理
proxy off

代理的持久化

如果想要让代理设置在新的终端会话中自动生效,可以在 ~/.bashrc 中添加自动启动代理的命令:

echo 'source ~/.proxy-setup.sh on' >> ~/.bashrc

这样每次打开新的终端时都会自动启用代理。

注意事项

  1. 脚本默认会自动获取 Windows 宿主机 IP,如果自动获取失败,可以手动指定 IP 地址
  2. 需要修改脚本中的 PORT 为你的代理客户端端口(通常为 7890、1080、8080 等)
  3. Windows 代理客户端(如 Clash、V2rayN 等)需要开启"允许来自局域网的连接"选项
  4. 代理设置只对当前终端会话有效,除非进行了持久化配置
  5. 可以通过 echo $http_proxy 命令查看当前代理设置