Clash Meta (Mihomo) 规则集 (Rule Providers) 配置实操:自动同步与热重载高级分流规则

一、传统内嵌规则的弊端与规则集的优势

在早期的 Clash 配置文件中,所有的分流判断都直接堆砌在 `rules:` 列表中。随着国内常见域名、流媒体解锁列表、去广告规则越来越丰富,一个配置文件的行数往往突破上万行,导致:

  • 配置文件体积臃肿,文本编辑器打开极其卡顿;
  • 规则无法随社区的更新而自动迭代,一旦某个平台变更了域名,就会发生分流失效;
  • 多个订阅配置之间无法共享同一套规则逻辑。

Clash Meta (Mihomo) 引入的 Rule Providers(规则集供应商) 彻底解决了这个痛点:它允许将分流规则独立存放在外部文件或云端仓库中,内核按需拉取、独立缓存并自动定期热重载。

Clash Meta 配置文件 rule-providers 远程规则集代码编写
Clash Meta 配置文件 rule-providers 远程规则集代码编写

二、rule-providers 的核心语法与参数定义

在 Mihomo 配置文件的顶层结构中,新增 `rule-providers:` 模块定义:

rule-providers:
  # 广告拦截规则集
  reject_ads:
    type: http
    behavior: domain            # 规则类型:domain、classical 或 ipcidr
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
    path: ./ruleset/reject.yaml # 本地缓存路径
    interval: 86400             # 更新周期:86400秒(每24小时自动拉取一次)

  # 常用流媒体规则集
  media_proxy:
    type: http
    behavior: classical
    url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/Streaming.list"
    path: ./ruleset/streaming.yaml
    interval: 86400

  # 国内直连 IP 规则集
  china_ip:
    type: http
    behavior: ipcidr
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400

参数解析:

  • behavior (判定行为):
  • `domain`:纯域名列表,匹配性能最高,内存占用最小。
  • `ipcidr`:专门用于判定 IPv4/IPv6 网段。
  • `classical`:经典混合规则列表(可同时包含 DOMAIN-SUFFIX、IP-CIDR 等多种指令)。
  • interval:自动从云端检查更新的间隔时间(单位为秒)。设置为 86400 即每天自动静默更新。

三、在 rules 列表中调用规则集

定义好 provider 之后,在底部的 `rules:` 字段中只需要用一行简短的 `RULE-SET` 语法进行引用:

rules:
  # 1. 拦截广告
  - RULE-SET,reject_ads,REJECT

  # 2. 流媒体走专用出站策略组
  - RULE-SET,media_proxy,流媒体专线

  # 3. 国内 IP 走直连
  - RULE-SET,china_ip,DIRECT

  # 4. 其余兜底流量走全局代理
  - MATCH,节点选择

这样原本几万行的庞大配置文件,被精简到了几十行,逻辑一目了然。

四、本地缓存机制与离线容灾

很多用户担心:“如果规则集的远程 GitHub 链接暂时断开了,会导致客户端无法上网吗?”

答案是不会。Mihomo 在首次拉取远程规则集后,会自动将其编译保存在 `path` 指定的本地目录(如 `./ruleset/`)。即使后续遇到断网或 GitHub 连接超时,内核会平滑读取本地已有缓存,不会导致客户端崩溃或分流报错。