很多人以为是节点不稳定,实际是规则覆盖关系出错。ClashX 会按配置文件从上到下匹配,命中第一条后就停止,因此顺序本身就是逻辑的一部分。
为什么规则看起来随机失效
很多人以为是节点不稳定,实际是规则覆盖关系出错。ClashX 会按配置文件从上到下匹配,命中第一条后就停止,因此顺序本身就是逻辑的一部分。
如果你把 MATCH、大范围 GEOIP 或宽泛 DOMAIN-SUFFIX 放在前面,后面的精准规则就没有机会生效。
每个请求只会命中第一条规则。顺序写错,后面的规则等于不存在。
典型症状
- 时好时坏像节点波动
- 日志总落到 GEOIP 或 MATCH
- 首页能开,播放或登录失败
- 改一条规则导致别的业务异常
把 MATCH 写在中间会直接吞掉后续规则,必须最后一条。
规则优先级的核心模型
可以把规则理解为漏斗:越精准越靠前,越兜底越靠后。推荐顺序:DOMAIN → DOMAIN-SUFFIX → DOMAIN-KEYWORD → IP-CIDR → GEOIP → MATCH。
- 精确域名命中快且稳定
- 关键业务域名优先写在前面
- 兜底规则必须唯一且在最后
| 规则类型 | 优先级 | 用途 | 风险 |
|---|---|---|---|
DOMAIN | 1 | 关键业务域名 | 维护成本高 |
DOMAIN-SUFFIX | 2 | 整域分流 | 后缀过宽误伤 |
DOMAIN-KEYWORD | 3 | 过渡规则 | 误判概率高 |
IP-CIDR | 4 | 网段策略 | 注意 no-resolve |
GEOIP | 5 | 国家兜底 | CDN 场景偏差 |
MATCH | 6 | 最终兜底 | 不可提前 |
DOMAIN 负责精确命中,GEOIP 与 MATCH 负责兜底,避免混写。
漏斗模型:业务精确规则 → 服务后缀 → 关键词过渡 → 网段与地理兜底 → MATCH。
常见冲突场景与修复
场景 1:办公系统走错线路。通常是被上方 GEOIP,CN,DIRECT 提前命中。修复方法是将办公域名白名单提前。
场景 2:流媒体识别失败。多数是规则关键词过宽,把服务 API 与内容域名混在一起,需要拆分成更细粒度规则。
办公系统走错线路
先 GEOIP 后业务精确规则,SSO 回调被截断。
rules:
- GEOIP,CN,DIRECT
- DOMAIN-SUFFIX,corp.example.com,DIRECT
- DOMAIN,sso.corp-auth.com,PROXY
- MATCH,PROXY
把 SSO 与关键 API 前置,再放 GEOIP。
rules:
- DOMAIN,sso.corp-auth.com,PROXY
- DOMAIN,api.corp.example.com,DIRECT
- DOMAIN-SUFFIX,corp.example.com,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
流媒体识别失败
只靠关键字规则,鉴权与媒体域名漏匹配。
rules:
- DOMAIN-KEYWORD,netflix,PROXY
- GEOIP,CN,DIRECT
- MATCH,DIRECT
拆分 API、媒体、主域后缀规则。
rules:
- DOMAIN,api.netflix.com,PROXY_STREAM
- DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
- DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
- GEOIP,CN,DIRECT
- MATCH,PROXY
国内 CDN 走代理
宽关键词把 CDN 资源一起代理。
主域代理,CDN 域明确 DIRECT。
UDP 游戏不通
策略组不支持稳定 UDP,导致掉线。
给游戏域名和网段独立 UDP 策略组。
实用模板(可直接套用)
rules:
- DOMAIN,api.example.com,ProxyA
- DOMAIN-SUFFIX,example.com,ProxyA
- DOMAIN-KEYWORD,office,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,ProxyB
模板重点不是具体节点名,而是顺序逻辑。
基础模板
rules:
- DOMAIN,login.company.com,PROXY
- DOMAIN-SUFFIX,company.com,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
进阶模板(rule-providers)
rule-providers:
direct:
type: http
behavior: classical
url: https://example.org/rules/direct.yaml
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
流媒体模板
rules:
- DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
- DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
- GEOIP,CN,DIRECT
- MATCH,PROXY
模板各段:关键业务、场景规则、地理兜底、最终兜底。
一次只改一层,并做回归测试。
排查流程(5 分钟版)
- 开启日志并重现一次目标请求
- 确认实际命中的规则行
- 检查该规则上方是否存在宽规则
- 核对规则集版本与订阅更新时间
- 改动后做回归:目标域名 + 常用网站 + 关键业务
第1分钟复现,第2分钟定位命中,第3分钟看覆盖,第4分钟最小改动,第5分钟回归验证。
tail -f ~/Library/Logs/ClashX/clashx.log
grep "api.example.com" ~/Library/Logs/ClashX/clashx.log
grep -E "MATCH|GEOIP|DOMAIN" ~/Library/Logs/ClashX/clashx.log | tail -n 50
通常在 ~/Library/Logs/ClashX/ 目录。
团队协作与版本管理
多人维护时,建议把规则拆成“业务白名单、系统服务、地理分流、兜底规则”四层,并在提交信息里写明“变更目的 + 影响范围 + 回滚方案”。
这样即使后续出现异常,也能快速定位是哪一层引入的问题。
config/
base.yaml
rules/
10-business.yaml
20-services.yaml
30-geo.yaml
99-fallback.yamlfeat(rule): add explicit routing for corp SSO callbacks
fix(rule): move MATCH to last line and reduce keyword shadowing
chore(ruleset): bump streaming provider to 2026-02-10
使用 rule-provider 做团队共享,减少设备间漂移。
FAQ:规则优先级常见问题
Q1:no-resolve 是什么?
A:让 IP 规则不再额外解析 DNS,适合内网网段。
Q2:MATCH 放哪里?
A:最后一行,只保留一条。
Q3:规则集和本地规则冲突怎么办?
A:看最终顺序,先命中者生效。
Q4:为什么同一服务有时正常有时异常?
A:主域、API、媒体域命中不同规则,需拆分。
Q5:DOMAIN-SUFFIX 和 DOMAIN-KEYWORD 怎么选?
A:优先 DOMAIN-SUFFIX,关键词只作过渡。
Q6:GEOIP 能不能前置?
A:不建议,容易吞掉高优先业务规则。
Q7:改完多久生效?
A:重载后立即生效,但要用日志复核命中。
Q8:多人协作如何避免覆盖?
A:分层文件 + 提交规范 + 顺序审查。
Q9:规则越多越好吗?
A:不是。规则应“少而准”,避免大量宽规则互相覆盖。
Q10:是否要把所有域名都写成 DOMAIN?
A:不需要。关键域名用 DOMAIN,其它走后缀或规则集更易维护。
附录:规则实验室(可复制验证)
下面是三组可复现的小实验,适合在测试配置中快速理解“顺序决定行为”。
实验 1:MATCH 提前的影响
rules:
- DOMAIN,api.example.com,PROXY
- MATCH,DIRECT
- DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.com,PROXY 永远不会生效,因为 MATCH 已经提前终止匹配。
实验 2:关键词规则覆盖过宽
rules:
- DOMAIN-KEYWORD,cdn,PROXY
- DOMAIN-SUFFIX,assets.example.cn,DIRECT
- MATCH,DIRECT
当请求域名包含 cdn 时,会先命中关键词规则,后面的 DIRECT 无法执行。
实验 3:精确规则前置的收益
rules:
- DOMAIN,auth.example.com,PROXY
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
将认证域名前置后,登录链路与业务链路可以分开管理,避免策略冲突。
总结
先把规则写对,再谈测速和节点数量。可维护的规则顺序,才是长期稳定分流的基础。
上线前建议固定执行三项检查:关键域名命中检查、MATCH 末尾检查、回归样例检查。
只要把“顺序”当作设计对象,你的 ClashX 分流将更稳定、更可解释、更易协作。