订阅转换模板怎么写?subconverter 外部配置(ini)的 ruleset 与 custom_proxy_group 详解
用订阅转换时选的“远程配置”或“模板”,比如 ACL4SSR_Online.ini,在 subconverter 里叫外部配置。它决定转换出来的 Clash 配置里有哪些策略组、每条规则指向哪个组。本文按 subconverter 的中文文档和 ACL4SSR 的原文件讲清楚它的写法。subconverter 后端怎么部署,见本站的 subconverter 搭建教程。
外部配置是怎么被调用的#
subconverter 的转换接口是:
http://127.0.0.1:25500/sub?target=clash&url=订阅链接&config=外部配置地址
config 参数填外部配置文件的网址,和 url 一样要经过 URLEncode。文档写明:外部配置里定义的值会覆盖主程序目录里配置文件的同名内容;不传 config 时就用主程序目录里的配置。
所以写一份外部配置,放在任何能访问到的位置(GitHub、Gist 等),再把地址填进 config,就是一份自己的“订阅转换模板”。
拆开 ACL4SSR_Online.ini#
下面是 ACL4SSR 仓库里 Clash/config/ACL4SSR_Online.ini 的结构(有删节):
[custom]
;不要随意改变关键字,否则会导致出错
ruleset=🎯 全球直连,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list
ruleset=🛑 全球拦截,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanAD.list
ruleset=📲 电报信息,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Telegram.list
ruleset=🚀 节点选择,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyLite.list
ruleset=🎯 全球直连,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaDomain.list
ruleset=🎯 全球直连,[]GEOIP,CN
ruleset=🐟 漏网之鱼,[]FINAL
custom_proxy_group=🚀 节点选择`select`[]♻️ 自动选择`[]DIRECT`.*
custom_proxy_group=♻️ 自动选择`url-test`.*`http://www.gstatic.com/generate_204`300,,50
custom_proxy_group=📲 电报信息`select`[]🚀 节点选择`[]🎯 全球直连`.*
custom_proxy_group=🎯 全球直连`select`[]DIRECT`[]🚀 节点选择`[]♻️ 自动选择
custom_proxy_group=🛑 全球拦截`select`[]REJECT`[]DIRECT
custom_proxy_group=🐟 漏网之鱼`select`[]🚀 节点选择`[]🎯 全球直连`[]♻️ 自动选择`.*
enable_rule_generator=true
overwrite_original_rules=true
文件分三块:ruleset 定义规则,custom_proxy_group 定义策略组,最后两行是开关。
ruleset:规则指向哪个组#
格式(据 subconverter 文档):
ruleset=策略组名,[类型:]规则地址[,更新间隔]
ruleset=策略组名,[]规则
- 策略组名必须和下面某个
custom_proxy_group的名字完全一致,包括 emoji。ACL4SSR 文件开头的“不要随意改变关键字”指的就是这个。 - 规则地址可以是网址,也可以是 subconverter 本地的文件路径。
- 类型可选
surge、quanx、clash-domain、clash-ipcidr、clash-classic,不写时默认按surge解析。ACL4SSR 的.list文件不写类型就能用。 []前缀表示后面是一条规则本身,不是地址。常用的是[]GEOIP,CN和[]FINAL(文档说明[]MATCH等同于[]FINAL),后者就是兜底规则。
转换时 subconverter 把每个规则列表展开成一条条规则,加上策略组名写进配置,顺序和 ruleset 的顺序一致。规则从上到下匹配,所以 ruleset 的顺序就是最终的匹配优先级。
custom_proxy_group:策略组怎么生成#
格式(据 subconverter 文档):
custom_proxy_group=组名`select`条件1`条件2`...
custom_proxy_group=组名`url-test|fallback|load-balance`条件1`条件2`...`测速地址`间隔[,超时][,容差]
各段用反引号 ` 分隔。条件有两种:
[]开头:直接引用一个策略组或DIRECT、REJECT,例如[]♻️ 自动选择。- 其他:按节点名做正则匹配,
.*表示所有节点,(美国|US)表示名字里含“美国”或“US”的节点。
测速类策略组最后两段是测速地址和 间隔,超时,容差。ACL4SSR 的 300,,50 表示每 300 秒测一次、超时留空不设、容差 50 毫秒(文档示例 300,,100 的注释也只写了间隔和容差)。四种策略组类型的区别,见本站的 Clash 策略组类型。
文档还给了几个进阶筛选写法,例如:
custom_proxy_group=🇯🇵 日本延迟最低`url-test`(日|JP)`http://www.gstatic.com/generate_204`300,5
custom_proxy_group=节点选择`select`(^(?!.*(美国|日本)).*)
custom_proxy_group=g1`select`!!GROUPID=0
最后一行的 !!GROUPID=0 表示“第一条订阅链接里的节点”,适合同时转换多个订阅时分开放组。
最后两行开关#
enable_rule_generator=true:用上面的ruleset生成规则。subconverter 源码里,这项为 true 时才会把规则集写进 Clash 配置。overwrite_original_rules=true:覆盖基础配置(clash_rule_base)里原有的规则,只用这份外部配置的规则。
改出自己的模板#
一个常见需求是给 ChatGPT 之类的服务单独建一个组。按上面的格式,只需要加一组 custom_proxy_group 和对应的 ruleset:
ruleset=🤖 AI 服务,https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/OpenAi.list
custom_proxy_group=🤖 AI 服务`select`[]🚀 节点选择`(美国|US)
要注意两点:
- 新的
ruleset要放在ProxyLite、ChinaDomain、[]GEOIP,CN和[]FINAL之前,不然请求会先被前面的规则命中。 - 规则地址要确认文件确实存在,文件名区分大小写。上面这个
OpenAi.list在 ACL4SSR 仓库里是存在的(注意是OpenAi,不是OpenAI)。
写好后上传到能公开访问的地址,转换时把 config 换成它即可。
常见问题
- 订阅转换的“远程配置”是什么?
- 它是 subconverter 的外部配置文件,通过 config 参数传入,决定转换结果里有哪些策略组、每条规则指向哪个组。外部配置的值会覆盖主程序目录里配置文件的同名内容。
- ruleset 里的策略组名有什么要求?
- 必须和某个 custom_proxy_group 的名字完全一致,包括 emoji。ACL4SSR 文件开头写的“不要随意改变关键字”指的就是这个。
- custom_proxy_group 里的 [] 是什么意思?
- [] 开头表示直接引用一个策略组或 DIRECT、REJECT;不带 [] 的条件按节点名做正则匹配,.* 表示所有节点。