[TOC] # 项目介绍 **clash-for-linux** 是一个面向 Linux 服务器/桌面环境的 **Clash 自动化运行与管理脚本集**。 项目基于 **Clash Meta / Mihomo 内核**,通过脚本方式实现 **开箱即用、可维护、可回滚** 的代理部署体验,适合用于提升服务器访问 GitHub、Docker Hub 等海外资源的速度。
本项目主要解决以下问题: - ❌ 官方 Clash 二进制下载、架构区分、配置部署繁琐 - ❌ 手动管理 Clash 进程、端口、环境变量不稳定 - ❌ systemd 服务、权限、安全配置缺乏统一方案 - ❌ 多订阅 / 配置混乱,升级和回滚成本高 ### 核心特性 - 🚀 **自动识别系统架构**(x86_64 / aarch64 / armv7),下载并使用对应 Clash 内核 - 🧩 **脚本化部署**,无需手动安装依赖,适合服务器与无桌面环境 - 🔧 **systemd 服务管理**,支持 start / stop / restart / enable - 🗂️ **清晰的目录结构**,配置、日志、二进制、mixin 分离,便于维护与回滚 - 🔐 **安全默认配置** - 管理面板默认仅绑定 `127.0.0.1` - 自动生成或自定义 Secret - 默认开启 TLS 校验 - 🧪 **端口自动检测与分配**,避免冲突 - 🔄 **多订阅管理(clashctl)**,支持订阅切换、更新、日志查看 - 🧠 **Mixin 机制**,可按需追加/覆盖 Clash 配置 - 🌐 **Tun 模式支持**(需 Clash Meta / Premium) ### 适用场景 - Linux 云服务器(VPS) - 家用 NAS / 小主机(x86 / ARM) - 需要稳定访问 GitHub、Go / Node / Docker 生态的开发环境 - 不希望长期手动维护 Clash 运行状态的用户 ### 项目定位说明 - ✅ 本项目 **不提供任何订阅内容**,仅负责运行与管理 - ✅ 本项目是 **Clash / yacd 的工程化封装**,并非 Clash 的替代品 - ❌ 不适合只想“点点 UI 就用”的纯桌面用户 - ❌ 不包含任何节点、机场或订阅推荐 ### 更新状态 📅 **持续维护中** 最近更新:**2026-01-13**
# 使用教程 ## 下载项目 下载项目 ```bash git clone https://github.com/wnlen/clash-for-linux.git ``` 进入到项目目录,编辑`.env`文件,修改变量`CLASH_URL`的值。 ```bash cd clash-for-linux vim .env ``` > **注意:** `.env` 文件中的变量 `CLASH_SECRET` 为自定义 Clash Secret,值为空时,脚本将自动生成随机字符串。 > 如需使用其它架构,请将对应 Clash 二进制放入 `bin/` 并在 `.env` 中设置 `CLASH_BIN`,或命名为 `clash-linux-`(如 `clash-linux-riscv64`)。 > 端口支持设置为 `auto`,脚本会自动检测冲突并随机分配可用端口。
## 启动程序 直接运行脚本文件`start.sh` - 进入项目目录 ```bash cd clash-for-linux ``` - 运行启动脚本 ```bash sudo bash start.sh 正在检测订阅地址... Clash订阅地址可访问! [ OK ] 正在下载Clash配置文件... 配置文件config.yaml下载成功! [ OK ] 正在启动Clash服务... 服务启动成功! [ OK ] Clash Dashboard 访问地址:http://:9090/ui Secret:xxxxxxxxxxxxx 请执行以下命令加载环境变量: source /etc/profile.d/clash-for-linux.sh 请执行以下命令开启系统代理: proxy_on 若要临时关闭系统代理,请执行: proxy_off ``` ```bash source /etc/profile.d/clash-for-linux.sh proxy_on ```
## clashctl 命令 统一管理入口,支持启动/停止/重启/状态/更新/修改订阅: ```bash sudo ./clashctl status sudo ./clashctl start sudo ./clashctl restart sudo ./clashctl update sudo ./clashctl set-url "https://example.com/your-subscribe" ``` 订阅管理(多订阅): ```bash sudo ./clashctl sub add office "https://example.com/office" "User-Agent: ClashforWindows/0.20.39" sudo ./clashctl sub add personal "https://example.com/personal" sudo ./clashctl sub list sudo ./clashctl sub use personal sudo ./clashctl sub update sudo ./clashctl sub log ``` 安装脚本会将 `clashctl` 安装到 `/usr/local/bin/clashctl`,安装后可直接使用: ```bash sudo clashctl status ```
## 一键安装/卸载 🚀 **一键安装(当前项目)** 当前项目支持一键安装,在终端中执行以下命令即可完成安装: ```bash git clone --branch master --depth 1 https://github.com/wnlen/clash-for-linux.git && cd clash-for-linux && bash install.sh ``` 脚本会自动识别安装路径、创建低权限用户、检测端口冲突,并根据架构自动下载 Clash 内核(可通过 `CLASH_DOWNLOAD_URL_TEMPLATE` 自定义下载地址)。 ```bash sudo bash install.sh ``` 如需调整安装路径或服务行为,可使用以下环境变量: - `CLASH_INSTALL_DIR`:默认 `/opt/clash-for-linux` - `CLASH_SERVICE_USER` / `CLASH_SERVICE_GROUP`:systemd 运行用户/组 - `CLASH_ENABLE_SERVICE`:是否 `systemctl enable`(默认 `true`) - `CLASH_START_SERVICE`:是否 `systemctl start`(默认 `true`) - `CLASH_AUTO_DOWNLOAD`:是否自动下载 Clash 内核(默认 `auto`) - `CLASH_DOWNLOAD_URL_TEMPLATE`:自定义下载模板(默认 `https://github.com/Dreamacro/clash/releases/latest/download/clash-{arch}.gz`) 卸载: ```bash sudo bash uninstall.sh ``` - 检查服务端口 ```bash netstat -tln | grep -E '9090|789.' tcp 0 0 127.0.0.1:9090 0.0.0.0:* LISTEN tcp6 0 0 :::7890 :::* LISTEN tcp6 0 0 :::7891 :::* LISTEN tcp6 0 0 :::7892 :::* LISTEN ``` - 检查环境变量 ```bash env | grep -E 'http_proxy|https_proxy' http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 ``` 以上步鄹如果正常,说明服务clash程序启动成功,现在就可以体验高速下载github资源了。
## 重启程序 如果需要对Clash配置进行修改,请修改 `conf/config.yaml` 文件。然后运行 `restart.sh` 脚本进行重启。 > **注意:** > 重启脚本 `restart.sh` 不会更新订阅信息。 如需更新订阅并重启,可执行: ```bash sudo bash restart.sh --update ``` ## 更新订阅 如只需更新订阅配置但不重启服务,可执行: ```bash sudo bash update.sh ``` 如需通过订阅管理更新,可执行: ```bash sudo clashctl sub update personal ```
## Mixin 配置 可通过 mixin 追加或覆盖 Clash 配置。默认读取 `conf/mixin.d` 下的 `.yaml/.yml` 文件(按文件名排序)。也可以通过 `.env` 设置指定路径: ```bash export CLASH_MIXIN_PATHS='conf/mixin.d/base.yaml,conf/mixin.d/rules.yaml' export CLASH_MIXIN_DIR='conf/mixin.d' ```
## Tun 模式 Tun 模式需要 Clash Premium/Meta 支持。可在 `.env` 中启用并配置: ```bash export CLASH_TUN_ENABLE=true export CLASH_TUN_STACK=system export CLASH_TUN_AUTO_ROUTE=true export CLASH_TUN_AUTO_REDIRECT=false export CLASH_TUN_STRICT_ROUTE=false export CLASH_TUN_DNS_HIJACK='any:53' ```
## 停止程序 - 进入项目目录 ```bash cd clash-for-linux ``` - 关闭服务 ```bash sudo bash shutdown.sh 服务关闭成功,请执行以下命令关闭系统代理:proxy_off ``` ```bash proxy_off ``` 然后检查程序端口、进程以及环境变量`http_proxy|https_proxy`,若都没则说明服务正常关闭。
## systemd 服务 推荐使用自动安装脚本生成 systemd 单元(自动识别安装路径、创建低权限用户并修正目录权限): ```bash sudo bash scripts/install_systemd.sh ``` 启用并启动服务: ```bash sudo systemctl daemon-reload sudo systemctl enable --now clash-for-linux.service ``` 停止服务: ```bash sudo systemctl stop clash-for-linux.service ``` > 如需自定义运行用户,可在执行脚本前设置 `CLASH_SERVICE_USER`(可选 `CLASH_SERVICE_GROUP`)。 > 默认使用 `clash` 用户运行服务,systemd 环境文件输出到 `temp/clash-for-linux.sh`。 如果需要手动安装,可参考 `systemd/clash-for-linux.service` 模板,并在 `/etc/default/clash-for-linux` 中设置 `CLASH_HOME`: ```bash sudo cp systemd/clash-for-linux.env /etc/default/clash-for-linux sudo vim /etc/default/clash-for-linux ``` 也可以创建 `/etc/default/clash-for-linux` 并设置 `CLASH_HOME`,模板会自动读取该路径。
## subconverter 多架构支持 `subconverter` 用于将订阅内容转换为标准 clash 配置。默认会尝试以下位置: - `tools/subconverter/subconverter` - `tools/subconverter/subconverter-` - `tools/subconverter/bin/subconverter-` 其中 `` 取值为: - `linux-amd64` - `linux-arm64` - `linux-armv7` 自动下载默认使用 `https://github.com/tindy2013/subconverter/releases/latest/download/subconverter_{arch}.tar.gz`, 如果需要自定义来源或关闭下载,可以设置: - `SUBCONVERTER_PATH`:指定自定义 `subconverter` 可执行文件路径。 - `SUBCONVERTER_AUTO_DOWNLOAD=false`:关闭自动下载(默认会尝试自动下载,需 `curl`/`wget`)。 - `SUBCONVERTER_DOWNLOAD_URL_TEMPLATE`:下载模板,使用 `{arch}` 占位符,如: ```bash export SUBCONVERTER_AUTO_DOWNLOAD=true export SUBCONVERTER_DOWNLOAD_URL_TEMPLATE='https://example.com/subconverter_{arch}.tar.gz' ``` 当 `subconverter` 不可用时会自动跳过转换,并提示警告。
## Clash Dashboard - 访问 Clash Dashboard 通过浏览器访问 `start.sh` 执行成功后输出的地址,例如:http://192.168.0.1:9090/ui - 登录管理界面 在`API Base URL`一栏中输入:http://\:9090 ,在`Secret(optional)`一栏中输入启动成功后输出的Secret。 点击Add并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置。 - 更多教程 此 Clash Dashboard 使用的是[yacd](https://github.com/haishanh/yacd)项目,详细使用方法请移步到yacd上查询。
## 设置代理 1. 开启 IP 转发 ```bash echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p ``` 2.配置iptables ```bash # 先清空旧规则 sudo iptables -t nat -F # 允许本机访问代理端口 sudo iptables -t nat -A OUTPUT -p tcp --dport 7890 -j RETURN sudo iptables -t nat -A OUTPUT -p tcp --dport 7891 -j RETURN sudo iptables -t nat -A OUTPUT -p tcp --dport 7892 -j RETURN # 让所有 TCP 流量通过 7892 代理 sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 7892 # 保存规则 sudo iptables-save | sudo tee /etc/iptables.rules ``` 3. 让 iptables 规则开机生效 在 `/etc/rc.local`(或 `/etc/rc.d/rc.local`)加上: ```bash #!/bin/bash iptables-restore < /etc/iptables.rules exit 0 ``` ```bash sudo chmod +x /etc/rc.local ``` # 常见问题 1. 部分Linux系统默认的 shell `/bin/sh` 被更改为 `dash`,运行脚本会出现报错(报错内容一般会有 `-en [ OK ]`)。建议使用 `bash xxx.sh` 运行脚本。 2. 部分用户在UI界面找不到代理节点,基本上是因为厂商提供的clash配置文件是经过base64编码的,且配置文件格式不符合clash配置标准。 目前此项目已集成自动识别和转换clash配置文件的功能。如果依然无法使用,则需要通过自建或者第三方平台(不推荐,有泄露风险)对订阅地址转换。 3. 程序日志中出现`error: unsupported rule type RULE-SET`报错,解决方法查看官方[WIKI](https://github.com/Dreamacro/clash/wiki/FAQ#error-unsupported-rule-type-rule-set)