Clash + 终端代理配置教程

一、背景

Clash 开启全局/规则代理后,浏览器和系统应用会自动走代理,但终端(Git Bash / CMD / PowerShell)不会

原因:终端程序(curl、npm、pip、git 等)不会读取系统代理设置,而是通过环境变量来决定是否使用代理。


二、环境变量解释

变量 作用 示例值
HTTP_PROXY HTTP 请求的代理地址 http://127.0.0.1:7890
HTTPS_PROXY HTTPS 请求的代理地址 http://127.0.0.1:7890
ALL_PROXY 所有协议的代理(SOCKS5) socks5://127.0.0.1:7890
NO_PROXY 不走代理的地址白名单 localhost,127.0.0.1

127.0.0.1:7890 是 Clash 默认的 HTTP 代理端口,这个地址指向的是你本机运行的 Clash,不是某个具体节点。你在 Clash 里切换节点,这个地址不变,所以换节点不需要改环境变量。


三、自动化脚本(推荐)

把以下代码写入 Git Bash 的 ~/.bashrc 文件:

  • 打开终端时:自动检测 Clash 是否在运行(端口 7890),在就设代理,不在就不设
  • 手动切换:随时用 proxy 命令控制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# --- Clash proxy auto-detect + toggle ---
CLASH_PORT=7890

proxy() {
case "${1:-toggle}" in
on)
export HTTP_PROXY="http://127.0.0.1:$CLASH_PORT"
export HTTPS_PROXY="http://127.0.0.1:$CLASH_PORT"
export ALL_PROXY="socks5://127.0.0.1:$CLASH_PORT"
export NO_PROXY="localhost,127.0.0.1,::1,.local"
echo "proxy: ON (127.0.0.1:$CLASH_PORT)"
;;
off)
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
echo "proxy: OFF"
;;
toggle)
if [ -n "$HTTP_PROXY" ]; then
proxy off
else
proxy on
fi
;;
*)
if [ -n "$HTTP_PROXY" ]; then
echo "proxy: ON (127.0.0.1:$CLASH_PORT)"
else
echo "proxy: OFF"
fi
echo "Usage: proxy [on|off|toggle]"
;;
esac
}

# Auto-enable proxy if Clash is listening when shell starts
if netstat -an 2>/dev/null | grep -q "127.0.0.1:$CLASH_PORT.*LISTENING"; then
proxy on
fi

使用方法

1
2
3
4
proxy on      # 开启代理
proxy off # 关闭代理
proxy # 无参数 = 切换 on/off
proxy status # 查看当前状态

日常操作流程

  1. 先开 Clash → 再开终端 → 自动挂代理 ✅
  2. 终端已开着 → 启动 Clash → 手动敲 proxy on
  3. 关掉 Clash → 手动敲 proxy off

四、手动设置方式(备用)

如果你用的是 CMD 或 PowerShell,需要手动设:

Git Bash / Linux

1
2
3
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890

CMD

1
2
set HTTP_PROXY=http://127.0.0.1:7890
set HTTPS_PROXY=http://127.0.0.1:7890

PowerShell

1
2
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"

五、验证代理是否生效

1
2
3
4
5
# 能返回 200 说明代理生效
curl -s -o /dev/null -w "%{http_code}" https://www.google.com

# 查看当前代理环境变量
echo $HTTP_PROXY

六、常见问题

Q: 代理显示 ON 但访问不了外网?

检查 Clash 是否在运行、节点是否可用、端口是否为 7890。

Q: 换了节点需要重新设置吗?

不需要。环境变量指向的是本机 Clash(127.0.0.1:7890),不是具体节点。

Q: 规则代理 vs 全局代理?

  • 规则代理:国内外流量按规则分流,国内直连、被墙的走代理
  • 全局代理:所有流量都走代理节点

无论哪种模式,终端代理的配置方法一样,区别只是 Clash 内部怎么转发。

Q: 某些命令不想走代理怎么办?

NO_PROXY 白名单已包含 localhost,127.0.0.1,本地服务不受影响。临时让某个命令不走代理:

1
2
3
unset HTTP_PROXY HTTPS_PROXY && your_command
# 或者
NO_PROXY=* your_command

七、Clash 常用端口

端口 用途
7890 HTTP/HTTPS 代理(mixed port)
7891 SOCKS5 代理
9090 Clash 控制面板(Web Dashboard)

不同 Clash 客户端(Clash for Windows、Clash Verge、mihomo 等)端口可能不同,以你实际使用的为准。