从零开始:使用 RULE‑SET 构建自动更新的分流体系
🤔 传统规则写法有什么问题?
在 Clash 配置中,最常见的规则格式是直接在 rules 列表里逐条书写:
这种写法有几个痛点:
- 维护成本高:每新增或删除一个域名都要手动编辑配置文件,尤其是 AI、流媒体这类频繁更新域名的场景。
- 配置文件臃肿:规则数量可能达到数百条,导致
config.yaml难以阅读,也拖慢内核解析速度。 - 跨设备同步困难:如果你在多台电脑上使用同一个配置,每次更新规则都需要手动同步。
- 无法协作:社区中其他人总结好的优秀规则集,你无法直接引用。
RULE‑SET 正是为了解决这些问题而设计的。它将规则独立出来,存放于单独的 YAML 文件中,支持从远程 URL 拉取、本地文件引用或内联定义,并支持定时自动更新。
📌 RULE‑SET 的三种获取方式
在 Mihomo 内核(Clash Verge Rev 内核)中,RULE‑SET 通过 rule-providers 字段定义。目前支持三种来源:
| 类型 | 配置示例 | 适用场景 |
|---|---|---|
http | 从远程 URL 下载规则集 | 使用社区维护的公共规则集 |
file | 引用本地文件路径 | 团队内部共享的私有规则集 |
inline | 直接在配置中定义规则 | 少量规则、无需外部文件 |
通常我们优先使用 http 类型,借助社区力量实现“一次配置,永久自动更新”。
🌐 远程订阅:接入社区规则集
Clash Verge Rev 项目维护了一套面向 AI 服务、流媒体、广告拦截等场景的规则集。你只需在配置文件中添加 rule-providers 声明,并在 rules 中引用即可。
步骤一:声明规则提供者
步骤二:在规则中引用
rules 中的书写顺序。建议将 AI、流媒体等特定规则放在 GEOIP 和 MATCH 之前,确保它们优先匹配。
首次启动或重启时,Mihomo 内核会根据 url 下载规则集文件到 path 指定的位置,并按照 interval 定期检查更新。下载失败时,会自动使用上次缓存的文件,不会影响代理功能。
📁 本地规则集:私有化定制
如果你不希望依赖外部 URL,或者需要维护公司内部的私有规则,可以使用 file 类型。
本地规则集文件的内容格式与 rules 片段相同,例如:
这种方式适合统一管理多台设备的规则,只需将 path 指向同一份共享文件(如 NAS 或版本控制仓库)。
⚙️ behavior 参数:经典 vs IPCIDR vs DOMAIN
behavior 决定了规则集的匹配模式和预期内容格式。选择正确的 behavior 可避免内核解析错误,并优化匹配效率。
| behavior | 描述 | 支持的规则类型 |
|---|---|---|
classical | 经典格式,每行一条完整的规则 | DOMAIN-SUFFIX, DOMAIN, DOMAIN-KEYWORD, GEOIP, IP-CIDR 等 |
ipcidr | 纯 IP-CIDR 格式,每行一个 IP 段 | IP-CIDR |
domain | 纯域名格式,每行一个域名 | DOMAIN-SUFFIX(默认)或 DOMAIN |
大多数社区规则集使用 classical,因为它最灵活,可以混合多种规则类型。如果你的规则集只包含域名,使用 domain 能获得更快的加载速度。
🧩 高级组合策略:多规则集叠加与覆盖
你可以同时定义多个 RULE‑SET,它们会按照 rules 中的顺序依次匹配。例如,使用社区 AI 规则集,同时用本地规则集覆盖某些特殊需求:
这样,本地规则集中的条目会优先匹配,未命中的流量再交由社区规则集处理,实现灵活的个性化定制。
⚡ 性能优化与缓存机制
大量规则集可能影响内核的启动速度。Mihomo 内核采用增量解析与压缩存储,即使总规则数达到上万条,启动时间通常也仅增加 200~500 毫秒。此外:
- 预编译缓存:首次加载后,规则集会被编译为内部哈希表并缓存,后续启动无需重新解析文件。
- 按需下载:
interval参数控制更新频率,内核仅在本地缓存过期后才发起网络请求,不会造成额外流量负担。 - 内存控制:对于内存敏感的设备,可启用
geodata-mode: memconservative并减小规则集的规模。
🔧 验证与故障排查
1. 确认规则集加载成功
打开 Clash Verge Rev 的“日志”面板,搜索 RULE-SET,你应该能看到类似以下的日志:
2. 检查规则是否生效
在“连接”面板中,访问一个已知的 AI 网站(如 chatgpt.com),观察匹配到的规则。如果显示 MATCH 或 GEOIP,说明 RULE‑SET 未生效。请检查:
- 规则集文件是否已下载到
path目录 rules中的引用格式是否为RULE-SET,<provider-name>,<policy>- 规则集是否位于
MATCH之前
3. 手动更新规则集
如果不想等待 interval 触发,可以在客户端设置中点击“刷新规则集”,或手动删除 path 下的缓存文件后重启客户端。
🏁 总结
RULE‑SET 让 Clash Verge Rev 的规则管理从“石器时代”迈入“自动化时代”。通过远程订阅社区维护的规则集,你的分流配置将始终紧跟变化,无需手动干预;通过本地文件引用,你又能保留高度的定制空间。本文介绍的配置方法可以直接应用到你的 config.yaml 中,立即体验规则自动更新的便利。
如果你有好的规则集想分享给社区,欢迎在 GitHub 仓库提交 PR,或通过讨论区与我们交流。让规则维护这件事,彻底成为过去式。