写一个 Clash 订阅模板:11 条规则和两个坑
它是什么
一份 ACL4SSR 格式的订阅转换模板,给 subconverter 或 OpenClash 用。
作用是在「机场订阅」和「最终配置」之间加一层:把机场给的节点,套上自己定义的规则和分组。
规模刻意压得很小——11 条规则、5 个分组,和 ACL4SSR 的 Mini 版对齐。
为什么不用现成的 Mini
ACL4SSR 官方 Mini 模板的规则长这样:
1
ruleset=🎯 全球直连,rules/ACL4SSR/Clash/GoogleCN.list
相对路径,依赖转换器本地存在 rules/ 目录。用公共转换服务没问题,自己部署 subconverter 的话经常缺文件,或者版本对不上。
这份模板把规则源换成 MetaCubeX/meta-rules-dat 的远程 YAML:
1
ruleset=🎯 全球直连,clash-domain:https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo/geosite/google-cn.yaml,86400
走 jsDelivr CDN,末尾的 86400 是缓存秒数。不依赖本地文件,也就不存在「找不到规则」这回事。
两个真实的坑
一、clash-ipcidr: 会导致 provider 撞名
直觉写法是国内 IP 段也走远程:
1
ruleset=🎯 全球直连,clash-ipcidr:.../geo/geoip/cn.yaml
但 subconverter 生成的 provider 名取自文件名。geosite/cn.yaml 和 geoip/cn.yaml 都叫 cn,两个 provider 重名,后一个会被前一个吞掉,规则静默失效。
所以 IP 段改用内联写法:
1
ruleset=🎯 全球直连,[]GEOIP,cn,no-resolve
[] 表示不引用外部 provider,no-resolve 避免对域名做无谓的 DNS 解析。一条搞定,也不会有命名冲突。
二、规则顺序决定成败
这几条必须排在 geosite/cn.yaml 之前:
1
2
ruleset=🎯 全球直连,clash-domain:.../geosite/google-cn.yaml,86400
ruleset=🎯 全球直连,clash-domain:.../geosite/steam@cn.yaml,86400
因为 cn.yaml 是个大集合,命中就直连。如果它排在前面,google-cn 这类「国内可直连的境外服务」会先被 cn 吃掉,行为看着一样,但你想单独调整时已经没有机会了。
规则匹配是从上到下的,越具体的越靠前,这是这类模板的通用原则。
规则结构
| 顺序 | 规则 | 去向 | 说明 |
|---|---|---|---|
| 1 | geosite/private + GEOIP,private | 🎯 全球直连 | 局域网 |
| 2 | category-ads-all | 🛑 全球拦截 | 广告 |
| 3 | tracker | 🛑 全球拦截 | 跟踪器 |
| 4 | google-cn | 🎯 全球直连 | 国内可达的 Google 服务 |
| 5 | steam@cn | 🎯 全球直连 | Steam 国区 |
| 6 | telegram | 🚀 节点选择 | 单列,方便单独切出口 |
| 7 | geolocation-!cn | 🚀 节点选择 | 其余境外 |
| 8 | cn | 🎯 全球直连 | 国内大集合 |
| 9 | GEOIP,cn | 🎯 全球直连 | IP 兜底 |
| 10 | FINAL | 🐟 漏网之鱼 | 未命中 |
分组只有五个:节点选择、自动选择、全球直连、全球拦截、漏网之鱼。
一处精简取舍
ACL4SSR Mini 里 ProxyMedia 和 ProxyLite 是分开的两组规则,这里合并成 geolocation-!cn。
代价是没有独立的「流媒体」开关,收益是少 4 行规则、少两个分组。日常使用基本感觉不到差别——需要单独给 Netflix 之类走特定节点的话,再加一组就行。
怎么用
subconverter
把模板地址拼进 config 参数:
1
https://你的转换器地址/sub?target=clash&url=<机场订阅链接>&config=https://raw.githubusercontent.com/poisonhs/clash-templates/main/ACL4SSR_Mini_meta.ini
url 记得做 URL 编码。
OpenClash
配置文件 → 自定义模板,把 ini 的内容贴进去,或者在订阅转换设置里指定模板地址。
自建 subconverter
模板放进 config/ 目录,用相对路径引用也行,省一次外部请求。
两个必须为 true 的开关
模板末尾这两行不能少:
1
2
enable_rule_generator=true
overwrite_original_rules=true
第一个关掉的话,所有 ruleset= 都不会生成任何规则——配置能生效,但等于裸奔。第二个决定是否丢弃订阅里自带的规则。
排查「模板没生效」时,先看这两行。