跳转至

WSL2 终端代理配置 Clash

0. 准备条件

笔者使用的操作系统为 Windows 11 家庭版 24H2,CPU 为 AMD Ryzen 系列,WSL2 安装的 Linux 发行版为 Ubuntu-22.04。

默认已经安装好 WSL2,以及相应的魔法软件 Clash。

上图中打开 Allow LAN 以及 System Proxy,默认端口(Port)为 7890,请根据情况自行调整。

1. 使用方法

在终端中创建文件 proxy.sh,复制下列内容,运行即可。

参考的运行指令如下,其中文件路径自行调整

source ~/proxy.sh set 打开代理

source ~/proxy.sh test 测试是否成功代理

source ~/proxy.sh unset 取消代理

2. 指令简化

此外,也可以在 bash 配置文件 .bashrc 中添加 alias proxy="source ~/proxy.sh"来简化使用。

简化后指令如下(记得使用 source .bashrc 命令来应用配置文件)

proxy set 打开代理

proxy test 测试是否成功代理

proxy unset 取消代理

3. 脚本参考

注意

脚本中使用了 ip route 来获取 WSL2 的 IP 地址。以往通常使用的 cat /etc/resolv.conf 中保存的 nameserver 来作为 IP 地址已经不再适用。

#!/bin/sh

hostip=$(ip route | grep default | awk '{print $3}')
wslip=$(hostname -I | awk '{print $1}')
port=7890

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}"

  export all_proxy="${PROXY_SOCKS5}"
  export ALL_PROXY="${PROXY_SOCKS5}"

  git config --global http.proxy "${PROXY_HTTP}"
  git config --global https.proxy "${PROXY_HTTP}"

  echo "Terminal proxy has been opened."
}

unset_proxy() {
  unset http_proxy
  unset HTTP_PROXY

  unset https_proxy
  unset HTTPS_PROXY

  unset all_proxy
  unset ALL_PROXY

  git config --global --unset http.proxy
  git config --global --unset https.proxy
  git config --global --unset http.https://github.com.proxy
  git config --global --unset https.https://github.com.proxy

  echo "Terminal proxy has been closed."
}

test_connection() {
  echo "Host IP: ${hostip}"
  echo "WSL IP: ${wslip}"
  echo "Test Connection: connecting to Google..."
  res=$(curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null https://www.google.com)
  if [ "${res}" = "200" ]; then
    echo "Terminal proxy setup succeeded!"
  else
    echo "Terminal proxy setup failed!"
  fi
}

if [ "$1" = "set" ]; then
    set_proxy
elif [ "$1" = "unset" ]; then
    unset_proxy
elif [ "$1" = "test" ]; then
    test_connection
else
    echo "Unsupported arguments."
fi