首页/博客/Rule Provider 实战

Rule Provider 实战:用规则集告别手写几百条分流规则

"国内网站直连、常见广告域名拦截、流媒体走特定节点"——这些几乎是每个人都需要的规则,但手写意味着几百条 DOMAIN-SUFFIX,还要自己维护更新。Rule Provider 就是为了解决这个问题而生的。

🗓️ 2026 年 6 月 26 日 ⏱️ 阅读约 7 分钟 🔗 相关手册:进阶配置 · Rule Provider:规则集订阅

Rule Provider 解决了什么问题

规则本质上就是一份"域名/IP 到动作"的映射表,社区里早就有人把常见分类(广告域名、国内网站、各家流媒体)整理成了公开维护、持续更新的规则文件。

rule-providers 让 Clash 可以直接从一个远程 URL 下载这份规则文件,并按设定的周期自动更新,你的配置里只需要引用一次,不需要自己维护成百上千条规则。

相比手写规则,Rule Provider 的最大优势不是"省事",而是"持续维护"——域名会变化,广告域名列表需要不断更新,这些都由规则集的维护者在做,你只需要按周期同步。

三种规则集类型

类型 (behavior)内容格式典型用途
domain逐行域名,支持通配按域名维度分类,如广告域名、指定网站
ipcidr逐行 IP 段(CIDR)按 IP 段分类,如某地区、某数据中心的 IP 范围
classical标准 Clash 规则语法逐行混合类型,可以在一份文件里同时写 DOMAINIP-CIDR 等规则

此外还有 format 字段决定文件格式,常见的是 yaml 和体积更小、解析更快的 mrs(mihomo 规则集二进制格式)。

实际配置写法

config.yamlyaml
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 里通过名称引用某个规则集,动作可以是 DIRECTREJECT,也可以是某个代理组名
⚠️

rules自上而下、命中即停的,引用规则集的顺序同样重要——一般把"精确匹配、优先级高"的规则(比如自己手动加的例外)放在最前面,规则集放中间,兜底的 MATCH 放最后。

规则集从哪里来

规则集不需要自己动手写,社区里已经有不少长期维护、按分类整理好的公开项目,覆盖国内直连、广告拦截、常见流媒体平台、常见 AI 服务等分类,几乎是搭建配置文件时的"标配依赖"。选择规则集来源时,重点看两点:

  • 更新是否活跃:域名和 IP 段一直在变化,几个月不更新的规则集会逐渐"失准",可以看仓库的最近提交时间判断。
  • 分类是否够细:有的规则集把"国内直连"和"广告拦截"分开维护,方便你按需引用,而不是被迫全部下载一个大而全的规则文件。
💡

不同规则集之间的分类标准不完全一样,混用多个来源之前,最好先小范围测试几天,观察是否有明显的误判或漏判,再决定要不要长期使用。

自动更新与手动强制刷新

interval 控制的是 Clash 内核在后台运行期间按周期检查更新,但它不会在你刚改完配置、重启客户端的第一时间强制刷新——如果本地已经缓存了规则集文件(path 指向的那份),内核默认会先用本地缓存,等到 interval 周期到了才重新下载。

这在两种场景下需要特别注意:

  1. 刚把规则集地址从 A 换成 B,但 path 没有跟着改,内核可能还在用旧文件对应的缓存路径,导致"改了配置却没生效"的假象。
  2. 规则集维护者刚修复了一个明显的误拦截问题,你想立刻用上最新版本,这时候可以直接删除 path 指向的本地缓存文件,重启客户端触发一次强制重新下载。

大部分带 Dashboard 面板的客户端也提供"更新规则"的按钮,效果等同于手动删除缓存后重启,日常使用更方便。

规则集 vs 手写规则:性能怎么样

有人会担心"下载几万条规则会不会拖慢匹配速度",实际上内核在加载规则集时会做预处理(比如把域名规则组织成前缀树结构),单条规则的匹配开销并不会随着规则集条数线性增加,几千到几万条规则对现代设备来说几乎没有可感知的延迟差异。

真正影响体感速度的,反而是规则的排列顺序——命中率高的规则放得越靠前,平均匹配次数就越少。这也是为什么建议把常用的直连规则集放在前面,而不是随手放在规则列表末尾。

实战建议

  1. 不要同时叠加太多来源不同的规则集,容易出现同一个域名被不同规则集重复判断、行为不一致的情况,一类需求选一份维护活跃的规则集即可。
  2. 规则集出问题(比如误拦截了正常网站)时,先确认是不是规则集本身的问题,而不是先怀疑自己的配置——可以临时把某条 RULE-SET 注释掉做排查。
  3. 流媒体解锁类规则集更新最频繁(因为平台会不断调整 IP 段和域名),interval 可以适当设置更短,比如 43200(12 小时)。
  4. 定期回顾自己引用的规则集列表,删掉不再需要的分类,配置文件越精简,排查问题时越容易定位。

更完整的规则语法和优先级说明,可以回头看进阶手册的规则引擎章节