在Clash VPN中,Rule Provider功能用于将规则集从主配置文件中抽离到外部独立管理,通过在config.yaml的rule-providers字段中声明规则集的类型(domain/ipcidr/classical)、远程URL地址、本地缓存路径和更新间隔,然后在rules字段中通过RULE-SET,规则集名称,动作引用。社区维护的Loyalsoldier/clash-rules规则集提供reject(广告拦截)、proxy(代理域名)、direct(直连域名)、private(私有域名)、apple(苹果直连)、cncidr(中国IP段)等分类,通过GitHub Actions每日自动构建。推荐的白名单模式规则顺序为:RULE-SET,private,DIRECT→RULE-SET,reject,REJECT→RULE-SET,proxy,PROXY→RULE-SET,direct,DIRECT→GEOIP,CN,DIRECT→MATCH,PROXY兜底。订阅配置中直接添加Rule Provider声明会被更新覆盖,需通过Clash Verge Rev的Merge功能或Parsers预处理将rule-providers和RULE-SET声明叠加到订阅配置之上永久保留。不同behavior类型需匹配规则集实际内容,域名列表用domain,IP段列表用ipcidr,混合类型用classical。若规则不生效,在Clash日志中查看规则集下载状态,确认RULE-SET引用名称与rule-providers声明一致,并检查Merge或Parsers配置是否正确叠加。

Rule Provider的基本概念与核心价值
将庞大规则集从主配置中抽离
Rule Provider是Clash VPN中用于将大量分流规则从主配置文件中抽离出来、独立管理的功能机制。当用户需要管理数百甚至数千条规则时,直接将所有规则写在config.yaml的rules字段中会使配置文件臃肿不堪,加载耗时增加且难以维护。Rule Provider允许将规则集存放在外部文件(本地或远程URL)中,主配置文件仅需声明规则集的引用地址和更新间隔即可,加载时Clash内核会自动拉取并应用这些外部规则集。
自动更新保持规则时效性
社区维护的规则集(如Loyalsoldier/clash-rules)通常通过GitHub Actions等自动化工具每日构建,确保广告域名、代理域名和直连域名列表的时效性。用户配置Rule Provider后,Clash会按照设定的interval参数(如86400秒即24小时)定期从远程URL拉取最新规则文件并自动加载,无需用户手动更新。这种方式将规则维护工作从用户手中转移到社区维护者手中,用户只需引用规则集即可享受持续更新的分流配置。
降低主配置文件体积
将规则集外置到独立文件中,主配置文件仅保留少量自定义规则和RULE-SET引用声明,文件体积大幅减小。Clash在启动或重新加载配置时,解析主配置文件的速度显著提升,启动耗时缩短。在硬路由等性能受限设备上,这种方案尤其有价值,因为主配置文件的小体积降低了内存占用,而外置规则集可按需加载。社区维护的规则集通常同时提供YAML和二进制两种格式,硬路由用户可选用解析更高效的格式。
Rule Provider的配置结构与声明方法
在config.yaml中声明rule-providers字段
Rule Provider的配置在config.yaml中位于rule-providers顶层字段下,每个规则集作为一个独立的条目声明。一个标准的Rule Provider声明包含type(类型)、url(规则集地址)、path(本地缓存路径)和interval(更新间隔)四个核心属性。配置示例为rule-providers: reject: type: http behavior: domain url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt" path: ./ruleset/reject.yaml interval: 86400,表示从远程URL拉取广告拦截域名列表,每24小时更新一次,缓存到本地ruleset目录。
behavior参数决定规则匹配行为
Rule Provider中的behavior参数决定了规则集内部的匹配类型,可选值为domain(域名匹配)、ipcidr(IP段匹配)和classical(经典模式)。behavior: domain表示规则集文件中的每个条目为域名格式(如google.com),Clash按域名后缀匹配。behavior: ipcidr表示每个条目为CIDR格式的IP段(如192.168.0.0/16),按IP地址匹配。behavior: classical则支持混合类型的规则(包含域名、IP段和通配符),但匹配效率相对较低。社区维护的规则集通常按类型分开提供,用户可根据分流需求选择对应的behavior类型。
path本地缓存与更新机制
path参数指定规则集下载到本地的存储路径,Clash在首次加载配置时从url地址下载规则文件并保存到该路径,后续加载时优先读取本地缓存文件,仅在达到interval设定的更新间隔时才重新拉取远程版本。这种机制确保在远程源不可用时仍能使用缓存的规则集,提高了配置的容错性。建议将path设为相对路径(如./ruleset/),并确保该目录存在且Clash进程有读写权限。若本地缓存文件损坏或需强制更新,删除对应缓存文件后重新加载配置即可触发重新下载。
在rules中引用Rule Set的方法
RULE-SET规则的编写格式
在主配置文件的rules字段中,通过RULE-SET规则类型引用已在rule-providers中声明的规则集。格式为RULE-SET,规则集名称,动作,例如RULE-SET,reject,REJECT表示将reject规则集中列出的所有域名请求直接拒绝。RULE-SET规则与其他规则类型共用同一个rules列表,遵循“从上到下、先命中先生效”的匹配顺序,因此需要合理规划RULE-SET规则在列表中的位置。
白名单模式与黑名单模式的规则顺序
社区维护的规则集通常提供白名单和黑名单两种推荐配置模板,两者的RULE-SET顺序安排直接影响分流效果。白名单模式(未匹配规则全部走代理)的推荐顺序为:RULE-SET,private,DIRECT(私有域名直连)→RULE-SET,reject,REJECT(广告拦截)→RULE-SET,icloud,DIRECT(iCloud直连)→RULE-SET,apple,DIRECT(苹果服务直连)→RULE-SET,proxy,PROXY(代理域名走代理)→RULE-SET,direct,DIRECT(国内域名直连)→GEOIP,CN,DIRECT(国内IP直连)→MATCH,PROXY兜底走代理。黑名单模式(仅匹配规则走代理)则将MATCH,DIRECT作为兜底,适用于代理节点线路质量不稳定或流量有限的场景。
自定义规则与RULE-SET的优先级安排
当同时使用自定义精确规则和外部RULE-SET时,应通过Merge功能或Parsers将自定义规则放在rules列表最前面,确保其优先级高于RULE-SET规则。例如用户希望DOMAIN-SUFFIX,special-site.com,PROXY优先匹配,则需将该规则放在RULE-SET,proxy,PROXY之前。自定义规则放在前面可覆盖RULE-SET中对同一域名的不同处理,实现个性化分流策略。若自定义规则放在RULE-SET后面,可能被RULE-SET中的宽泛规则提前匹配而失效。
订阅配置中Rule Provider的持久化
直接修改订阅配置会被覆盖
直接在订阅配置文件中添加rule-providers和RULE-SET声明,执行订阅更新时会被服务商的最新配置覆盖而丢失。这是因为订阅更新执行的是完整的配置文件替换操作,所有本地修改都会被抹去。若需要长期使用Rule Provider功能,必须使用Clash的Merge功能或Parsers预处理机制将rule-providers和RULE-SET声明叠加到订阅配置之上。
使用Merge功能叠加Rule Provider声明
在Clash Verge Rev中,通过“全局扩展配置(Merge)”功能可将rule-providers和RULE-SET声明叠加到订阅配置中。在Merge的YAML编辑框中添加完整的rule-providers字段声明和prepend-rules中的RULE-SET规则,保存后每次加载配置时自动合并到订阅配置中。Merge规则存储在独立文件中,不随订阅更新而被覆盖,从而实现Rule Provider配置的持久化。对于不同订阅配置,可使用不同的Merge配置,实现差异化的规则集管理。
Parsers预处理的配置方式
Clash的Parsers预处理机制同样可用于在订阅更新时将rule-providers声明插入到配置文件中。在Parsers配置中指定订阅链接和要添加的YAML内容,包括rule-providers字段和prepend-rules中的RULE-SET规则。每次执行订阅更新时,Parsers会在拉取订阅配置后将自定义内容合并到配置中,确保Rule Provider声明在配置加载前已就位。Parsers方式适合需要在多个订阅配置中复用同一套Rule Provider声明的用户,配置一次即可在所有订阅中生效。
常用社区规则集与最佳实践
Loyalsoldier/clash-rules规则集
Loyalsoldier/clash-rules是目前Clash社区最广泛使用的规则集之一,通过GitHub Actions每日自动构建,提供reject(广告拦截)、proxy(代理域名)、direct(直连域名)、private(私有域名)、apple(苹果服务直连)、telegramcidr(Telegram IP段)、cncidr(中国IP段)等分类规则集。该规则集同时提供YAML文本格式和mrs二进制格式,适用于不同性能需求的设备。用户可引用其中全部或部分规则集,构建白名单或黑名单模式的分流配置,无需自行维护庞大的规则列表。
选择合适的behavior类型
引用社区规则集时,需根据规则集文件的实际内容选择正确的behavior类型。域名列表类型的规则集(如reject.txt、proxy.txt、direct.txt)应使用behavior: domain,IP段列表类型(如cncidr.txt、telegramcidr.txt)应使用behavior: ipcidr,混合类型(如applications.txt)则使用behavior: classical。错误指定behavior类型会导致规则匹配失效,例如将IP段规则集设为domain类型,Clash会尝试将IP地址作为域名进行匹配,导致所有规则都无法命中。
白名单与黑名单模式的场景选择
白名单模式(MATCH,PROXY兜底)适合代理节点线路质量稳定、流量充足的用户,所有未匹配的境外流量默认走代理,分流覆盖更全面。黑名单模式(MATCH,DIRECT兜底)适合节点线路不稳定或流量有限的用户,仅明确列出的域名走代理,未匹配流量直连,可避免不必要的代理流量消耗。硬路由用户通常偏好黑名单模式以减少代理流量对家庭网络的负载,而桌面端用户多选择白名单模式以最大化网络可达性。
常见问题FAQ
Rule Provider和直接在rules中写规则有什么区别?
Rule Provider将规则集放在外部文件中独立管理,主配置文件仅保留引用声明,降低了主文件体积和加载耗时。外部规则集支持自动更新(通过interval参数),社区维护的规则集每日自动构建,用户无需手动维护规则列表。直接在rules中写规则需要用户自行维护每条规则,规则数量增多时配置臃肿且难以更新。
订阅配置中能使用Rule Provider吗?
能,但需通过Merge或Parsers方式叠加声明,直接在订阅配置中添加会被订阅更新覆盖。在Clash Verge Rev的Merge功能中添加rule-providers和prepend-rules的RULE-SET声明,或在Parsers中配置预处理规则,可将Rule Provider配置永久保留在订阅配置之上。
behavior: domain和behavior: ipcidr有什么区别?
behavior: domain用于域名列表格式的规则集,每条记录为域名后缀,Clash按域名匹配。behavior: ipcidr用于IP段列表格式的规则集,每条记录为CIDR格式的IP段,Clash按目标IP匹配。社区规则集的reject.txt、proxy.txt等为域名列表,cncidr.txt等为IP段列表,需根据规则集内容选择正确的behavior类型。
Rule Provider规则不生效,怎么排查?
检查rule-providers声明中type和url是否正确,确认path目录存在且可写。在Clash日志中查看规则集下载和加载情况,若下载失败可尝试更换CDN地址。确认rules中的RULE-SET引用的名称与rule-providers中声明的名称完全一致。若使用订阅配置,确认Rule Provider声明未在订阅更新后被覆盖,检查Merge或Parsers配置是否已正确叠加。