规则引擎工作原理
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.com、www.google.com、mail.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-resolve:IP-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 解析步骤
总结
- 规则按从上到下顺序匹配,精确规则在前,宽泛规则在后,MATCH 兜底
- 常用规则类型:
DOMAIN-SUFFIX(域名及子域)、GEOIP(IP 归属地)、IP-CIDR(IP 网段)、PROCESS-NAME(进程名) proxy-groups定义节点选择策略:select(手动)/ url-test(自动延迟)/ fallback(故障转移)/ load-balance(负载均衡)rule-providers从外部订阅大型规则集,自动更新,无需手动维护
延伸阅读
- TUN 模式使用指南:让所有流量都走 Clash 规则
- DNS 防污染设置:配合规则分流解决 DNS 污染问题
- 订阅自动更新设置:自动保持节点和规则集最新