Appearance
分流规则集维护与自动化更新指南:Rule-Provider 机制、二进制格式与防膨胀策略 (2026)
现代互联网的架构是高度动态演进的。各大跨国云服务商(如 AWS、Cloudflare、Google Cloud)的 IP 地址池每周都在频繁轮换,主流流媒体网站更是随时新增专有 CDN 节点。如果仅仅依靠在配置文件中手工编写几十行固定的静态规则,往往不出数周就会出现部分海外网站无法加载或国内视频走代理的失效现象。
为了解决这一难题,现代网络核心普遍引入了 外部规则集提供者(Rule-Provider / Rule-Set) 架构。客户端能够定期从远程公共仓库拉取最新的标准化规则集合并在内存中动态热加载。
但随之而来的新问题是规则集膨胀。盲目引入包含数十万条无用广告域名的庞大列表,会直接导致路由器与手机客户端内存暴涨甚至触发系统级 OOM(Out of Memory)闪退。
本指南将带你从规则集架构选型出发,掌握二进制规则编译技术与自动化维护流水线的构建法则。
独立第三方声明与客观中立原则
一、主流规则集格式全维度性能对比
下表汇总了目前主流代理引擎采用的规则存储格式与性能开销:
| 规则集格式 | 承载文件类型 | 内存解析机制 | 10万条规则解析耗时 | 内存常驻占用 | 适用客户端 |
|---|---|---|---|---|---|
| 传统文本 YAML | .yaml / .txt | 用户态逐行文本正则扫描 | ~1200 ms | ~95 MB | 老版 Clash、Surge |
| MRS 二进制格式 | .mrs (Mihomo 专有) | 内存预编译紧凑映射 | ~45 ms | ~18 MB | Clash Verge Rev (Meta 内核) |
| SRS 二进制格式 | .srs (Sing-box 专有) | Protobuf 序列化直接反序列化 | ~25 ms | ~12 MB | Sing-box 核心全平台 |
从实测数据可以清晰看出:将纯文本规则预先编译为二进制格式(MRS 或 SRS),能够将启动解析耗时缩短 90% 以上,并节省高达 80% 的内存开销。这对于硬件配置有限的家用软路由和移动手机设备至关重要。
二、生产环境 Rule-Provider 规范配置实战
在 Clash 体系中,通过合理使用 rule-providers 声明外部规则,能够保持主配置文件的极简与整洁。
以下是一份经过工业级验证的高性能配置范本:
yaml
rule-providers:
# 1. 拦截广告与恶意追踪 (域名型规则,行为模式为 domain)
reject-list:
type: http
behavior: domain
url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400 # 每 24 小时自动后台热更新一次
# 2. 直连国内知名网站与直连域名
direct-list:
type: http
behavior: domain
url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
# 3. 必须走代理的海外知名网站集合
proxy-list:
type: http
behavior: domain
url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
# 4. 中国大陆 IP 地址段 (IP 型规则,行为模式必须为 ipcidr)
cn-cidr:
type: http
behavior: ipcidr
url: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400
rules:
# 规则引用:自上而下匹配
- RULE-SET,reject-list,REJECT
- RULE-SET,proxy-list,PROXY
- RULE-SET,direct-list,DIRECT
- RULE-SET,cn-cidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,PROXY三、基于 GitHub Actions 的自动化编译流水线
对于极客用户,无需忍受公共 CDN 的拉取波动,可以借助 GitHub Actions 免费算力每天自动构建专属的二进制规则包。
工作流核心自动化步骤如下:
yaml
name: Compile Binary RuleSets
on:
schedule:
- cron: '0 18 * * *' # 每天凌晨 2 点自动触发
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码与安装编译器
uses: actions/checkout@v4
- name: 下载最新 Sing-box 编译器
run: |
curl -Lo sing-box.tar.gz https://github.com/SagerNet/sing-box/releases/latest/download/sing-box-linux-amd64.tar.gz
tar -xzf sing-box.tar.gz --strip-components=1
- name: 将文本源文件编译为二进制 SRS
run: |
./sing-box rule-set compile --output direct.srs direct.json
./sing-box rule-set compile --output proxy.srs proxy.json
- name: 发布至 GitHub Releases 供各端无感调用
uses: softprops/action-gh-release@v1
with:
files: |
*.srs四、规则集防膨胀与内存守护规范
在维护和订阅规则集时,切记遵循以下三大安全法则:
- 拒绝盲目叠加多套去广告规则: 许多开源去广告规则集往往收录了超过 15 万条早已失效的老旧网站域名。在客户端中堆叠 3 套去广告规则会导致内存激增 200 MB 以上,而在实际浏览中真正能命中的不足 1%。推荐使用经过社区高频清洗的轻量精简版规则。
- 严格区分 behavior 行为模式: 在 Clash 中,如果规则集内部全部是纯域名,
behavior必须严格声明为domain;如果包含特定 IP 地址块,必须声明为ipcidr。如果混用或声明为全功能的classical,内核将无法对域名进行 Trie 字典树优化索引,导致 CPU 匹配性能下降数倍。 - 设定合理的本地缓存更新间隔: 将
interval设定为小于 43200 秒(12 小时)毫无技术意义,反而会频繁消耗本地网络电量并对开源托管服务器造成无谓的流量轰炸,建议将拉取周期固定为 24 小时(86400 秒)。