规则引擎工作原理

Clash 的规则引擎按从上到下顺序匹配,第一条命中的规则即生效,后续规则不再检查。每条规则由三部分组成:

# 格式:规则类型,匹配值,目标策略
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,DIRECT        # 兜底规则,必须放最后

理解这个顺序匹配机制至关重要:精确规则放前面,宽泛规则放后面,MATCH 兜底放最后

规则类型详解

域名类规则

规则类型匹配方式示例
DOMAIN精确匹配域名DOMAIN,www.google.com,Proxy
DOMAIN-SUFFIX匹配域名及其所有子域名DOMAIN-SUFFIX,google.com,Proxy
DOMAIN-KEYWORD域名中包含关键词DOMAIN-KEYWORD,googleapis,Proxy
DOMAIN-REGEX正则表达式匹配域名DOMAIN-REGEX,^api\..+\.com$,Proxy

DOMAIN-SUFFIX,google.com,Proxy 会同时匹配 google.comwww.google.commail.google.com 等所有子域名,是最常用的域名规则。

IP 地址类规则

规则类型匹配方式示例
IP-CIDR匹配 IPv4 CIDR 网段IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR6匹配 IPv6 CIDR 网段IP-CIDR6,::1/128,DIRECT
GEOIP按 IP 归属国家/地区匹配GEOIP,CN,DIRECT
💡
IP-CIDR 规则默认会触发 DNS 解析(将域名解析为 IP 后再匹配)。在 fake-ip 模式下,IP-CIDR 规则对域名无效,需要优先用域名规则。若希望 IP-CIDR 不触发 DNS 解析,在规则末尾添加 no-resolveIP-CIDR,10.0.0.0/8,DIRECT,no-resolve

其他规则类型

规则类型说明示例
PROCESS-NAME按进程名匹配(桌面端)PROCESS-NAME,git.exe,Proxy
PROCESS-PATH按进程完整路径匹配PROCESS-PATH,/usr/bin/curl,Proxy
NETWORK按协议类型匹配NETWORK,udp,Proxy
PORT按目标端口匹配DST-PORT,22,DIRECT
RULE-SET引用外部规则集RULE-SET,gfw,Proxy
MATCH兜底匹配,无条件命中MATCH,DIRECT

proxy-groups 策略组配置

策略组定义了规则命中后流量的转发目标。Clash 支持以下几种策略组类型:

手动选择组(select)

proxy-groups:
  - name: "Proxy"
    type: select
    proxies:
      - "自动选择"
      - "香港 01"
      - "新加坡 01"
      - "日本 01"
      - DIRECT

用户在客户端界面手动选择使用哪个节点或子策略组。最外层的默认策略组通常使用 select 类型。

延迟自动选择(url-test)

  - name: "自动选择"
    type: url-test
    url: "https://www.gstatic.com/generate_204"
    interval: 300      # 测速间隔(秒),建议 180-300
    tolerance: 50      # 延迟差在 50ms 以内时不切换节点
    proxies:
      - "香港 01"
      - "香港 02"
      - "新加坡 01"

自动对所有节点进行延迟测试,始终选择延迟最低的节点。适合对延迟敏感的场景(游戏、视频会议)。

故障转移(fallback)

  - name: "故障转移"
    type: fallback
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies:
      - "主节点"
      - "备用节点 01"
      - "备用节点 02"

优先使用列表第一个节点,仅当该节点不可用时才切换到下一个。适合稳定性优先的场景。

负载均衡(load-balance)

  - name: "负载均衡"
    type: load-balance
    strategy: round-robin   # round-robin / consistent-hashing
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies:
      - "节点 A"
      - "节点 B"
      - "节点 C"

将流量分散到多个节点,提升整体吞吐量。round-robin 轮询分配;consistent-hashing 同一目标地址始终使用同一节点,适合需要保持会话的场景。

rule-providers 外部规则集

手动维护数百条规则既繁琐又容易遗漏。rule-providers 允许从外部 URL 或本地文件订阅社区维护的大型规则集,自动更新。

rule-providers:
  gfw:
    type: http
    behavior: domain        # domain / ipcidr / classical
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400         # 24 小时自动更新一次

  cn-cidr:
    type: http
    behavior: ipcidr
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
    path: ./ruleset/cncidr.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

rules:
  - RULE-SET,direct,DIRECT
  - RULE-SET,gfw,Proxy
  - RULE-SET,cn-cidr,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,Proxy
ℹ️
推荐规则集来源Loyalsoldier/clash-rules 是社区最广泛使用的规则集,包含 GFW 列表、国内直连域名、广告过滤等,持续维护更新。

完整配置模板示例

以下是一份包含规则分流、策略组和外部规则集的最小可用配置模板:

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - tls://8.8.8.8:853

proxies:
  - name: "香港 01"
    type: vmess
    server: hk01.example.com
    port: 443
    uuid: "your-uuid-here"
    alterId: 0
    cipher: auto
    tls: true

proxy-groups:
  - name: "Proxy"
    type: select
    proxies: ["自动选择", "香港 01", DIRECT]

  - name: "自动选择"
    type: url-test
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    proxies: ["香港 01"]

rule-providers:
  gfw:
    type: http
    behavior: domain
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

rules:
  # 自定义高优先级规则(放最前)
  - DOMAIN-SUFFIX,openai.com,Proxy
  - DOMAIN-KEYWORD,notion,Proxy
  # 外部规则集
  - RULE-SET,gfw,Proxy
  # 国内 IP 直连
  - GEOIP,CN,DIRECT
  # 局域网直连
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  # 兜底
  - MATCH,DIRECT

常见分流场景配置

流媒体解锁

Netflix、Disney+、YouTube Premium 等流媒体有地区限制,需要特定地区的解锁节点:

proxy-groups:
  - name: "Netflix"
    type: select
    proxies: ["美国节点", "新加坡节点", "日本节点"]

rules:
  - DOMAIN-SUFFIX,netflix.com,Netflix
  - DOMAIN-SUFFIX,nflxvideo.net,Netflix
  - DOMAIN-KEYWORD,netflix,Netflix

开发者工具直连优化

npm、pip、Docker Hub 等需要代理,而内网服务、本地开发服务器需要直连:

rules:
  # 开发工具走代理
  - DOMAIN-SUFFIX,npmjs.org,Proxy
  - DOMAIN-SUFFIX,pypi.org,Proxy
  - DOMAIN-SUFFIX,docker.io,Proxy
  - PROCESS-NAME,git.exe,Proxy       # Windows
  - PROCESS-NAME,git,Proxy           # macOS/Linux
  # 本地开发直连
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - DOMAIN-SUFFIX,local,DIRECT

规则配置最佳实践

  • 精确优先DOMAIN 放在 DOMAIN-SUFFIX 前,DOMAIN-SUFFIX 放在 DOMAIN-KEYWORD 前,减少误匹配
  • GEOIP 放后面:GEOIP 需要 DNS 解析才能工作,耗时较长,放在域名规则之后
  • MATCH 必须是最后一条:作为兜底规则,未命中任何规则的流量由 MATCH 处理
  • 使用日志调试:在 Clash 客户端的"日志"页面实时查看每条连接命中了哪条规则,快速排查分流问题
  • no-resolve 减少延迟:对于已知是内网 IP 的 IP-CIDR 规则,加上 no-resolve 跳过 DNS 解析步骤
查看进阶配置指南,探索更多 Clash 高级功能

总结

  • 规则按从上到下顺序匹配,精确规则在前,宽泛规则在后,MATCH 兜底
  • 常用规则类型:DOMAIN-SUFFIX(域名及子域)、GEOIP(IP 归属地)、IP-CIDR(IP 网段)、PROCESS-NAME(进程名)
  • proxy-groups 定义节点选择策略:select(手动)/ url-test(自动延迟)/ fallback(故障转移)/ load-balance(负载均衡)
  • rule-providers 从外部订阅大型规则集,自动更新,无需手动维护

延伸阅读