Clash 规则分流实战:国内直连、国外走代理的配置写法与优先级排查
以真实 rules 段为例讲解 DOMAIN-SUFFIX、GEOIP、MATCH 的匹配顺序,演示国内外分流的最小可用规则集,并解释规则不生效时的常见排查路径。
以真实 rules 段为例讲解 DOMAIN-SUFFIX、GEOIP、MATCH 的匹配顺序,演示国内外分流的最小可用规则集,并解释规则不生效时的常见排查路径。
不做分流的配置只有两种极端:全局代理或全局直连。全局代理会让国内站点(银行、政务、部分视频站)访问变慢,甚至触发风控;全局直连则等于没开代理。规则分流的作用是让 Clash 在每一次连接发起时判断目标域名或 IP 属于哪一类,再决定走直连、走代理还是直接拒绝。这个判断过程完全由 rules 段驱动,规则写得越合理,体验越接近"该走的走,该直连的直连"。
Clash 内核(以及目前活跃维护的 Clash Meta / mihomo 内核)在处理规则时是逐条从上到下匹配的,命中第一条就立即执行对应策略,后面的规则不再参与判断。这意味着规则顺序本身就是逻辑,写反顺序会让后面精细的规则形同虚设。
一份典型的 rules 段会混用多种匹配类型,常见的几种及其含义:
DOMAIN-SUFFIX,google.com 会命中 www.google.com、mail.google.com 等所有以该后缀结尾的域名。GEOIP,CN,DIRECT 表示目标 IP 归属中国大陆则直连。这条规则依赖内置或外部 GeoIP 数据库,判断发生在域名解析之后。关键点在于:域名类规则(DOMAIN-SUFFIX/DOMAIN-KEYWORD)在 DNS 解析前就能判断,速度快;GEOIP 类规则需要先解析出 IP 再判断,顺序上通常排在域名规则之后。把 GEOIP,CN,DIRECT 放在最前面虽然能保证国内 IP 优先直连,但也意味着所有请求都要先完成一次解析才能判断,不适合追求速度的场景;把它放在域名规则之后、MATCH 之前,是更均衡的做法。
下面是一份可以直接理解、按需增补的最小分流规则集,覆盖了"国内直连、国外代理、局域网直连、兜底代理"四类最基本的场景:
rules:
# 局域网与内网地址直连
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# 常见国内域名直连
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,alipay.com,DIRECT
# 常见需要代理的域名
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-SUFFIX,youtube.com,PROXY
- DOMAIN-SUFFIX,github.com,PROXY
# 按 IP 归属地兜底判断
- GEOIP,CN,DIRECT
# 未命中以上任何规则,统一走代理
- MATCH,PROXY
这里的 PROXY 是策略组名称,需要在 proxy-groups 段提前定义好,通常指向订阅节点或手动选择的策略组;DIRECT 是内核内置的直连策略,不需要额外定义。规则的先后顺序严格对应上面列出的四类场景,从"精确、代价小"到"宽泛、代价大"依次排列,这也是编写规则集的通用原则。
手写几十条 DOMAIN-SUFFIX 可以应付个人使用,但覆盖不了完整的国内外站点列表。实际生产环境中更常见的做法是引用规则集(RULE-SET),把大量域名/IP 归类维护在外部文件里,规则段里只写引用:
rule-providers:
cn-domains:
type: http
behavior: domain
url: "https://example.com/rules/cn-domains.txt"
path: ./rules/cn-domains.yaml
interval: 86400
rules:
- RULE-SET,cn-domains,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
规则集会按 interval 设定的秒数定期刷新,不需要手动更新每一条域名。behavior 字段决定规则集内容的解析方式(domain / ipcidr / classical),需要与规则集文件本身的格式对应,写错会导致规则集加载失败但不一定报错明显,这也是排查规则不生效时容易被忽略的一环。
规则写完之后连接行为和预期不一致,通常可以按下面的顺序逐项排查:
规则里引用的 PROXY、DIRECT 等策略名必须和 proxy-groups 里定义的 name 完全一致,包括大小写。名称不匹配时,不同客户端的表现不一样,有的会报错,有的会静默回退到默认策略,容易误判成"规则没生效"。
如果一条 DOMAIN-KEYWORD 或 GEOIP 规则写在了前面,精确的 DOMAIN-SUFFIX 规则永远轮不到它执行。把可疑规则临时挪到最前面测试,能快速确认是不是顺序问题。
GEOIP 类规则依赖解析出的 IP,如果客户端启用了 fake-ip 模式或者使用了境外 DNS,解析结果可能和真实归属地不符,导致 GEOIP,CN 判断失效。可以在客户端的连接日志或规则命中记录里查看具体连接实际匹配到了哪一条规则。
使用 RULE-SET 时,如果外部 url 访问失败或格式解析报错,规则集会加载为空,相当于这条引用直接失效,后续流量会一路匹配到兜底 MATCH。查看客户端启动日志或规则集刷新状态可以确认这一点。
部分客户端支持多套配置切换,如果修改的是备用 profile 而当前生效的是另一份,规则改动自然不会体现。确认当前激活的配置文件路径,是最容易被忽略但最常见的原因。
规则集不是一次写完就不再维护的东西,几个长期实用的习惯值得保留:精确规则放前面、宽泛规则放后面,减少误判;局域网与内网段规则始终放在最前,避免本地服务被意外代理;GEOIP,CN,DIRECT 通常放在域名规则之后、MATCH 之前,作为国内 IP 的兜底而不是主力判断依据;涉及跨境办公、跨境支付等特殊域名,建议单独列出直连或代理,不要完全依赖 GEOIP 归类,因为部分服务的 IP 归属地和实际业务地不完全一致。规则集的价值随着使用时间增长,建议定期回顾连接日志,把频繁被 MATCH 兜底命中的域名补充成明确规则,分流会越来越精准。
配置好规则分流前,先在对应平台安装客户端并完成订阅导入。