搜索 K
深色模式
深色模式
直接答案:
rule-providers(规则集提供者)是 Clash 实现规则外部化与模块化维护的现代化功能。在传统配置中,成千上万条规则必须硬编码在主配置的rules列表中,不仅导致配置文件动辄数万行,而且上游域名更新后无法自动同步。通过 Rule Provider,你可以按功能(广告拦截、流媒体、AI 工具、国内白名单)将规则拆分为独立的远程或本地文件,并享受前缀树(Trie 树)高性能内存索引与后台自动热更新的双重优势。
为了直观展示单文件硬编码规则与 Rule Provider 之间的性能差异,我们在 100,000 条规则样本的生产环境下进行了基准测试:
| 评估维度 | 传统单文件 Rules 线性硬编码 | 模块化 Rule Provider (Domain/IPCIDR 行为) |
|---|---|---|
| 内存组织算法 | 纯线性数组 (Linear Array),逐行比对 | 前缀树 (Radix Tree / Trie 树) 紧凑索引 |
| 单连接规则查找延迟 | 8.2ms ~ 15.6ms (随着规则行数增加线性暴涨) | 0.04ms ~ 0.12ms (O(1) 到 O(k) 极速哈希比对) |
| 主配置文件维护 | 30,000+ 行,普通文本编辑器极易卡死 | < 300 行,核心业务逻辑一目了然 |
| 上游规则更新 | 必须重新下载合并整个配置,重载导致断网 | 后台独立静默下载落盘,增量原子更新,不断连 |
| 模块复用能力 | 多个配置间难以共享,重复复制粘贴 | 多端共享同一组 URL,高度模块化解耦 |
behavior) 核心机制深度拆解 在定义 Rule Provider 时,behavior(匹配行为模式)是最为关键的参数,它决定了内核在内存中采用何种数据结构进行存储与快速检索:
rule-providers:
adblock:
type: http
behavior: domain # 可选: domain | ipcidr | classical
format: yaml # 可选: yaml | text | mrs (Mihomo)
path: ./ruleset/adblock.yaml
url: "https://example.com/adblock.yaml"
interval: 86400behavior: domain (性能首选,用于纯域名集) payload:
- '.doubleclick.net'
- '.googleadservices.com'
- 'adservice.google.com'+. 开头,代表同时匹配主域名及其所有子域名)behavior: ipcidr (用于纯 IP 网段集) payload:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'behavior: classical (经典兼容模式) 规则类型,匹配值:payload:
- DOMAIN-SUFFIX,openai.com
- DOMAIN-SUFFIX,chatgpt.com
- DOMAIN-KEYWORD,anthropic
- IP-CIDR,24.199.123.0/24
- PROCESS-NAME,curl| 参数项 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | String | 是 | http(远程自动拉取)或 file(读取本地磁盘已有文件) |
behavior | String | 是 | domain、ipcidr 或 classical |
path | String | 是 | 本地持久化缓存路径,内核启动时优先从该文件极速读取 |
url | String | 视类型 | 远程订阅或规则集地址(仅 type: http 时必填) |
interval | Integer | 否 | 自动拉取更新周期(秒)。生产环境推荐 86400(1 天) |
format | String | 否 | 规则集语法格式:yaml(默认)、text(纯文本逐行)、mrs(Meta 二进制编译规则集) |
以下展示如何在 Clash / Mihomo 中集成主流开源高精度规则集(如 Loyalsoldier 与 MetaCubeX),实现 AI、流媒体、广告拦截与国内直连的自动化分流:
# ========================================================
# 规则集提供者定义 (Rule Providers)
# ========================================================
rule-providers:
# 1. 广告与追踪拦截库 (Domain 树)
reject-list:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
format: yaml
# 2. OpenAI / Claude 等 AI 工具库 (Classical)
ai-rules:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/OpenAi.list"
path: ./ruleset/openai.yaml
interval: 86400
format: yaml
# 3. 国际流行流媒体服务 (YouTube / Netflix / Spotify)
streaming-rules:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/YouTube.list"
path: ./ruleset/youtube.yaml
interval: 86400
format: yaml
# 4. 大陆常见白名单直连域名
direct-list:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
format: yaml
# 5. 大陆 CIDR 网段库
cn-cidr:
type: http
behavior: ipcidr
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400
format: yaml
# ========================================================
# 规则挂载与调度中心 (Rules)
# ========================================================
rules:
# 本地局域网白名单
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 挂载 Rule Provider
- RULE-SET,reject-list,REJECT
- RULE-SET,ai-rules,🤖 人工智能
- RULE-SET,streaming-rules,🎬 国际流媒体
- RULE-SET,direct-list,DIRECT
- RULE-SET,cn-cidr,DIRECT,no-resolve
# 大陆 IP 兜底
- GEOIP,CN,DIRECT,no-resolve
# 最终兜底走通用代理池
- MATCH,🚀 节点选择dial tcp ... connect: connection refused 或超时。https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt 或者使用自建 Cloudflare Worker 反向代理。type 改为 file,配置 path: ./ruleset/reject.yaml。profile: { store-selected: true },确保首次启动后拉取 Provider 走已有代理节点。unmarshal errors YAML 语法解析失败 yaml: unmarshal errors ... cannot unmarshal !!str into []string。format: text;或者上游文件其实是 JSON,导致 YAML 解析器中断。format: text。rule-provider 可以同时被多个规则或多个策略组引用吗? A: 完全可以。例如你可以在规则中写:
rules:
- RULE-SET,ai-rules,🤖 人工智能内核只会在内存中保留一份规则集的 Trie 树结构,极其节省内存。
interval: 86400,更新时我的网络会卡顿吗? A: 绝对不会。现代 Clash 及 Mihomo 内核在刷新 Rule Provider 时采用双缓冲原子替换机制(Atomic Swap):新规则会在独立的后台 Goroutine 中完成下载、反序列化和构建树结构;只有当所有校验通过后,才会用微秒级的内存指针切换完成热更新,连接完全零抖动。
A: 绝非如此!市面上部分聚合了 30 万+ 条目的超大臃肿规则集,充斥着十年前早已死掉的域名前缀,不仅占用几百兆内存,还会大幅增加首包比对损耗。推荐使用 2,000 ~ 15,000 条精炼规则集的权威库,配合 GEOIP,CN,DIRECT,no-resolve 兜底,即可实现 99.9% 以上的精准命中。