Rocky Linux 9.6:配置 Clash 网络代理


目录结构

1
2
3
4
5
6
7
8
9
/opt/clash/
├── mihomo # Clash Meta 内核
├── Country.mmdb # 全球 IP 地理库
├── config.yaml # 运行配置(由脚本自动生成)
├── config.yaml.bak # 配置备份
├── sub_url.txt # 订阅地址(只需维护此文件)
├── update_config.sh # 订阅配置自动更新脚本
├── cache.db # Clash 缓存
└── ui/ # Web 控制面板(metacubexd)

1. 安装 mihomo 内核

1
2
3
4
mkdir -p /opt/clash && cd /opt/clash

# 将 mihomo.gz 上传至 /opt/clash 后执行
gunzip mihomo.gz && chmod +x mihomo

2. 下载全球 IP 库

maxmind-geoip 下载 Country.mmdb:

1
wget -O /opt/clash/Country.mmdb https://github.com/Dreamacro/maxmind-geoip/releases/latest/download/Country.mmdb

3. 安装 Web 控制面板

metacubexd 下载面板文件:

1
2
3
4
mkdir -p /opt/clash/ui && cd /opt/clash/ui

# 将 compressed-dist.tgz 上传后执行
tar -xzf compressed-dist.tgz && rm -rf compressed-dist.tgz

4. 配置订阅地址

将订阅地址写入 sub_url.txt后续地址变更只需修改此文件):

1
echo 'https://你的订阅地址' | sudo tee /opt/clash/sub_url.txt

5. 创建自动更新脚本

将以下内容写入 /opt/clash/update_config.sh

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash
# Clash 订阅配置自动更新脚本
# 用法: sudo bash /opt/clash/update_config.sh
# 订阅地址变了只需修改 /opt/clash/sub_url.txt

set -e

CLASH_DIR="/opt/clash"
SUB_URL_FILE="$CLASH_DIR/sub_url.txt"
CONFIG_FILE="$CLASH_DIR/config.yaml"
TMP_FILE="$CLASH_DIR/config_tmp.yaml"

# 读取订阅地址
if [ ! -f "$SUB_URL_FILE" ]; then
echo "[错误] 找不到订阅地址文件: $SUB_URL_FILE"
exit 1
fi
SUB_URL=$(head -1 "$SUB_URL_FILE" | tr -d '[:space:]')
if [ -z "$SUB_URL" ]; then
echo "[错误] 订阅地址为空"
exit 1
fi

echo "[1/4] 下载订阅配置..."
HTTP_CODE=$(curl -s -k -o "$TMP_FILE" -w "%{http_code}" \
--connect-timeout 15 --max-time 60 \
-H "User-Agent: clash.meta" \
"$SUB_URL")

if [ "$HTTP_CODE" != "200" ] || [ ! -s "$TMP_FILE" ]; then
echo "[错误] 下载失败 (HTTP $HTTP_CODE)"
rm -f "$TMP_FILE"
exit 1
fi

# 基本校验:检查是否包含 Clash 配置关键字
if ! grep -qE "^(proxies|proxy-groups|port):" "$TMP_FILE"; then
echo "[错误] 下载的文件不是有效的 Clash 配置"
rm -f "$TMP_FILE"
exit 1
fi

echo "[2/4] 注入本地控制参数..."
sed -i '/^external-controller:/d' "$TMP_FILE"
sed -i '/^external-ui:/d' "$TMP_FILE"
sed -i '/^secret:/d' "$TMP_FILE"
sed -i "1a\\
external-controller: 0.0.0.0:9090\\
external-ui: /opt/clash/ui\\
secret: \"\"" "$TMP_FILE"

echo "[3/4] 备份旧配置并替换..."
if [ -f "$CONFIG_FILE" ]; then
cp "$CONFIG_FILE" "${CONFIG_FILE}.bak"
fi
mv "$TMP_FILE" "$CONFIG_FILE"
chmod 666 "$CONFIG_FILE"

echo "[4/4] 重载 Clash..."
if systemctl is-active --quiet clash; then
systemctl restart clash
echo "[完成] Clash 已重启,配置更新成功!"
else
echo "[完成] 配置已更新。Clash 未运行,请手动启动: systemctl start clash"
fi

赋予执行权限:

1
sudo chmod +x /opt/clash/update_config.sh

6. 生成配置并启动

首次运行更新脚本,自动下载订阅配置并生成 config.yaml

1
sudo bash /opt/clash/update_config.sh

脚本会自动完成:

  1. sub_url.txt 读取订阅地址并下载配置
  2. 校验配置文件有效性
  3. 注入本地外部控制参数(external-controllerexternal-uisecret
  4. 备份旧配置为 config.yaml.bak
  5. 替换配置并重启 Clash

7. 配置 systemd 服务

创建 /etc/systemd/system/clash.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=Clash 守护进程, Go 语言实现的基于规则的代理.
After=network.target NetworkManager.service systemd-networkd.service iwd.service

[Service]
Type=simple
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME
Restart=always
ExecStartPre=/usr/bin/sleep 1s
ExecStart=/opt/clash/mihomo -d /opt/clash
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

加载并启用服务:

1
2
3
systemctl daemon-reload
systemctl enable clash # 开机自启
systemctl start clash # 启动

常用命令:

1
2
3
4
systemctl status clash    # 查看状态
systemctl stop clash # 停止
systemctl restart clash # 重启
journalctl -u clash --reverse # 查看日志

8. 配置系统代理

~/.bashrc 中添加:

1
2
3
4
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"
export no_proxy="localhost,127.0.0.1"

生效:

1
source ~/.bashrc

9. Web 控制面板

浏览器访问 http://服务器IP:9090/ui,可在面板中切换节点、查看流量等。

10. PC 客户端代理

在 PC 的 系统设置 → 网络 → 代理 中配置:

协议 地址 端口
HTTP 服务器IP 7890
HTTPS 服务器IP 7890
SOCKS 服务器IP 7891

日常维护

订阅地址变更

1
2
3
4
5
# 1. 更新订阅地址
echo '新的订阅地址' | sudo tee /opt/clash/sub_url.txt

# 2. 执行更新
sudo bash /opt/clash/update_config.sh

手动更新配置(订阅地址未变)

1
sudo bash /opt/clash/update_config.sh

回滚配置

1
2
sudo cp /opt/clash/config.yaml.bak /opt/clash/config.yaml
sudo systemctl restart clash