如果你在 rules 里手写了几百条 DOMAIN-SUFFIX,那基本可以确定:用错方法了。规则集(rule-providers)能把这些常见分类打包成独立文件,统一维护、定时更新,配置文件本身反而会变得非常干净。
rule-providers 是什么
简单说,它是一份托管在别处(本地文件或远程 URL)的规则列表,Clash 定时拉取并加载,你只需要在 rules 里用一行 RULE-SET 引用它,而不用把几百条规则堆进主配置文件。
behavior 字段:三种规则集格式
| behavior | 内容格式 | 常见用途 |
|---|---|---|
| domain | 域名 / 域名后缀列表 | 广告拦截、流媒体分流、社交平台域名集 |
| ipcidr | IP 段列表 | 国内 IP 段、特定机房 IP 段直连 |
| classical | 完整规则语法(含类型前缀) | 混合类型、需要精确控制匹配方式的场景 |
behavior 必须与规则集文件的实际内容格式一致,用错会导致规则集加载失败或匹配异常,务必参照规则集来源方给出的说明填写。
type:http 还是 file
- http:从远程 URL 定时拉取,适合跟随社区维护的规则集持续更新。
- file:只读取本地文件,不会自动更新,适合你自己维护的私有规则。
常见规则集来源
社区里有不少长期维护的开源规则集项目,覆盖广告拦截、国内直连、流媒体分区、社交平台分流等分类,可以按需选取几个组合使用,避免自己从零编写。
常见规则集分类怎么组合
如果不知道该引入哪些规则集,可以按「优先级从高到低」的思路来组织:先处理广告/隐私跟踪拦截(避免不必要的连接),再处理必须直连的本地/内网地址,然后是需要特殊分流的流媒体与社交平台,最后再兜底一条国内 IP 段直连规则,剩下没匹配到的流量默认走代理。这个顺序背后的逻辑是:影响范围小、判断依据明确的规则放前面,模糊的兜底规则放最后,避免大范围规则「抢先」拦截了本该精确匹配的流量。
自己维护一份私有规则集
公司内部服务、自己常用但小众的网站,社区维护的规则集大概率不会覆盖,这种场景就适合用 type: file 建一份本地维护的规则文件,格式和远程规则集完全一致,只是不会自动从网络更新,需要自己手动编辑维护:
把公司 VPN、内部管理后台之类的域名放进这份私有规则集,既能保持主配置干净,也不用担心和公共规则集混在一起被覆盖。
怎么设置自动更新
interval 字段控制更新频率,单位为秒。常见做法是给广告拦截、流媒体分流这类更新频繁的规则集设置较短间隔(如一天),而相对稳定的规则集可以设置更长间隔(如一周)。
规则集也要注意匹配顺序
和普通规则一样,RULE-SET 引用同样遵循「从上到下,命中即停止」的原则。如果把范围宽泛的规则集放在前面,后面更精确的规则可能永远匹配不到,排查时记得优先检查规则顺序。
规则集加载失败怎么排查
规则集配置出错通常有几种典型表现:内核启动报错、面板/日志里提示规则集下载失败,或者规则看起来加载成功但完全没有生效。排查时可以按下面的顺序逐一排除:
- 检查 URL 是否可访问:直接在浏览器里打开
url字段的地址,确认能正常下载到文本内容,而不是 404 或者需要额外认证。 - 核对 behavior 是否匹配文件格式:打开下载到本地的规则文件看内容格式,确认与配置的
behavior(domain/ipcidr/classical)一致。 - 确认 path 指向的目录有写入权限:内核需要把远程内容缓存到本地
path指定的路径,如果目录没有写入权限会导致更新失败。 - 查看规则引用名称是否拼写一致:
rule-providers里定义的名称必须和rules里RULE-SET,名称,...完全一致,大小写、拼写错误都会导致规则被静默忽略。
规则集缓存要不要手动清理
正常情况下不需要。内核会根据 interval 自动判断缓存是否过期并重新拉取,不需要手动干预。但如果怀疑本地缓存的规则文件已经损坏(比如上次下载过程中被中断),或者规则集来源方更新了内容格式导致解析异常,可以手动删除 path 指向的本地文件,重启内核后它会重新完整下载一份,相当于强制刷新一次缓存。
规则集会不会拖慢启动速度
引入规则集之后,内核每次启动(或者规则集缓存过期需要更新时)都需要额外花时间下载并解析这些文件,规则集数量越多、单个文件越大,启动耗时也会相应增加。对绝大多数家庭使用场景来说,这点耗时几乎感觉不到;但如果你在资源有限的设备(比如低性能路由器)上运行内核,同时引入了大量规则集,可以考虑适当延长 interval,减少不必要的频繁重新下载,把更新频率控制在真正需要的范围内即可。
小结
与手写规则相比,规则集的最大价值在于「解耦」和「自动更新」:主配置只保留少量自定义规则和策略组结构,繁琐的域名/IP 分类都交给外部规则集去维护,减少了大量重复劳动,也更容易长期维护。