目录结构 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/clashgunzip 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/uitar -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 set -eCLASH_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 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
脚本会自动完成:
从 sub_url.txt 读取订阅地址并下载配置
校验配置文件有效性
注入本地外部控制参数(external-controller、external-ui、secret)
备份旧配置为 config.yaml.bak
替换配置并重启 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 =simpleLimitNPROC =500 LimitNOFILE =1000000 CapabilityBoundingSet =CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIMEAmbientCapabilities =CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIMERestart =alwaysExecStartPre =/usr/bin/sleep 1 sExecStart =/opt/clash/mihomo -d /opt/clashExecReload =/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"
生效:
9. Web 控制面板 浏览器访问 http://服务器IP:9090/ui,可在面板中切换节点、查看流量等。
10. PC 客户端代理 在 PC 的 系统设置 → 网络 → 代理 中配置:
协议
地址
端口
HTTP
服务器IP
7890
HTTPS
服务器IP
7890
SOCKS
服务器IP
7891
日常维护 订阅地址变更 1 2 3 4 5 echo '新的订阅地址' | sudo tee /opt/clash/sub_url.txtsudo 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.yamlsudo systemctl restart clash