mirror of
https://github.com/wnlen/clash-for-linux.git
synced 2026-02-04 10:11:28 +08:00
413 lines
11 KiB
Markdown
413 lines
11 KiB
Markdown
[TOC]
|
||
|
||
# 项目介绍
|
||
|
||
**clash-for-linux** 是一个面向 Linux 服务器/桌面环境的 **Clash 自动化运行与管理脚本集**。
|
||
项目基于 **Clash Meta / Mihomo 内核**,通过脚本方式实现 **开箱即用、可维护、可回滚** 的代理部署体验,适合用于提升服务器访问 GitHub、Docker Hub 等海外资源的速度。
|
||
<br>
|
||
|
||
本项目主要解决以下问题:
|
||
|
||
- ❌ 官方 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**
|
||
<br>
|
||
|
||
# 使用教程
|
||
|
||
## 下载项目
|
||
|
||
下载项目
|
||
|
||
```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-<arch>`(如 `clash-linux-riscv64`)。
|
||
> 端口支持设置为 `auto`,脚本会自动检测冲突并随机分配可用端口。
|
||
|
||
<br>
|
||
|
||
## 启动程序
|
||
|
||
直接运行脚本文件`start.sh`
|
||
|
||
- 进入项目目录
|
||
|
||
```bash
|
||
cd clash-for-linux
|
||
```
|
||
|
||
- 运行启动脚本
|
||
|
||
```bash
|
||
sudo bash start.sh
|
||
|
||
正在检测订阅地址...
|
||
Clash订阅地址可访问! [ OK ]
|
||
|
||
正在下载Clash配置文件...
|
||
配置文件config.yaml下载成功! [ OK ]
|
||
|
||
正在启动Clash服务...
|
||
服务启动成功! [ OK ]
|
||
|
||
Clash Dashboard 访问地址:http://<ip>: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
|
||
```
|
||
|
||
<br>
|
||
|
||
## 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
|
||
```
|
||
|
||
<br>
|
||
|
||
## 一键安装/卸载
|
||
|
||
🚀 **一键安装(当前项目)**
|
||
|
||
当前项目支持一键安装,在终端中执行以下命令即可完成安装:
|
||
|
||
```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资源了。
|
||
|
||
<br>
|
||
|
||
## 重启程序
|
||
|
||
如果需要对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
|
||
```
|
||
|
||
<br>
|
||
|
||
## 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'
|
||
```
|
||
|
||
<br>
|
||
|
||
## 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'
|
||
```
|
||
|
||
<br>
|
||
|
||
## 停止程序
|
||
|
||
- 进入项目目录
|
||
|
||
```bash
|
||
cd clash-for-linux
|
||
```
|
||
|
||
- 关闭服务
|
||
|
||
```bash
|
||
sudo bash shutdown.sh
|
||
|
||
服务关闭成功,请执行以下命令关闭系统代理:proxy_off
|
||
|
||
```
|
||
|
||
```bash
|
||
proxy_off
|
||
```
|
||
|
||
然后检查程序端口、进程以及环境变量`http_proxy|https_proxy`,若都没则说明服务正常关闭。
|
||
|
||
<br>
|
||
|
||
## 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`,模板会自动读取该路径。
|
||
|
||
|
||
<br>
|
||
|
||
## subconverter 多架构支持
|
||
|
||
`subconverter` 用于将订阅内容转换为标准 clash 配置。默认会尝试以下位置:
|
||
|
||
- `tools/subconverter/subconverter`
|
||
- `tools/subconverter/subconverter-<arch>`
|
||
- `tools/subconverter/bin/subconverter-<arch>`
|
||
|
||
其中 `<arch>` 取值为:
|
||
|
||
- `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` 不可用时会自动跳过转换,并提示警告。
|
||
|
||
|
||
<br>
|
||
|
||
## Clash Dashboard
|
||
|
||
- 访问 Clash Dashboard
|
||
|
||
通过浏览器访问 `start.sh` 执行成功后输出的地址,例如:http://192.168.0.1:9090/ui
|
||
|
||
- 登录管理界面
|
||
|
||
在`API Base URL`一栏中输入:http://\<ip\>:9090 ,在`Secret(optional)`一栏中输入启动成功后输出的Secret。
|
||
|
||
点击Add并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置。
|
||
|
||
- 更多教程
|
||
|
||
此 Clash Dashboard 使用的是[yacd](https://github.com/haishanh/yacd)项目,详细使用方法请移步到yacd上查询。
|
||
|
||
|
||
<br>
|
||
|
||
## 设置代理
|
||
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)
|