柚子/在WSL2中使用宿主机的代理

Created Mon, 01 Jan 0001 00:00:00 +0000 Modified Tue, 17 Dec 2024 05:01:30 +0000
By Yoyo 929 Words 4 min Edit

1. 创建脚本

以下步骤需要 Root 权限。

1.1 创建脚本文件

打开终端,使用 vim 创建脚本文件:

sudo vim /usr/bin/proxy

将以下脚本内容填入文件中(请确保第四行的 port 使用您实际的代理端口号)。

#!/bin/bash

# 获取 WSL 网络配置
output=$(ipconfig.exe)

# 转换字符编码为 UTF-8
output=$(echo "$output" | iconv -f GBK -t UTF-8)

# 获取虚拟网卡的 IPv4 地址
hostip=$(echo "$output" | grep -A 4 "vEthernet (WSL (Hyper-V firewall))" | grep "IPv4 地址" | awk '{print $NF}' | tr -d '\r\n')

# 设置代理端口 (请根据实际情况修改端口号)
port=7897

# 定义 HTTP 和 SOCKS5 代理
PROXY_HTTP="http://${hostip}:${port}"
PROXY_SOCKS5="socks5://${hostip}:${port}"

# 设置代理函数
set_proxy() {
    # 设置环境变量
    export http_proxy="${PROXY_HTTP}"
    export HTTP_PROXY="${PROXY_HTTP}"
    export https_proxy="${PROXY_HTTP}"
    export HTTPS_PROXY="${PROXY_HTTP}"

    # 设置 git 代理
    git config --global http.proxy "${PROXY_SOCKS5}"
    git config --global https.proxy "${PROXY_SOCKS5}"

    echo "代理设置成功!"
}

# 取消代理函数
unset_proxy() {
    # 清除环境变量
    unset http_proxy
    unset HTTP_PROXY
    unset https_proxy
    unset HTTPS_PROXY

    # 清除 git 配置中的代理设置
    git config --global --unset http.proxy
    git config --global --unset https.proxy

    echo "代理已取消!"
}

# 测试当前设置的代理
test_setting() {
    echo "主机 IP: ${hostip}"
    echo "当前 HTTP 代理: $http_proxy"
    echo "当前 HTTPS 代理: $https_proxy"
    echo "Git 配置的代理: $(git config --global --get http.proxy)"
}

# 根据传入的参数执行不同的操作
case "$1" in
    "set")
        set_proxy
        ;;
    "unset")
        unset_proxy
        ;;
    "test")
        test_setting
        ;;
    *)
        echo "无效的参数,请使用 'set', 'unset' 或 'test'."
        ;;
esac

1.2 说明

  • 代理端口: 请根据您的实际代理端口修改 port=7897。如果您使用的是其他端口,记得修改这一行。
  • IP 地址获取: 脚本通过 ipconfig.exe 获取 Windows 系统中的虚拟网卡(vEthernet (WSL (Hyper-V firewall)))的 IP 地址,并提取出 IPv4 地址。
  • 代理配置: http_proxyhttps_proxy 环境变量会被设置为与 WSL 虚拟网卡绑定的代理地址。而 Git 的 HTTP 和 HTTPS 代理会通过 git config 设置。

1.3 创建并保存脚本

完成脚本编写后,保存并退出 Vim 编辑器。


2. 授予脚本可执行权限

在终端中运行以下命令,赋予脚本执行权限:

sudo chmod +x /usr/bin/proxy

3. 使用脚本设置代理

3.1 设置代理

要启用代理,执行以下命令:

proxy set

此命令会根据脚本中的配置,自动设置 HTTP 和 HTTPS 代理环境变量,并配置 Git 的代理设置。

3.2 取消代理

如果您需要取消代理设置,可以执行以下命令:

proxy unset

该命令会清除所有代理设置,包括环境变量和 Git 配置。

3.3 测试代理设置

如果您想查看当前的代理设置,可以执行以下命令:

proxy test

该命令将显示当前的代理设置,包括主机的 IP 地址以及 Git 配置的代理。


4. 小贴士

  • 端口号修改: 请根据您实际使用的代理端口号修改脚本中的 port=7897
  • 代理生效范围: 本脚本会影响当前终端会话中的环境变量和 Git 配置,其他会话需要重新执行相应命令。
  • Windows 与 WSL: 脚本假设您在 Windows 上运行 WSL (Windows Subsystem for Linux),并且代理端口和 IP 地址是动态获取的。