Clash (Linux):从入门到精通的代理配置指南
Clash (Linux):从入门到精通的代理配置指南
Clash 是一款流行的跨平台代理客户端,支持多种代理协议(如 Shadowsocks、Vmess、Trojan、Snell 等),并具有强大的规则分流功能。本文将深入探讨 Clash 在 Linux 系统上的安装、配置、使用和进阶技巧,帮助你从新手成长为 Clash 专家。
一、Clash 简介与优势
Clash 的核心优势在于其灵活的配置和强大的规则引擎。它允许用户根据不同的网络需求,将流量导向不同的代理服务器,甚至实现自动切换、负载均衡等高级功能。
主要特点:
- 多协议支持: 兼容 Shadowsocks、Vmess、Trojan、Snell、Socks5、HTTP(S) 等多种代理协议。
- 规则分流: 基于域名、IP、GEOIP、进程名等多种条件,将流量导向不同的代理服务器或直连。
- YAML 配置: 使用 YAML 格式的配置文件,易于阅读和编辑。
- 负载均衡: 支持多种负载均衡策略,如 URL 测试、延迟测试、自动选择等。
- 故障转移: 当某个代理服务器不可用时,自动切换到备用服务器。
- 规则提供者: 支持从远程 URL 或本地文件加载规则,方便规则更新和共享。
- RESTful API: 提供 RESTful API,方便与其他程序集成,实现自动化控制。
- 跨平台: 支持 Windows、macOS、Linux、Android 等多个平台。
二、Linux 环境准备
在开始安装 Clash 之前,请确保你的 Linux 系统满足以下条件:
- 已安装
curl
或wget
: 用于下载 Clash 软件包。 - 具备
sudo
权限: 安装和配置 Clash 需要管理员权限。 - 网络连接正常: 用于下载 Clash 和订阅链接。
三、Clash 安装
Clash 提供多种安装方式,你可以根据自己的喜好选择:
1. 手动安装(推荐)
这是最灵活的安装方式,可以让你更好地控制 Clash 的版本和安装位置。
-
下载 Clash:
访问 Clash 的 GitHub Releases 页面:https://github.com/Dreamacro/clash/releases
找到适合你系统架构的最新版本(通常是
clash-linux-amd64-vX.X.X.gz
或clash-linux-arm64-vX.X.X.gz
),复制下载链接。在终端中,使用
curl
或wget
下载:```bash
使用 curl
curl -L -O <下载链接>
或者使用 wget
wget <下载链接>
``` -
解压并移动:
```bash
解压
gunzip clash-linux-*.gz
移动到 /usr/local/bin/ (或其他你喜欢的目录)
sudo mv clash-linux-* /usr/local/bin/clash
赋予执行权限
sudo chmod +x /usr/local/bin/clash
``` -
验证安装:
bash
clash -v如果看到 Clash 的版本信息,则表示安装成功。
2. 使用脚本安装
Clash 社区提供了方便的安装脚本:
bash
curl -sL https://git.io/getClash | bash
或者
wget -O - -q https://git.io/getClash | bash
此脚本会自动下载、解压、移动 Clash 并设置执行权限。
3. 通过包管理器安装 (不推荐)
某些 Linux 发行版的软件仓库中可能包含 Clash,但不建议通过包管理器安装,因为版本可能滞后,或者配置不灵活.
四、Clash 配置
Clash 的配置文件使用 YAML 格式,通常命名为 config.yaml
。
1. 配置文件结构
一个典型的 config.yaml
文件包含以下几个主要部分:
```yaml
监听端口
port: 7890 # HTTP 代理端口
socks-port: 7891 # SOCKS5 代理端口
mixed-port: 7890
redir-port: 7892 # Linux 和 macOS 的 TPROXY 端口 (可选)
允许局域网连接 (可选)
allow-lan: true
规则模式:Rule, Global, Direct
mode: Rule
日志级别:silent, error, warning, info, debug
log-level: info
IPv6 支持 (可选)
ipv6: false
外部控制器 (RESTful API)
external-controller: 127.0.0.1:9090
外部 UI (可选,用于图形化管理 Clash)
external-ui: /path/to/clash-dashboard
DNS 设置 (可选,用于增强 DNS 解析,防止 DNS 污染)
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
enhanced-mode: fake-ip # 或 redir-host
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
- 8.8.8.8
fallback:
- https://dns.google/dns-query
fallback-filter:
geoip: true
ipcidr:
- 240.0.0.0/4
代理服务器
proxies:
- name: "Proxy A"
type: ss
server: server_a_address
port: 443
cipher: chacha20-ietf-poly1305
password: "password_a"
# udp: true # 是否支持 UDP 转发 (可选)
- name: "Proxy B"
type: vmess
server: server_b_address
port: 443
uuid: "uuid_b"
alterId: 64
cipher: auto
# tls: true # 是否启用 TLS (可选)
# network: ws # 网络传输协议,如 ws (WebSocket) (可选)
# ws-path: /path # WebSocket 路径 (可选)
代理组 (可选,用于负载均衡、故障转移等)
proxy-groups:
- name: "Proxy Group"
type: select # 或 url-test, fallback, load-balance
proxies:
- "Proxy A"
- "Proxy B"
# url: "http://www.gstatic.com/generate_204" # 用于 url-test (可选)
# interval: 300 # 测试间隔 (可选)
规则
rules:
- DOMAIN-SUFFIX,google.com,Proxy Group
- DOMAIN-KEYWORD,github,Proxy Group
- GEOIP,CN,DIRECT
- MATCH,Proxy Group
```
关键配置项说明:
port
、socks-port
:HTTP 和 SOCKS5 代理的监听端口。mixed-port
: 混合代理端口,同时支持http与socks5.allow-lan
: 是否允许来自局域网的连接。mode
:运行模式。Global
:所有流量都走代理。Rule
:根据规则分流。Direct
:所有流量直连。
log-level
:日志级别。external-controller
:Clash 的 RESTful API 地址。dns
:DNS 设置,用于防止 DNS 污染。proxies
:定义代理服务器,支持多种协议。proxy-groups
:定义代理组,用于负载均衡、故障转移等。rules
:定义规则,决定流量走向。
2. 订阅链接
如果你使用机场提供的订阅链接,可以简化配置。只需将订阅链接中的内容(通常是 Base64 编码的)解码,然后将解码后的 YAML 内容复制到 config.yaml
的 proxies
部分即可。
你也可以直接在配置文件中这样填写:
```yaml
proxy-providers:
My-Provider: #provider名称, 自定义
type: http
url: "订阅链接" # 机场订阅链接
path: ./proxy.yaml # 下载的配置保存位置
interval: 3600 #自动更新间隔(秒)
health-check: #健康检查配置, 可省略
enable: true
interval: 600
url: http://www.gstatic.com/generate_204
proxies: #这里不用再手动写了
- name: "Fallback"
type: fallback
proxies:
-
interval: 300
rules:
- DOMAIN-SUFFIX,google.com,Fallback
- DOMAIN-KEYWORD,github,Fallback
- GEOIP,CN,DIRECT
- MATCH,Fallback
```
Clash 会自动下载并解析订阅链接, 并存入proxy.yaml
,然后加载.
3. 规则配置
Clash 的规则引擎非常强大,支持多种匹配方式:
- DOMAIN-SUFFIX: 域名后缀匹配。
- DOMAIN-KEYWORD: 域名关键词匹配。
- DOMAIN: 完整域名匹配。
- IP-CIDR: IP 地址段匹配。
- GEOIP: 基于 GeoIP 数据库的国家/地区匹配。
- SRC-IP-CIDR: 根据来源IP匹配
- PROCESS-NAME: 根据发起请求的进程名匹配
- MATCH: 兜底规则,匹配所有未被其他规则匹配的流量。
示例:
yaml
rules:
- DOMAIN-SUFFIX,google.com,Proxy Group # 所有 google.com 的子域名走代理
- DOMAIN-KEYWORD,github,Proxy Group # 包含 github 关键词的域名走代理
- GEOIP,CN,DIRECT # 中国大陆的 IP 直连
- MATCH,Proxy Group # 其他所有流量走代理
4. DNS 配置 (可选)
为了防止 DNS 污染,建议配置 Clash 的 DNS。
enable
:启用 DNS。listen
:DNS 监听地址。enhanced-mode
:redir-host
:传统的 DNS 代理模式。fake-ip
:使用虚假 IP,可以避免 DNS 污染,并提高 DNS 解析速度。
nameserver
:上游 DNS 服务器。fallback
: 回退DNS服务器,在nameserver
全部无效时启用.fallback-filter
: 回退过滤器,防止被污染的DNS生效.
五、Clash 启动与管理
1. 启动 Clash
在终端中,使用以下命令启动 Clash:
bash
clash -d /path/to/config/directory
其中/path/to/config/directory
需要换成你的配置文件所在的目录。
如果你把config.yaml
放在~/.config/clash/
目录下,可以直接运行:
bash
clash
2. 设置开机自启
为了方便使用,你可以将 Clash 设置为开机自启。
使用 systemd(推荐):
-
创建一个 systemd 服务文件:
bash
sudo nano /etc/systemd/system/clash.service -
将以下内容复制到文件中:
```ini
[Unit]
Description=Clash Service
After=network.target[Service]
Type=simple
User=your_username # 替换为你的用户名
ExecStart=/usr/local/bin/clash -d /path/to/config/directory # 替换为你的配置目录
Restart=on-failure[Install]
WantedBy=multi-user.target
``` -
启用并启动服务:
bash
sudo systemctl enable clash
sudo systemctl start clash -
检查服务状态:
sudo systemctl status clash
使用 crontab(不推荐):
bash
crontab -e
添加以下行:
@reboot /usr/local/bin/clash -d /path/to/config/directory > /dev/null 2>&1
3. 停止 Clash
```bash
如果使用 systemd
sudo systemctl stop clash
或者直接查找 Clash 进程并杀死
killall clash
```
4. 更新 Clash
- 手动更新: 按照手动安装的步骤,下载新版本的 Clash,替换旧版本即可。
- 使用脚本更新: 再次运行安装脚本即可。
- 更新订阅:
- 手动更新: 在Clash 命令行中执行
curl -X PUT -H "Content-Type: application/json" -d '{"path": "<配置文件路径>", "payload": "<订阅链接>"}' http://127.0.0.1:9090/providers/proxies/<provider名称>
- 自动更新: 上文配置中的
interval
参数控制.
- 手动更新: 在Clash 命令行中执行
5. 日志查看
Clash 的日志默认输出到标准错误输出。你可以通过以下方式查看日志:
- systemd 管理的:
sudo journalctl -u clash
- 查找clash进程,然后
tail -f /proc/<进程ID>/fd/2
六、Clash 进阶技巧
1. 使用外部 UI
Clash 提供 RESTful API,可以使用外部 UI 进行图形化管理。常用的 UI 有:
- Yacd: https://github.com/haishanh/yacd
- Clash Dashboard: https://github.com/Dreamacro/clash-dashboard
安装并配置好 UI 后,可以在浏览器中访问 http://127.0.0.1:9090
(或其他配置的地址)来管理 Clash。
2. 使用自定义规则
你可以创建自定义规则文件,并在 config.yaml
中引用:
```yaml
rule-providers:
my-rules:
type: file
path: /path/to/my-rules.yaml
behavior: domain # 或 classic
rules:
- RULE-SET,my-rules,Proxy Group
- MATCH,Proxy Group
```
my-rules.yaml
文件内容示例:
yaml
payload:
- DOMAIN-SUFFIX,example.com
- DOMAIN-KEYWORD,example
3. 使用脚本控制 Clash
你可以使用 curl
或其他工具,通过 RESTful API 来控制 Clash。
示例:
-
切换代理:
bash
curl -X PUT -H "Content-Type: application/json" -d '{"proxy": "Proxy A"}' http://127.0.0.1:9090/proxies/Proxy%20Group -
切换模式:
bash
curl -X PATCH -H "Content-Type: application/json" -d '{"mode": "Rule"}' http://127.0.0.1:9090/configs
* 重新加载配置:
bash
curl -X POST http://127.0.0.1:9090/configs/reload4. 使用 TPROXY 模式 (透明代理)
TPROXY 模式可以将所有流量(包括 TCP 和 UDP)都转发到 Clash,实现透明代理。这需要内核支持 TPROXY,并且需要配置 iptables。
配置步骤(仅供参考,具体配置可能因系统而异):
-
启用 TPROXY:
```
在 config.yaml 中设置 redir-port
redir-port: 7892
``` -
配置 iptables:
```
# 创建自定义链
iptables -t mangle -N CLASH将来自特定用户组的流量转发到 CLASH 链
iptables -t mangle -A OUTPUT -m owner --uid-owner your_username -j CLASH # 替换为你的用户名
将所有流量转发到 Clash 的 redir-port
iptables -t mangle -A CLASH -j RETURN -m mark --mark 0xff # 避免循环
iptables -t mangle -A CLASH -p tcp -j TPROXY --on-port 7892 --tproxy-mark 0x01/0x01
iptables -t mangle -A CLASH -p udp -j TPROXY --on-port 7892 --tproxy-mark 0x01/0x01
3. 配置路由表
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
```
注意: TPROXY 配置较为复杂,需要一定的网络知识。如果配置不当,可能会导致网络故障。
5.策略组进阶
Clash 支持多种类型的策略组, 善用他们可以灵活地控制你的网络流量.
- select: 手动选择使用哪个代理.
- url-test: 自动选择延迟最低的代理服务器.
- fallback: 按顺序尝试代理, 直到找到可用的.
- load-balance: 负载均衡, 可以选择
consistent-hashing
(一致性哈希) 或round-robin
(轮询)
七、常见问题解答
-
Clash 无法启动?
- 检查配置文件语法是否正确。
- 检查端口是否被占用。
- 检查日志输出,查找错误信息。
-
Clash 无法连接代理?
- 检查代理服务器配置是否正确。
- 检查网络连接是否正常。
- 尝试更换代理服务器。
-
Clash 规则不生效?
- 检查规则语法是否正确。
- 检查规则顺序是否合理。
- 尝试使用
clash -t -f config.yaml
命令测试配置文件。
-
如何更新订阅?
- 手动更新:在 Clash 命令行或 UI 中更新。
- 自动更新:设置
proxy-providers
的interval
参数。
-
Clash 占用 CPU 或内存过高?
- 检查是否有大量规则或复杂的 DNS 设置。
- 尝试减少规则数量或简化 DNS 设置。
- 尝试更换性能更好的代理协议。
八、总结
Clash 是一款功能强大的代理客户端,通过本文的详细介绍,相信你已经掌握了 Clash 的基本使用和配置方法。掌握 Clash,你可以更好地控制你的网络流量,实现更自由、更安全的上网体验。记住,实践是最好的老师,多尝试不同的配置,你会发现 Clash 的更多可能性。