如果你在 rules 里手写了几百条 DOMAIN-SUFFIX,那基本可以确定:用错方法了。规则集(rule-providers)能把这些常见分类打包成独立文件,统一维护、定时更新,配置文件本身反而会变得非常干净。

rule-providers 是什么

简单说,它是一份托管在别处(本地文件或远程 URL)的规则列表,Clash 定时拉取并加载,你只需要在 rules 里用一行 RULE-SET 引用它,而不用把几百条规则堆进主配置文件。

rule-providers: reject: type: http behavior: domain url: "https://example.com/rules/reject.txt" path: ./rules/reject.yaml interval: 86400 rules: - RULE-SET,reject,REJECT - MATCH,PROXY

behavior 字段:三种规则集格式

behavior内容格式常见用途
domain域名 / 域名后缀列表广告拦截、流媒体分流、社交平台域名集
ipcidrIP 段列表国内 IP 段、特定机房 IP 段直连
classical完整规则语法(含类型前缀)混合类型、需要精确控制匹配方式的场景
behavior 必须与规则集文件的实际内容格式一致,用错会导致规则集加载失败或匹配异常,务必参照规则集来源方给出的说明填写。

type:http 还是 file

  • http:从远程 URL 定时拉取,适合跟随社区维护的规则集持续更新。
  • file:只读取本地文件,不会自动更新,适合你自己维护的私有规则。

常见规则集来源

社区里有不少长期维护的开源规则集项目,覆盖广告拦截、国内直连、流媒体分区、社交平台分流等分类,可以按需选取几个组合使用,避免自己从零编写。

不需要一次性引入太多规则集,规则集数量越多,内核启动和规则匹配的开销也会略微增加,按实际需求选取即可。

常见规则集分类怎么组合

如果不知道该引入哪些规则集,可以按「优先级从高到低」的思路来组织:先处理广告/隐私跟踪拦截(避免不必要的连接),再处理必须直连的本地/内网地址,然后是需要特殊分流的流媒体与社交平台,最后再兜底一条国内 IP 段直连规则,剩下没匹配到的流量默认走代理。这个顺序背后的逻辑是:影响范围小、判断依据明确的规则放前面,模糊的兜底规则放最后,避免大范围规则「抢先」拦截了本该精确匹配的流量。

自己维护一份私有规则集

公司内部服务、自己常用但小众的网站,社区维护的规则集大概率不会覆盖,这种场景就适合用 type: file 建一份本地维护的规则文件,格式和远程规则集完全一致,只是不会自动从网络更新,需要自己手动编辑维护:

rule-providers: private: type: file behavior: domain path: ./rules/private.yaml

把公司 VPN、内部管理后台之类的域名放进这份私有规则集,既能保持主配置干净,也不用担心和公共规则集混在一起被覆盖。

怎么设置自动更新

interval 字段控制更新频率,单位为秒。常见做法是给广告拦截、流媒体分流这类更新频繁的规则集设置较短间隔(如一天),而相对稳定的规则集可以设置更长间隔(如一周)。

rule-providers: streaming: type: http behavior: classical url: "https://example.com/rules/streaming.yaml" path: ./rules/streaming.yaml interval: 43200 # 12 小时更新一次

规则集也要注意匹配顺序

和普通规则一样,RULE-SET 引用同样遵循「从上到下,命中即停止」的原则。如果把范围宽泛的规则集放在前面,后面更精确的规则可能永远匹配不到,排查时记得优先检查规则顺序。

规则集加载失败怎么排查

规则集配置出错通常有几种典型表现:内核启动报错、面板/日志里提示规则集下载失败,或者规则看起来加载成功但完全没有生效。排查时可以按下面的顺序逐一排除:

  1. 检查 URL 是否可访问:直接在浏览器里打开 url 字段的地址,确认能正常下载到文本内容,而不是 404 或者需要额外认证。
  2. 核对 behavior 是否匹配文件格式:打开下载到本地的规则文件看内容格式,确认与配置的 behavior(domain/ipcidr/classical)一致。
  3. 确认 path 指向的目录有写入权限:内核需要把远程内容缓存到本地 path 指定的路径,如果目录没有写入权限会导致更新失败。
  4. 查看规则引用名称是否拼写一致rule-providers 里定义的名称必须和 rulesRULE-SET,名称,... 完全一致,大小写、拼写错误都会导致规则被静默忽略。

规则集缓存要不要手动清理

正常情况下不需要。内核会根据 interval 自动判断缓存是否过期并重新拉取,不需要手动干预。但如果怀疑本地缓存的规则文件已经损坏(比如上次下载过程中被中断),或者规则集来源方更新了内容格式导致解析异常,可以手动删除 path 指向的本地文件,重启内核后它会重新完整下载一份,相当于强制刷新一次缓存。

规则集会不会拖慢启动速度

引入规则集之后,内核每次启动(或者规则集缓存过期需要更新时)都需要额外花时间下载并解析这些文件,规则集数量越多、单个文件越大,启动耗时也会相应增加。对绝大多数家庭使用场景来说,这点耗时几乎感觉不到;但如果你在资源有限的设备(比如低性能路由器)上运行内核,同时引入了大量规则集,可以考虑适当延长 interval,减少不必要的频繁重新下载,把更新频率控制在真正需要的范围内即可。

小结

与手写规则相比,规则集的最大价值在于「解耦」和「自动更新」:主配置只保留少量自定义规则和策略组结构,繁琐的域名/IP 分类都交给外部规则集去维护,减少了大量重复劳动,也更容易长期维护。