文章

写一个 Clash 订阅模板:11 条规则和两个坑

写一个 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 吃掉,行为看着一样,但你想单独调整时已经没有机会了。

规则匹配是从上到下的,越具体的越靠前,这是这类模板的通用原则。

规则结构

顺序规则去向说明
1geosite/private + GEOIP,private🎯 全球直连局域网
2category-ads-all🛑 全球拦截广告
3tracker🛑 全球拦截跟踪器
4google-cn🎯 全球直连国内可达的 Google 服务
5steam@cn🎯 全球直连Steam 国区
6telegram🚀 节点选择单列,方便单独切出口
7geolocation-!cn🚀 节点选择其余境外
8cn🎯 全球直连国内大集合
9GEOIP,cn🎯 全球直连IP 兜底
10FINAL🐟 漏网之鱼未命中

分组只有五个:节点选择、自动选择、全球直连、全球拦截、漏网之鱼。

一处精简取舍

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= 都不会生成任何规则——配置能生效,但等于裸奔。第二个决定是否丢弃订阅里自带的规则。

排查「模板没生效」时,先看这两行。

仓库:poisonhs/clash-templates

本文由作者按照 CC BY 4.0 进行授权