跳到主要内容

首页 / 博客 / 规则分流

rule-providers 远程规则集:behavior、format 与更新策略

规则分流2026-07-211700 字约 4 分钟
rule-providers 远程规则集:behavior、format 与更新策略

手写几百条 DOMAIN-SUFFIX 规则不现实,也没法跟上网站变化。rule-providers 让你引用外部维护的规则列表,定期自动更新。

基本结构

分两步:先定义 provider,再在 rules 里引用。

rule-providers:
  cn-domain:
    type: http
    behavior: domain
    format: text
    url: "https://example.com/rules/cn-domain.txt"
    path: ./ruleset/cn-domain.txt
    interval: 86400
    proxy: DIRECT

rules:
  - RULE-SET,cn-domain,DIRECT
  - MATCH,PROXY

字段逐个说

字段取值说明
typehttp / file / inline远程、本地文件、或直接内联
behaviordomain / ipcidr / classical必须和文件内容匹配
formattext / yaml / mrs文件格式
url规则文件地址type 为 http 时必填
path本地缓存路径相对于配置目录
interval更新间隔,86400 = 一天
proxy策略名用哪条线路去下载规则文件

behavior:三种类型不能混用

这是最容易出错的地方——behavior 写错了不会报错,规则只是静默失效

三种 behavior 对应的文件内容domain纯域名列每行一个域名或 +.域名不能含 IP 或规则类型最常用ipcidr纯 IP 段每行一个 CIDR不能含域名classical完整规则每行是「类型,内容」可混合各种类型最灵活但最慢
拿到一个规则文件,先打开看内容长什么样,再决定 behavior

domain

文件内容长这样:

google.com
+.youtube.com
www.github.com

+. 前缀等价于 DOMAIN-SUFFIX(含所有子域名),不带前缀是精确匹配。

ipcidr

1.0.1.0/24
8.8.8.8/32
2001:4860::/32

classical

DOMAIN-SUFFIX,google.com
DOMAIN-KEYWORD,youtube
IP-CIDR,8.8.8.8/32,no-resolve
PROCESS-NAME,Telegram.exe

注意:classical 文件里不写策略名,策略由引用它的那条 RULE-SET 决定。

format:text、yaml 与 mrs

text:纯文本,每行一条,# 开头是注释。最常见。

yaml

payload:
  - google.com
  - "+.youtube.com"

mrs:Mihomo 特有的二进制格式,体积小、加载快。只支持 domainipcidr 两种 behavior,不支持 classical。

三种格式的加载开销(同一份十万条域名列表的相对量级)mrs 二进制最快,内存占用最低text 纯文本解析耗时中等yaml需要完整 YAML 解析规则集条目少时差别可忽略;上万条时 mrs 优势明显

规则集很大(几万条以上)时优先用 mrs 版本,如果规则源提供的话。

interval:更新间隔怎么设

规则集类型建议 interval
国内域名/IP 列表86400(一天)
广告拦截列表86400
流媒体解锁列表43200(半天)
自己维护的小列表3600 或更长

设太短没意义——这些列表一天也更新不了几次,反而给规则托管方增加压力。

完整实战配置

一套覆盖常见需求的规则集组合:

rule-providers:
  # 广告拦截
  reject:
    type: http
    behavior: domain
    format: text
    url: "https://example.com/reject.txt"
    path: ./ruleset/reject.txt
    interval: 86400
    proxy: DIRECT

  # 国内域名直连
  direct:
    type: http
    behavior: domain
    format: text
    url: "https://example.com/direct.txt"
    path: ./ruleset/direct.txt
    interval: 86400
    proxy: DIRECT

  # 需要代理的域名
  proxy:
    type: http
    behavior: domain
    format: text
    url: "https://example.com/proxy.txt"
    path: ./ruleset/proxy.txt
    interval: 86400
    proxy: DIRECT

  # 国内 IP 段
  cncidr:
    type: http
    behavior: ipcidr
    format: text
    url: "https://example.com/cncidr.txt"
    path: ./ruleset/cncidr.txt
    interval: 86400
    proxy: DIRECT

  # 本机/内网
  lancidr:
    type: http
    behavior: ipcidr
    format: text
    url: "https://example.com/lancidr.txt"
    path: ./ruleset/lancidr.txt
    interval: 86400
    proxy: DIRECT

rules:
  - RULE-SET,lancidr,DIRECT,no-resolve
  - RULE-SET,reject,REJECT
  - RULE-SET,proxy,🚀 节点选择
  - RULE-SET,direct,DIRECT
  - RULE-SET,cncidr,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,🐟 漏网之鱼

注意顺序:内网 → 拦截 → 代理 → 直连 → IP 段 → 地理兜底 → MATCH

代理列表放在直连列表前面,是因为有些域名会同时出现在两个列表里,代理优先更符合预期。

inline:直接内联小规则集

不想为几条规则单独建文件:

rule-providers:
  my-work:
    type: inline
    behavior: domain
    payload:
      - "+.mycompany.com"
      - "+.internal.corp"
      - "gitlab.internal"

file:使用本地文件

自己维护的规则放本地:

rule-providers:
  personal:
    type: file
    behavior: classical
    path: ./ruleset/personal.list

配合 interval 可以让内核定期重读文件(部分版本支持)。改完文件后重载配置最稳妥。

规则集不生效时怎么查

排查顺序检查 behavior 与文件内容是否匹配(最常见的错误)检查 path 指向的文件是否真的下载下来了日志里搜 provider 关键字,看有没有下载失败url 在浏览器里能直接打开吗规则集在 rules 里的位置是否被前面的规则截胡了MATCH 是不是被误放到了 RULE-SET 前面

看缓存文件

path 指定的文件就在配置目录下,直接打开看:

  • 文件不存在 → 下载失败,检查 url 和 proxy 设置
  • 文件内容是 HTML → url 返回的是网页(比如 404 页面),地址写错了
  • 文件内容正常但规则不生效 → behavior 不匹配

Windows 上配置目录一般在:

%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\

看日志

把日志级别切到 debug,搜索 provider 名称,能看到下载和加载的完整过程:

INFO Start initial provider cn-domain
INFO Provider cn-domain loaded, 12043 rules

看到 loaded, N rules 说明加载成功了。如果 N 是 0,就是 behavior 或格式问题。

性能考虑

大规则集的资源占用1内存每万条域名规则约占用几 MB,十万条量级需要留意2首次加载需要下载并解析,会让启动慢几秒3匹配耗时domain 类用后缀树,接近 O(1);classical 是逐条比对,慢很多4建议优先用 domain

如果你的规则集加起来超过十万条,且设备性能有限(软路由、老手机),考虑:

  • 换用 mrs 格式
  • 删掉用不到的规则集(比如你不看的流媒体平台)
  • GEOSITE 代替部分域名列表(内核内置数据库,无需额外下载)

小结

  • behavior 必须和文件内容对应,写错了静默失效
  • IP 类规则集引用时加 no-resolve
  • 给 provider 加 proxy 字段,避免更新失败
  • 规则集顺序:内网 → 拦截 → 代理 → 直连 → IP → GEOIP → MATCH
  • 不生效时先看 path 里的缓存文件长什么样

下一篇是实战:公司内网 + 国内直连 + 海外代理的三方共存配置


相关文档

用 PROCESS-NAME 规则让指定程序单独走代理
规则分流 用 PROCESS-NAME 规则让指定程序单独走代理

按进程分流的完整写法:find-process-mode 怎么开、进程名怎么查、PROCESS-NAME 与 PROCESS-PATH 的区别、性能开销,以及为什么规则写了不生效。

2026-06-221765 字约 4 分钟