Clash 高级配置与规则编写完全指南

Clash 高级配置入门

Clash 的高级配置 允许您完全控制代理行为,实现精细化的流量路由、负载均衡和故障转移。通过深入理解 Clash 的配置语法和功能,您可以打造一个高度个性化、稳定高效的代理网络环境。

高级配置的核心价值

掌握 Clash 高级配置可以带来以下优势:

  • 精细化的流量控制:根据域名、IP、地理位置等条件精确路由流量
  • 智能代理策略:实现自动节点选择、负载均衡和故障转移
  • 性能优化:通过合理配置提升代理速度和稳定性
  • 安全性增强:自定义规则屏蔽广告、恶意网站和不安全连接
  • 自动化管理:通过规则集自动更新和脚本功能实现自动化配置
  • 多场景适配:为不同网络环境和使用场景定制配置方案

本教程将从基础配置语法讲起,逐步深入高级功能,帮助您全面掌握 Clash 配置的艺术。无论您是 Clash 的初学者还是有经验的用户,都能从中获得有价值的知识。

学习前提

在学习本教程前,建议您已经掌握:

  • Clash 的基本安装和使用方法
  • YAML 配置文件的基本语法
  • 代理服务器的基本概念(节点、订阅等)
  • 基础网络知识(IP、域名、端口等)

YAML 配置语法详解

Clash 使用 YAML (YAML Ain't Markup Language) 格式的配置文件。YAML 是一种人类可读的数据序列化语言,非常适合配置文件使用。

YAML 基础语法

YAML 配置文件由键值对组成,使用缩进表示层次结构:

YAML
# 这是注释
key: value  # 简单的键值对

# 列表(数组)
list:
  - item1
  - item2
  - item3

# 嵌套结构
parent:
  child:
    key: value
    list:
      - item1
      - item2

# 多行字符串
multiline: |
  这是多行字符串
  第二行
  第三行

# 单行多值
singleline: "这是一行文本"

YAML 语法注意事项

  • 缩进必须使用空格,不能使用制表符(Tab)
  • 缩进空格数不重要,但同一层次的元素必须使用相同数量的空格
  • 键值对使用冒号加空格分隔(key: value
  • 列表项使用短横线加空格开头(- item
  • 字符串通常不需要引号,除非包含特殊字符
  • 注释以井号(#)开头

Clash 配置文件结构

一个完整的 Clash 配置文件通常包含以下几个主要部分:

YAML
# Clash 配置文件基本结构
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: false
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090

# 代理服务器配置
proxies:
  - name: "代理节点1"
    type: ss
    server: server1.example.com
    port: 443
    cipher: aes-256-gcm
    password: "password"

# 代理组(策略组)
proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "代理节点1"
      - "代理节点2"
    url: "http://www.gstatic.com/generate_204"
    interval: 300

# 规则
rules:
  - DOMAIN-SUFFIX,google.com,自动选择
  - DOMAIN-SUFFIX,github.com,自动选择
  - MATCH,直接连接
proxies

代理服务器列表,定义所有可用的代理节点

- name: "节点1"
type: ss
server: example.com
proxy-groups

代理组(策略组),定义代理选择策略

- name: "自动选择"
type: url-test
proxies: [...]
rules

规则列表,定义流量路由规则

- DOMAIN-SUFFIX,google.com,代理组
其他配置

端口、日志级别、模式等全局配置

port: 7890
mode: Rule
log-level: info

规则系统详解

Clash 的规则系统是其最强大的功能之一,允许您根据多种条件精确控制流量走向。规则按顺序匹配,直到找到匹配项。

规则类型与语法

Clash 支持多种规则类型,每种类型有不同的匹配条件:

DOMAIN 规则

基于完整域名的匹配,精确匹配整个域名。

DOMAIN,example.com,代理组

DOMAIN-SUFFIX 规则

基于域名后缀的匹配,匹配域名的结尾部分。

DOMAIN-SUFFIX,google.com,代理组

DOMAIN-KEYWORD 规则

基于域名关键词的匹配,匹配包含关键词的域名。

DOMAIN-KEYWORD,google,代理组

GEOIP 规则

基于IP地理位置的匹配,匹配特定国家/地区的IP。

GEOIP,CN,直接连接

IP-CIDR 规则

基于IP地址段的匹配,使用CIDR表示法。

IP-CIDR,192.168.0.0/16,直接连接

PROCESS-NAME 规则

基于进程名称的匹配(仅限某些平台)。

PROCESS-NAME,chrome.exe,代理组

USER-AGENT 规则

基于User-Agent字符串的匹配。

USER-AGENT,*Twitter*,代理组

MATCH 规则

默认规则,匹配所有未匹配的流量。

MATCH,代理组

规则匹配顺序

规则按配置文件中出现的顺序进行匹配。当流量匹配到第一条规则时,就会使用该规则指定的策略,不再继续匹配后续规则。

YAML - 规则顺序示例
rules:
  # 1. 广告屏蔽规则(优先级最高)
  - DOMAIN-KEYWORD,ads,REJECT
  - DOMAIN-SUFFIX,doubleclick.net,REJECT
  
  # 2. 直连规则(本地网络和国内网站)
  - DOMAIN-SUFFIX,local,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - GEOIP,CN,DIRECT
  
  # 3. 代理规则(需要代理的网站)
  - DOMAIN-SUFFIX,google.com,代理组
  - DOMAIN-SUFFIX,youtube.com,代理组
  - DOMAIN-SUFFIX,twitter.com,代理组
  - DOMAIN-SUFFIX,facebook.com,代理组
  
  # 4. 最终规则(处理剩余流量)
  - MATCH,代理组

合理的规则顺序可以显著提高匹配效率和网络性能。通常建议将最具体的规则放在前面,最通用的规则放在最后。

代理组(策略组)高级配置

代理组(Proxy Groups)是 Clash 的核心功能之一,允许您创建复杂的代理选择策略,如负载均衡、故障转移和自动选择。

代理组类型

url-test

延迟测试型代理组,自动选择延迟最低的节点。

优点

  • 自动选择最快节点
  • 定期测试保持最优
  • 配置简单直观

缺点

  • 可能频繁切换节点
  • 测试可能增加延迟

load-balance

负载均衡型代理组,在多个节点间分配流量。

优点

  • 充分利用多个节点
  • 提高整体吞吐量
  • 避免单点过载

缺点

  • 可能影响有状态连接
  • 配置相对复杂

fallback

故障转移型代理组,按顺序尝试节点直到找到可用的。

优点

  • 高可用性保障
  • 节点故障自动切换
  • 稳定性强

缺点

  • 可能使用非最优节点
  • 切换可能有延迟

select

手动选择型代理组,允许用户手动选择节点。

优点

  • 用户完全控制
  • 无需测试延迟
  • 配置最简单

缺点

  • 需要手动管理
  • 无法自动优化

relay

链式代理组,流量依次通过多个节点。

优点

  • 增强匿名性
  • 绕过复杂封锁
  • 灵活性高

缺点

  • 显著增加延迟
  • 配置复杂

自定义策略

结合多种策略,创建复杂代理逻辑。

优点

  • 高度可定制
  • 适应复杂场景
  • 功能强大

缺点

  • 配置非常复杂
  • 需要深入理解

代理组配置示例

url-test 代理组配置

自动选择延迟最低的节点,适合需要最佳速度的场景。

YAML
proxy-groups:
  - name: "自动选择"
    type: url-test
    proxies:
      - "香港节点1"
      - "香港节点2"
      - "日本节点1"
      - "美国节点1"
      - "新加坡节点"
    url: "http://www.gstatic.com/generate_204"
    interval: 300  # 测试间隔(秒)
    tolerance: 50  # 容差(毫秒)
    
  # 使用示例
  - name: "流媒体专用"
    type: url-test
    proxies:
      - "Netflix专用节点"
      - "迪士尼+专用节点"
      - "YouTube Premium节点"
    url: "http://www.gstatic.com/generate_204"
    interval: 600  # 10分钟测试一次
    lazy: true  # 延迟测试,仅在需要时测试

配置说明

  • url:用于测试的URL,应返回204状态码
  • interval:测试间隔,太短会增加负担,太长可能不准确
  • tolerance:容差值,延迟相差小于此值的节点视为同等优秀
  • lazy:延迟测试模式,减少不必要的测试

load-balance 代理组配置

在多个节点间分配流量,适合高流量场景。

YAML
proxy-groups:
  - name: "负载均衡"
    type: load-balance
    proxies:
      - "高速节点1"
      - "高速节点2"
      - "高速节点3"
      - "备用节点"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    strategy: round-robin  # 轮询策略
    
  # 不同策略示例
  - name: "智能负载均衡"
    type: load-balance
    proxies:
      - "节点A"
      - "节点B"
      - "节点C"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    strategy: consistent-hashing  # 一致性哈希
    
  - name: "延迟优化负载"
    type: load-balance
    proxies:
      - "低延迟节点1"
      - "低延迟节点2"
      - "高带宽节点"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    strategy: round-robin
    health-check:
      enable: true
      url: "http://www.gstatic.com/generate_204"
      interval: 60

策略说明

  • round-robin:轮询,依次使用每个节点
  • consistent-hashing:一致性哈希,相同目标使用相同节点
  • health-check:健康检查,自动排除故障节点

fallback 代理组配置

故障转移,确保服务高可用性。

YAML
proxy-groups:
  - name: "高可用代理"
    type: fallback
    proxies:
      - "主节点"      # 首先尝试
      - "备用节点1"   # 主节点失败时使用
      - "备用节点2"   # 备用节点1也失败时使用
      - "紧急节点"    # 所有节点失败时的最后选择
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    
  # 复杂场景示例
  - name: "工作代理"
    type: fallback
    proxies:
      - "公司VPN"
      - "高速代理1"
      - "高速代理2"
      - "稳定代理"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    # 测试参数
    timeout: 5000  # 超时时间(毫秒)
    
  # 嵌套代理组
  - name: "智能备用"
    type: fallback
    proxies:
      - "自动选择节点"
      - "负载均衡节点"
      - "手动选择节点"
    url: "http://www.gstatic.com/generate_204"
    interval: 300

重要提示

fallback 策略会按顺序测试节点,直到找到可用的。建议将最稳定、最快的节点放在前面,将备用节点放在后面。

嵌套代理组

Clash 支持代理组的嵌套,可以创建更复杂的代理策略:

YAML - 嵌套代理组示例
proxy-groups:
  # 基础节点组
  - name: "香港节点"
    type: url-test
    proxies:
      - "香港-01"
      - "香港-02"
      - "香港-03"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    
  - name: "日本节点"
    type: url-test
    proxies:
      - "日本-01"
      - "日本-02"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    
  - name: "美国节点"
    type: url-test
    proxies:
      - "美国-01"
      - "美国-02"
      - "美国-03"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
  
  # 嵌套代理组:区域选择
  - name: "亚洲最优"
    type: url-test
    proxies:
      - "香港节点"  # 引用其他代理组
      - "日本节点"
      - "新加坡-01"  # 也可以包含具体节点
    url: "http://www.gstatic.com/generate_204"
    interval: 300
  
  # 最终选择代理组
  - name: "全局自动选择"
    type: url-test
    proxies:
      - "亚洲最优"
      - "美国节点"
      - "欧洲-01"
      - "台湾-01"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 100
  
  # 在规则中使用嵌套代理组
rules:
  - DOMAIN-SUFFIX,youtube.com,亚洲最优
  - DOMAIN-SUFFIX,netflix.com,美国节点
  - DOMAIN-SUFFIX,twitter.com,全局自动选择
  - MATCH,全局自动选择

嵌套代理组提供了极大的灵活性,允许您创建层次化的代理策略,满足各种复杂的使用场景。

高级配置技巧与优化

掌握以下高级技巧,可以让您的 Clash 配置更加高效和稳定:

1. 规则集自动更新

使用规则集(rule-providers)自动从远程获取最新规则,保持规则更新:

YAML - 规则集配置
rule-providers:
  # 广告屏蔽规则集
  reject:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400  # 每天更新一次
    
  # 直连规则集(国内网站)
  direct:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400
    
  # 代理规则集
  proxy:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400
  
  # 流媒体规则集
  netflix:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/netflix.txt"
    path: ./ruleset/netflix.yaml
    interval: 86400

# 在规则中使用规则集
rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,direct,DIRECT
  - RULE-SET,netflix,流媒体代理
  - RULE-SET,proxy,代理
  - MATCH,自动选择

2. DNS 配置优化

合理的 DNS 配置可以显著提高解析速度和隐私保护:

YAML - DNS 优化配置
dns:
  enable: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip  # 或 redir-host
  fake-ip-range: 198.18.0.1/16
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  
  # 国内域名使用国内 DNS
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  
  # 国外域名使用国外 DNS
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.8.8:853
    - https://dns.google/dns-query
  
  # 分流规则
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
      - 0.0.0.0/32
  
  # 特定域名使用指定 DNS
  nameserver-policy:
    "geosite:cn": ["https://doh.pub/dns-query"]
    "geosite:gfw": ["tls://1.1.1.1:853"]
    "geosite:netflix": ["tls://8.8.8.8:853"]

3. 性能优化配置

通过调整以下参数优化 Clash 性能:

YAML - 性能优化
# 性能优化配置
tcp-concurrent: true  # 启用 TCP 并发
enable-process: true  # 启用进程处理

# 连接池配置
connection-pool:
  max-connections: 1000  # 最大连接数
  idle-timeout: 30s      # 空闲超时时间
  max-idle-connections: 100  # 最大空闲连接数

# 内存优化
memory-optimize: true
gc-interval: 30s         # 垃圾回收间隔

# 流量控制
tcp-keep-alive-interval: 30s
udp-timeout: 60s

# 代理协议优化
proxies:
  - name: "优化节点"
    type: vmess
    server: example.com
    port: 443
    uuid: your-uuid
    alterId: 0
    cipher: auto
    udp: true  # 启用 UDP
    tls: true  # 启用 TLS
    skip-cert-verify: false
    servername: example.com
    network: ws  # WebSocket 传输
    ws-opts:
      path: /path
      headers:
        Host: example.com

4. 配置文件模块化

对于复杂的配置,可以将其拆分为多个文件,提高可维护性:

YAML - 主配置文件
# config.yaml - 主配置文件
port: 7890
socks-port: 7891
mode: Rule
log-level: info

# 包含其他配置文件
include:
  - ./configs/proxies.yaml  # 代理节点配置
  - ./configs/groups.yaml   # 代理组配置
  - ./configs/rules.yaml    # 规则配置
  - ./configs/dns.yaml      # DNS 配置

# 主配置中的规则(最后执行)
rules:
  - MATCH,自动选择
YAML - 代理配置文件
# configs/proxies.yaml
proxies:
  - name: "香港节点-01"
    type: ss
    server: hk01.example.com
    port: 443
    cipher: aes-256-gcm
    password: "password"
    udp: true
  
  - name: "日本节点-01"
    type: vmess
    server: jp01.example.com
    port: 443
    uuid: your-uuid
    alterId: 0
    cipher: auto
    network: ws
    tls: true
  
  # 更多节点...

模块化配置的优势

  • 易于维护:不同功能的配置分离,便于管理和更新
  • 可重用性:通用配置可以在多个配置文件中复用
  • 团队协作:多人可以同时编辑不同部分的配置
  • 版本控制:可以单独跟踪每个配置文件的变更历史

常见配置问题与解决方案

在配置 Clash 时,可能会遇到各种问题。以下是一些常见问题的解决方案:

1. 配置文件语法错误

症状:Clash 无法启动,日志显示配置文件错误

解决方案:

  • 使用 YAML 语法检查工具验证配置文件
  • 检查缩进是否正确(必须使用空格,不能使用制表符)
  • 检查冒号后是否有空格(key: value 正确,key:value 错误)
  • 检查列表项格式是否正确(- item 正确,item 错误)
  • 使用 Clash 的配置文件测试功能:clash -t -f config.yaml

2. 规则匹配不生效

症状:某些流量没有按照预期规则路由

解决方案:

  • 检查规则顺序,确保特定规则在通用规则之前
  • 使用日志调试功能,查看实际匹配的规则
  • 检查域名是否正确,注意大小写敏感性
  • 测试规则是否被前面的规则匹配
  • 检查代理组名称是否正确引用

3. 代理组无法正常工作

症状:url-test、fallback 等代理组策略不生效

解决方案:

  • 检查测试URL是否可访问,尝试更换为其他URL
  • 调整测试间隔,避免过于频繁的测试
  • 检查节点是否可用,测试单个节点的连接
  • 检查代理组中引用的节点名称是否正确
  • 对于嵌套代理组,确保引用的代理组已正确定义

4. DNS 解析问题

症状:部分网站无法访问或解析缓慢

解决方案:

  • 检查 DNS 配置,确保 nameserver 和 fallback 配置正确
  • 尝试更换 DNS 服务器,如使用 1.1.1.1 或 8.8.8.8
  • 检查 DNS 分流规则是否正确
  • 尝试不同的 enhanced-mode(fake-ip 或 redir-host)
  • 检查系统 DNS 设置,确保指向 Clash 的 DNS 端口

5. 性能问题

症状:连接缓慢、延迟高、内存占用大

解决方案:

  • 优化规则顺序,将最常用的规则放在前面
  • 减少规则数量,合并相似的规则
  • 使用规则集代替大量手写规则
  • 调整连接池参数,优化并发连接
  • 检查节点质量,更换性能更好的节点
  • 启用 TCP 并发和内存优化选项

调试技巧

当遇到配置问题时,可以采取以下调试步骤:

  1. 将日志级别设置为 debug,查看详细日志信息
  2. 简化配置文件,逐步添加功能,定位问题所在
  3. 使用在线 YAML 验证工具检查配置文件语法
  4. 在测试环境中验证配置,再应用到生产环境
  5. 查阅 Clash 官方文档和社区讨论,寻找类似问题的解决方案