用 rule-providers 让分流规则自动更新,不用手动改配置
如果你的 rules 字段已经堆到几十条甚至上百条,每次想加一个域名都要手动编辑文件,那是时候了解一下 rule-providers 了——它能把规则集托管成远程文件,客户端定时拉取即可。
手写 rules 的问题在哪
直接在 rules 里逐条写 DOMAIN-SUFFIX、IP-CIDR 没有问题,但当规则数量上升到成百上千条(例如想精确区分「境内网站直连、境外网站代理」)时,会遇到两个麻烦:配置文件变得臃肿难以维护;规则本身需要持续更新(新增域名、修正误判),手动同步很容易遗漏。
rule-providers 解决了什么
rule-providers 把一整批规则托管成一个独立文件(本地或远程 URL),主配置里只需要引用它的名字,并设置一个更新间隔,客户端会按周期自动重新拉取,规则内容更新时你什么都不用做。
behavior 字段决定规则格式
domain:规则集内容是域名列表,逐行一个域名或域名后缀。ipcidr:规则集内容是 IP 段列表,逐行一个 CIDR。classical:规则集内容可以是完整的匹配语法(和rules字段写法一致),最灵活但体积也最大。
interval 决定多久拉取一次
单位是秒,86400 就是 24 小时更新一次。规则集本身通常变化不会太频繁,设成每天或每几天更新一次即可,没必要设得过短,避免给规则集的服务器造成不必要的压力。
常见用法:广告拦截 + 区域直连
比较典型的组合是准备两个规则集:一个用于拦截广告与追踪域名(命中后指向 REJECT),一个用于识别境内网站与 IP 段(命中后指向 DIRECT),剩下的流量全部走代理策略组,这样只需要维护两份规则集,就能覆盖绝大多数分流需求。
behavior 即可,不必依赖任何第三方服务商。多个规则集如何组合使用
实际配置里往往不止一个规则集,常见的组合是:广告拦截规则集放在最前面优先判断,接着是境内直连规则集,然后才是各个代理策略组对应的分流规则,最后用 MATCH 兜底。rules 字段是自上而下逐条匹配的,命中即停止,所以顺序非常重要——如果把「全部走代理」的规则放在最前面,后面所有更精细的规则集都不会再被检查到。
可以把这个顺序理解为「先排除、再兜底」:先处理明确要拦截或明确要直连的流量,剩下没被前面规则覆盖到的,才交给最后的 MATCH 走默认策略组。
规则集的更新与迁移注意事项
规则集文件下载后会缓存在 path 指定的本地路径,即便暂时断网,客户端依然能用上一次缓存的版本继续工作,不会因为拉取失败而导致规则全部失效。如果你换了设备或者重装了客户端,记得把 path 对应的缓存目录一起迁移过去,否则首次启动时会重新触发一次远程下载,网络不佳时可能会有短暂的规则缺失。
另外,不同规则集之间的 behavior 必须与其内容格式匹配——用 domain 声明却提供了 classical 格式的内容会导致解析失败,客户端一般会在日志里给出明确的报错提示,修改后重启或等待下一次 interval 到期即可生效。
小结
rule-providers 把「规则内容」和「规则引用」拆开了:内容可以独立更新、独立维护,主配置文件只保留引用关系,长期来看会比一份几百行的 rules 列表清爽得多,也更方便多台设备共用同一套规则。