ACL4SSR 教程

Clash 规则集(rule-providers)怎么用?behavior、format 写法与引用 ACL4SSR 规则列表

分类:Clash 配置更新于 约 6 分钟读完7 份官方资料
本文目录
  1. 一个最小例子
  2. 各字段怎么填
  3. behavior:三种内容格式
  4. 直接引用 ACL4SSR 的 .list
  5. 规则集下载失败怎么办
  6. 和订阅转换的关系
  7. 常见问题

规则集(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。

本站是非官方的学习笔记站,与 ACL4SSR 原项目维护者无隶属关系。文中引用的规则与文档版权归原作者所有。