Rule Provider 实战:用规则集告别手写几百条分流规则
"国内网站直连、常见广告域名拦截、流媒体走特定节点"——这些几乎是每个人都需要的规则,但手写意味着几百条 DOMAIN-SUFFIX,还要自己维护更新。Rule Provider 就是为了解决这个问题而生的。
Rule Provider 解决了什么问题
规则本质上就是一份"域名/IP 到动作"的映射表,社区里早就有人把常见分类(广告域名、国内网站、各家流媒体)整理成了公开维护、持续更新的规则文件。
rule-providers 让 Clash 可以直接从一个远程 URL 下载这份规则文件,并按设定的周期自动更新,你的配置里只需要引用一次,不需要自己维护成百上千条规则。
相比手写规则,Rule Provider 的最大优势不是"省事",而是"持续维护"——域名会变化,广告域名列表需要不断更新,这些都由规则集的维护者在做,你只需要按周期同步。
三种规则集类型
| 类型 (behavior) | 内容格式 | 典型用途 |
|---|---|---|
domain | 逐行域名,支持通配 | 按域名维度分类,如广告域名、指定网站 |
ipcidr | 逐行 IP 段(CIDR) | 按 IP 段分类,如某地区、某数据中心的 IP 范围 |
classical | 标准 Clash 规则语法逐行 | 混合类型,可以在一份文件里同时写 DOMAIN、IP-CIDR 等规则 |
此外还有 format 字段决定文件格式,常见的是 yaml 和体积更小、解析更快的 mrs(mihomo 规则集二进制格式)。
实际配置写法
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
direct:
type: http
behavior: classical
url: "https://example.com/rules/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,direct,DIRECT
- MATCH,PROXY
几个关键字段:
interval:自动更新周期(秒),规则集内容会变化,建议设置为一天(86400)左右,不需要太频繁path:本地缓存路径,下载后的规则集会先存到本地,客户端重启不需要重新下载RULE-SET,名称,动作:在rules里通过名称引用某个规则集,动作可以是DIRECT、REJECT,也可以是某个代理组名
rules 是自上而下、命中即停的,引用规则集的顺序同样重要——一般把"精确匹配、优先级高"的规则(比如自己手动加的例外)放在最前面,规则集放中间,兜底的 MATCH 放最后。
规则集从哪里来
规则集不需要自己动手写,社区里已经有不少长期维护、按分类整理好的公开项目,覆盖国内直连、广告拦截、常见流媒体平台、常见 AI 服务等分类,几乎是搭建配置文件时的"标配依赖"。选择规则集来源时,重点看两点:
- 更新是否活跃:域名和 IP 段一直在变化,几个月不更新的规则集会逐渐"失准",可以看仓库的最近提交时间判断。
- 分类是否够细:有的规则集把"国内直连"和"广告拦截"分开维护,方便你按需引用,而不是被迫全部下载一个大而全的规则文件。
不同规则集之间的分类标准不完全一样,混用多个来源之前,最好先小范围测试几天,观察是否有明显的误判或漏判,再决定要不要长期使用。
自动更新与手动强制刷新
interval 控制的是 Clash 内核在后台运行期间按周期检查更新,但它不会在你刚改完配置、重启客户端的第一时间强制刷新——如果本地已经缓存了规则集文件(path 指向的那份),内核默认会先用本地缓存,等到 interval 周期到了才重新下载。
这在两种场景下需要特别注意:
- 刚把规则集地址从 A 换成 B,但
path没有跟着改,内核可能还在用旧文件对应的缓存路径,导致"改了配置却没生效"的假象。 - 规则集维护者刚修复了一个明显的误拦截问题,你想立刻用上最新版本,这时候可以直接删除
path指向的本地缓存文件,重启客户端触发一次强制重新下载。
大部分带 Dashboard 面板的客户端也提供"更新规则"的按钮,效果等同于手动删除缓存后重启,日常使用更方便。
规则集 vs 手写规则:性能怎么样
有人会担心"下载几万条规则会不会拖慢匹配速度",实际上内核在加载规则集时会做预处理(比如把域名规则组织成前缀树结构),单条规则的匹配开销并不会随着规则集条数线性增加,几千到几万条规则对现代设备来说几乎没有可感知的延迟差异。
真正影响体感速度的,反而是规则的排列顺序——命中率高的规则放得越靠前,平均匹配次数就越少。这也是为什么建议把常用的直连规则集放在前面,而不是随手放在规则列表末尾。
实战建议
- 不要同时叠加太多来源不同的规则集,容易出现同一个域名被不同规则集重复判断、行为不一致的情况,一类需求选一份维护活跃的规则集即可。
- 规则集出问题(比如误拦截了正常网站)时,先确认是不是规则集本身的问题,而不是先怀疑自己的配置——可以临时把某条
RULE-SET注释掉做排查。 - 流媒体解锁类规则集更新最频繁(因为平台会不断调整 IP 段和域名),
interval可以适当设置更短,比如43200(12 小时)。 - 定期回顾自己引用的规则集列表,删掉不再需要的分类,配置文件越精简,排查问题时越容易定位。
更完整的规则语法和优先级说明,可以回头看进阶手册的规则引擎章节。