Clash 规则集(rule-providers)怎么用?behavior、format 写法与引用 ACL4SSR 规则列表
规则集(rule-providers)是把一组规则放在单独的文件里,配置里用一条 RULE-SET 规则引用它。好处是规则列表可以由别人维护、定时自动更新,主配置也不会被几千条规则撑得很长。本文以 mihomo 内核(原 Clash.Meta)的官方文档为准。
一个最小例子#
rule-providers:
telegram:
type: http
behavior: classical
format: text
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Telegram.list"
path: ./ruleset/telegram.list
interval: 86400
rules:
- RULE-SET,telegram,PROXY
- MATCH,DIRECT
rule-providers 下面每一项的名字(这里是 telegram)就是规则集的名字,必须唯一,RULE-SET 用这个名字引用它。
各字段怎么填#
| 字段 | 说明(据官方文档) |
|---|---|
type |
必填,http(从网址下载)、file(本地文件)或 inline(直接写在配置里) |
url |
type 为 http 时必填 |
path |
可选,保存路径,不能重复;不写时用 url 的 MD5 作为文件名。出于安全考虑,只允许放在内核的 HomeDir 下 |
interval |
更新间隔,单位秒 |
proxy |
经过指定的代理或策略组下载、更新 |
behavior |
domain、ipcidr 或 classical,要和文件内容一致 |
format |
yaml、text 或 mrs,默认 yaml |
size-limit |
下载文件的最大字节数,默认 0 表示不限制 |
payload |
仅 type: inline 时生效,直接写规则内容 |
behavior:三种内容格式#
classical:每行是一条完整的规则(不带策略名),支持除 RULE-SET 和 SUB-RULE 以外的所有规则类型。
DOMAIN-SUFFIX,google.com
DOMAIN-KEYWORD,google
IP-CIDR,127.0.0.0/8
domain:每行只是一个域名,通配符按 Clash 的写法,如 .blogger.com、*.*.microsoft.com。
ipcidr:每行只是一个网段,如 192.168.1.0/24。
format: yaml 时内容写在 payload: 列表下;format: text 时就是纯文本,一行一条。mrs 是二进制格式,官方文档说明它目前只支持 domain 和 ipcidr,可以用 mihomo convert-ruleset 命令从 yaml 或 text 转换得到。
直接引用 ACL4SSR 的 .list#
ACL4SSR 仓库 Clash/ 目录下的 .list 文件,每行就是 DOMAIN-SUFFIX,t.me、IP-CIDR,91.108.0.0/16,no-resolve 这样的规则,开头还有 # 注释。这正好是 behavior: classical + format: text 的格式:
- mihomo 读取 text 格式时会跳过以
#开头的注释行(源码rules/provider/provider.go)。 - classical 规则集里的条目可以带
no-resolve这类参数(源码rules/common/base.go的ParseRulePayload会把第二个逗号之后的内容当作参数)。 - 解析失败的单条规则只会在日志里报警告并跳过,不会让整个规则集失效(源码
rules/provider/classical_strategy.go)。
所以引用多个 ACL4SSR 规则列表,可以这样写:
rule-providers:
LocalAreaNetwork:
type: http
behavior: classical
format: text
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list"
path: ./ruleset/LocalAreaNetwork.list
interval: 86400
BanAD:
type: http
behavior: classical
format: text
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanAD.list"
path: ./ruleset/BanAD.list
interval: 86400
ProxyLite:
type: http
behavior: classical
format: text
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyLite.list"
path: ./ruleset/ProxyLite.list
interval: 86400
ChinaDomain:
type: http
behavior: classical
format: text
url: "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaDomain.list"
path: ./ruleset/ChinaDomain.list
interval: 86400
rules:
- RULE-SET,LocalAreaNetwork,DIRECT
- RULE-SET,BanAD,REJECT
- RULE-SET,ProxyLite,PROXY
- RULE-SET,ChinaDomain,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
这里的 PROXY 要换成你配置里实际存在的策略组名。各个规则列表的用途见本站的 ACL4SSR 是什么。
顺序很重要。 规则从上到下匹配,命中即停止,所以直连的局域网规则和去广告规则一般放在最前面,MATCH 放在最后。
规则集下载失败怎么办#
raw.githubusercontent.com 在部分网络下直连不稳定,规则集第一次下载不下来,就拿不到规则内容。两个办法:
- 用
proxy字段让规则集经过代理下载,例如proxy: PROXY(填策略组名)。 - 先把文件放到
path指定的位置。内核启动时本地文件存在就先用它,之后再按interval定时更新(源码component/resource/fetcher.go)。
和订阅转换的关系#
subconverter 生成 Clash 配置时,默认会把规则全文写进配置(expand 参数默认 true)。设成 expand=false 时,按 subconverter 文档的说明,规则全文不会写进订阅;另有 classic=true 参数用于生成 Clash classical rule-provider。这两项的具体输出以所用的 subconverter 版本为准。
常见问题
- Clash 规则集(rule-providers)是什么?
- 规则集是把一组规则放在单独的文件里,配置里用一条 RULE-SET 规则引用它。规则列表可以由别人维护、按 interval 定时自动更新。
- ACL4SSR 的 .list 能直接当 rule-providers 用吗?
- 可以。ACL4SSR 的 .list 每行是一条完整规则,对应 behavior: classical、format: text。mihomo 读取 text 格式时会跳过 # 注释行,条目里的 no-resolve 参数也能识别。
- behavior 填 domain、ipcidr 还是 classical?
- 要和文件内容一致:每行只有域名填 domain,每行只有网段填 ipcidr,每行是完整规则(如 DOMAIN-SUFFIX,google.com)填 classical。