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 系统满足以下条件:

  • 已安装 curlwget 用于下载 Clash 软件包。
  • 具备 sudo 权限: 安装和配置 Clash 需要管理员权限。
  • 网络连接正常: 用于下载 Clash 和订阅链接。

三、Clash 安装

Clash 提供多种安装方式,你可以根据自己的喜好选择:

1. 手动安装(推荐)

这是最灵活的安装方式,可以让你更好地控制 Clash 的版本和安装位置。

  1. 下载 Clash:

    访问 Clash 的 GitHub Releases 页面:https://github.com/Dreamacro/clash/releases

    找到适合你系统架构的最新版本(通常是 clash-linux-amd64-vX.X.X.gzclash-linux-arm64-vX.X.X.gz),复制下载链接。

    在终端中,使用 curlwget 下载:

    ```bash

    使用 curl

    curl -L -O <下载链接>

    或者使用 wget

    wget <下载链接>
    ```

  2. 解压并移动:

    ```bash

    解压

    gunzip clash-linux-*.gz

    移动到 /usr/local/bin/ (或其他你喜欢的目录)

    sudo mv clash-linux-* /usr/local/bin/clash

    赋予执行权限

    sudo chmod +x /usr/local/bin/clash
    ```

  3. 验证安装:

    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
```

关键配置项说明:

  • portsocks-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.yamlproxies 部分即可。

你也可以直接在配置文件中这样填写:
```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:
- url: 'http://www.gstatic.com/generate_204'
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(推荐):

  1. 创建一个 systemd 服务文件:

    bash
    sudo nano /etc/systemd/system/clash.service

  2. 将以下内容复制到文件中:

    ```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
    ```

  3. 启用并启动服务:

    bash
    sudo systemctl enable clash
    sudo systemctl start clash

  4. 检查服务状态:
    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

  1. 手动更新: 按照手动安装的步骤,下载新版本的 Clash,替换旧版本即可。
  2. 使用脚本更新: 再次运行安装脚本即可。
  3. 更新订阅:
    • 手动更新: 在Clash 命令行中执行curl -X PUT -H "Content-Type: application/json" -d '{"path": "<配置文件路径>", "payload": "<订阅链接>"}' http://127.0.0.1:9090/providers/proxies/<provider名称>
    • 自动更新: 上文配置中的interval参数控制.

5. 日志查看

Clash 的日志默认输出到标准错误输出。你可以通过以下方式查看日志:

  • systemd 管理的:sudo journalctl -u clash
  • 查找clash进程,然后tail -f /proc/<进程ID>/fd/2

六、Clash 进阶技巧

1. 使用外部 UI

Clash 提供 RESTful API,可以使用外部 UI 进行图形化管理。常用的 UI 有:

安装并配置好 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/reload

    4. 使用 TPROXY 模式 (透明代理)

TPROXY 模式可以将所有流量(包括 TCP 和 UDP)都转发到 Clash,实现透明代理。这需要内核支持 TPROXY,并且需要配置 iptables。

配置步骤(仅供参考,具体配置可能因系统而异):

  1. 启用 TPROXY:

    ```

    在 config.yaml 中设置 redir-port

    redir-port: 7892
    ```

  2. 配置 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(轮询)

七、常见问题解答

  1. Clash 无法启动?

    • 检查配置文件语法是否正确。
    • 检查端口是否被占用。
    • 检查日志输出,查找错误信息。
  2. Clash 无法连接代理?

    • 检查代理服务器配置是否正确。
    • 检查网络连接是否正常。
    • 尝试更换代理服务器。
  3. Clash 规则不生效?

    • 检查规则语法是否正确。
    • 检查规则顺序是否合理。
    • 尝试使用 clash -t -f config.yaml 命令测试配置文件。
  4. 如何更新订阅?

    • 手动更新:在 Clash 命令行或 UI 中更新。
    • 自动更新:设置 proxy-providersinterval 参数。
  5. Clash 占用 CPU 或内存过高?

    • 检查是否有大量规则或复杂的 DNS 设置。
    • 尝试减少规则数量或简化 DNS 设置。
    • 尝试更换性能更好的代理协议。

八、总结

Clash 是一款功能强大的代理客户端,通过本文的详细介绍,相信你已经掌握了 Clash 的基本使用和配置方法。掌握 Clash,你可以更好地控制你的网络流量,实现更自由、更安全的上网体验。记住,实践是最好的老师,多尝试不同的配置,你会发现 Clash 的更多可能性。

THE END