你从机场拿到一条订阅链接,粘进客户端却提示「格式不支持」或者根本没节点——于是你搜到了「订阅转换」这个词。这篇讲清楚它到底是什么、什么时候真需要它、以及一个很多人忽略的事实:大多数情况你其实不用转。
01 订阅转换是什么
订阅转换(subscription conversion)做的事很简单,最常见的开源实现是 subconverter:
把一种格式的订阅,转成另一种格式,好让目标客户端能读。
输入是你原始的订阅链接,输出是一条新的链接(或一个配置文件),内容还是同一批节点,只是「换了套包装」,让另一个客户端认得。
02 为什么会有这个东西
根源是格式碎片化。代理生态里客户端各有各的配置格式:
- 通用分享格式:
ss://、vmess://、trojan://、vless://这类单节点链接,或它们打包的 Base64 订阅(Shadowrocket、v2rayN 等常用)。 - Clash / mihomo 格式:YAML 配置,带
proxies、proxy-groups、rules。 - sing-box 格式:JSON 配置。
一个机场通常只给你其中一两种。如果它只给了 V2Ray 通用订阅,而你想用 Clash,Clash 读不了那串 Base64——中间就需要一层转换,把节点信息重新组织成 Clash 的 YAML,顺便套上分流规则。这就是 subconverter 的用武之地。
各种格式和协议的区别,见主流代理协议横向对比;订阅链接本身的原理见订阅链接的工作原理。
03 什么时候真的需要转换
订阅转换不是每次都要做。真正需要它,通常是这三种情况:
- 目标客户端只认一种格式,而机场没给。 比如你要用某个只读 Clash YAML 的工具,机场却只给了 V2Ray 订阅。
- 合并多个订阅。 你有几个机场,想把它们的节点并进一份配置统一管理——subconverter 能把多条订阅合并输出成一条。
- 给裸节点套分流规则。 原始订阅往往只有节点、没有规则。转换时可以套上一套现成的规则集(国内直连、国外代理、广告拦截),生成开箱即用的配置。规则怎么写见 Clash 规则完全指南。
一句话判断:如果你的客户端已经能直接读机场给的订阅、你也只有一个机场,现有的分流规则也够用——那你根本不需要订阅转换。
04 怎么转换
主流有三条路:
在线转换服务。 网上有一些公开的 subconverter 实例(配合网页前端):你把原始订阅链接粘进去,选目标客户端和规则模板,它吐出一条新链接。方便,但有隐私风险(下一节细说)。
自建 subconverter。 把开源的 subconverter 后端跑在自己的服务器上(Docker 一条命令即可),转换在你自己掌控的机器上完成;只要前端也由你自己控制(或直接调用自建后端),且不向第三方上传配置,节点凭据就不用交给第三方转换运营者。折腾一点,但服务器常驻在线,适合有一定动手能力、长期需要转换并持续自动更新的人。
本地转换。 同样是开源后端,只是跑在你自己的电脑上,转换在本机完成,减少了向第三方转换运营者暴露凭据。代价是:如果客户端用的是指向本机后端的链接,这台电脑上的后端需要持续运行,否则订阅无法刷新;如果是一次性生成配置文件,就不依赖后端,但也不会自动更新。
加上「干脆不转」,一共四种做法,按你的情况对着选:
| 做法 | 适用场景 | 节点凭据会经过谁 | 可靠性取决于 | 上手难度 |
|---|---|---|---|---|
| 不转(客户端原生读取) | 客户端能直接读机场给的格式 | 不经过任何转换服务 | 只依赖机场订阅本身 | 最低,粘贴订阅即可 |
| 本地转换 | 偶尔需要转、在意隐私 | 你自己的电脑(前端和后端都在本机时),不经过第三方转换运营者 | 用本机后端链接自动更新时,后端需持续运行;一次性生成的配置文件不依赖后端,但不会自动更新 | 中,要在本机装后端 |
| 自建 subconverter | 长期需要转、多设备共用 | 你自己的服务器(前端也由你控制或直接调用自建后端,且不向第三方上传配置时) | 服务器是否持续在线,适合需要持续自动更新的场景 | 较高,要有服务器和运维 |
| 公开在线实例 | 临时用一次、节点不敏感 | 实例的运营者 | 第三方服务是否在线、是否限流或停止服务 | 最低,网页里点几下 |
从隐私角度看,越往上越能减少向第三方转换运营者暴露凭据——和下一节讲的隐私顺序一致;可靠性则要看你用的是哪种更新方式,没有绝对的先后。
如果使用的是指向转换后端的动态订阅链接,客户端每次用这条链接自动更新订阅时,都会重新走一遍转换。这时后端一旦挂掉或停止服务,订阅就无法刷新(已经导入的节点不一定立即失效,但之后拿不到机场的更新)。如果转换的结果是一个静态配置文件,它不再经过后端,但也不会自动更新,机场换了节点要重新转换。
05 在线转换的隐私风险(重要)
这一节请务必看完,因为很多教程不讲。
在线订阅转换服务,能看到你订阅里的全部节点信息——服务器地址、端口、密码、UUID,一览无余。你把原始订阅粘进一个陌生的在线转换站,等于把整套节点凭据交给了它的运营者。
不要用来路不明的在线转换站,尤其别用搜索结果里排名靠前、却查不到运营方的那些。轻则你的节点被搭便车蹭用、加速失效,重则订阅凭据被记录、转卖。要用就用知名开源项目的官方实例,或者自建。
如果你在意隐私(用代理的人多少都该在意),顺序是:能不转就不转 > 自建转换(本机或自己的服务器) > 可信的官方在线实例 > 陌生在线站(尽量别碰)。相关的还有 DNS 层面的隐私,见代理为什么会 DNS 泄漏。
06 转换后常见问题排查
转换多了一层,出问题的地方也多了一层。下面是最常见的几类,按「现象 → 原因 → 怎么做」排:
| 现象 | 常见原因 | 怎么做 |
|---|---|---|
| 转出来没有节点,或节点比原订阅少 | 所用的转换实现或目标格式不支持某些较新的协议(如 Hysteria2、TUIC、AnyTLS),这类节点可能被过滤、解析失败,或让整个转换报错;转换参数里的过滤条件(包含 / 排除关键词、按目标类型过滤)也可能把节点筛掉;还有可能是后端没拉到原订阅 | 先用支持原订阅格式的客户端直接导入一次,确认机场那边本身有节点(导入失败不能单独证明原订阅没有节点,也可能是格式不受支持或网络问题);再核对你用的转换实现和版本,对这个协议的解析以及对目标格式的输出是否都支持;检查过滤参数,并看后端日志里的报错。如果目标客户端本身就不支持某个协议,转换也救不了 |
| 用转换后端的链接自动更新时,订阅更新失败 | 后端挂了、限流、停止服务,或后端拉取原订阅时被拒;也可能是网络问题 | 用原订阅链接对照测试,缩小范围:原链接能更新,优先排查转换链路(后端状态、请求参数),可以换后端或自建;原链接也失败,就排查原订阅本身和你的网络 |
| 节点能连上,但分流不对、规则不生效 | 规则模板的问题:规则顺序不对、规则指向的策略组名和实际分组对不上,或模板里引用的远程规则集拉不下来 | 以 Clash / mihomo 配置为例,打开转换后的配置,看 rules 引用的策略组和 proxy-groups 里的名字能不能对上。规则的匹配顺序和策略组怎么配合,见 Clash 规则完全指南 |
| 节点名里的文字乱码 | 编码处理出错,常见于原订阅或转换链路里字符编码不一致 | 先看原订阅导入后名字是否正常;原订阅正常,再检查转换后端和参数,必要时换一个实现 |
| 国旗 emoji 显示成方块 | 转换时按模板给节点加了 emoji,客户端或系统字体显示不了 | 通常只是显示问题,不影响连接;介意的话转换时关掉 emoji 选项 |
| 原订阅正常,转换时拿到的格式不对、内容为空或报错 | 部分机场会根据请求的客户端标识(User-Agent)返回不同格式的订阅;个别服务商还会按自己的访问策略限制某些请求 | 先看机场有没有直接提供目标格式的订阅链接;有的话直接用它,就不需要转换了 |
你会发现,上面大多数问题都出在「转换」这一层本身:后端可不可靠、模板对不对、能不能识别新协议。根治的办法往往不是修转换,而是不转——让客户端直接读机场给的原始订阅。
07 很多时候你其实不用转
回到开头那句:大多数「格式不支持」的问题,换个更全能的客户端就没有了,根本不用引入转换这一层。
原因是现代内核对格式的原生支持已经很广。以 Terraka 为例(内核是 mihomo):
- 兼容 Shadowrocket 订阅链接,粘进去就能导入节点,不用先转成 Clash 格式。
- 原生支持 Clash YAML 配置,机场给的 Clash 订阅原样可用。
- 支持 Shadowsocks、VMess、VLESS、Trojan、Hysteria2、TUIC 等协议,原订阅格式受支持时,这些节点直接导入即可,不用担心在转换环节被丢掉。
- 支持规则分流(按域名、IP 段、GeoIP 国家码决定代理、直连或拦截)。
- URL 订阅一键导入并设置自动更新,直接导入服务商提供、格式受支持的原始订阅 URL 时,订阅更新不经过转换后端,也就不受转换服务是否在线影响。
也就是说,前面「需要转换」的三种情况里,「客户端读不了」这一种,当原订阅属于 Terraka 支持的格式和协议时,可以省去格式转换;「想套规则」这一种,如果原订阅自带的规则已经满足需求,或者你愿意自己在客户端里配置规则,也可以不依赖转换服务。剩下的「合并多个订阅」如果你确实需要,再按上面的决策表,优先选本地转换或自建。为什么 mihomo 内核对格式支持这么全,见 Clash 和 Clash.Meta 的区别。
订阅转换是格式碎片化时代的补丁。客户端越全能,你越用不到它——这才是更省心、也更安全的方向。
08 常见问题
订阅转换有什么用? 把机场给的订阅转成目标客户端能读的格式,常见用途有三个:客户端只认某一种格式、想把几个机场的订阅合并成一条、想给只有节点的订阅套上一套分流规则。如果你的客户端能直接读原订阅、你也只有一个机场,现有规则也够用,就用不上它。
在线订阅转换安全吗? 取决于你把订阅交给了谁。在线转换服务能看到订阅里的全部节点信息(地址、端口、密码、UUID),陌生站点尽量别碰;要转就优先本地转换或自建,减少向第三方转换运营者暴露凭据,其次才是知名开源项目的官方实例。
转换后没有节点怎么办? 先用支持原订阅格式的客户端直接导入原订阅,确认机场那边有节点(导入失败不能单独证明原订阅没有节点);如果原订阅有、转换后没有,可能是所用的转换实现或目标格式不支持其中的协议,也可能是过滤参数把节点筛掉了:核对实现和版本对该协议与目标格式的支持,检查过滤参数,看后端日志。最省事的做法是换一个能直接读原订阅的客户端,不再经过转换。
转换后的订阅为什么突然更新不了? 如果你用的是转换后端生成的链接来自动更新,每次更新都要经过这个后端;后端挂了、限流或停止服务,订阅就无法刷新,已经导入的节点不一定立即失效。用原订阅链接对照测试可以缩小范围:原链接能更新,优先排查转换链路;原链接也不行,再看原订阅本身和网络。
订阅转换的本质:给读不懂原格式的客户端做翻译。真需要时(合并订阅、目标客户端挑格式),优先本地转换或自建、警惕陌生在线站;而更多时候,一个能直接导入原订阅的客户端能让你完全绕开它。