Subconverter转Hysteria2订阅:原版不认hy2链接,换MetaCubeX分支解决
先说依据
这篇的依据(2026-10-18 读取):
- tindy2013/subconverter 官方 README 的 Supported Types 表;
- MetaCubeX/subconverter 的源码(
src/parser/subparser.cpp、src/generator/config/subexport.cpp)和README-docker.md。
结论是读源码得出的,Docker 部署和端到端转换没有在真机上逐条实测,跑起来后以实际输出为准。
问题:原版 subconverter 不认 hy2
如果你订阅里混了 hysteria2:// 链接,用原版 subconverter 转 Clash 配置,会发现 hy2 节点一个都不剩——不是配置错了,是原版根本不解析这种链接。证据是官方 README 的 Supported Types 表:Clash、SSR、V2Ray、Surge……整张表里没有 hysteria2,不支持解析,自然也不会输出。
这是全网高频坑:机场订阅现在 hy2 节点越来越多,原版 subconverter 的用户只能干瞪眼。
解法:换 MetaCubeX 分支
MetaCubeX(Mihomo/Clash Meta 生态的维护者)维护了一个 subconverter 分支,我读了它的源码确认:
- 解析端(
src/parser/subparser.cpp):有explodeStdHysteria2和hysteria2Construct两个函数,37 处提到 hysteria,能把hysteria2://链接里的地址、端口、密码、SNI、混淆参数、上行下行带宽、端口跳跃全部拆出来; - 输出端(
src/generator/config/subexport.cpp):hy2 节点能输出成 Clash YAML(type: hysteria2)、Surge、sing-box JSON 三种格式。
也就是说:解析和输出两端都是通的,不是半成品。
部署:Docker 一条命令
和原版用法一致,只是镜像名换掉(依据官方 README-docker.md):
1 | docker run -d --restart=always -p 25500:25500 metacubex/subconverter:latest |
看到返回 subconverter vx.x.x backend 即运行正常。接口格式和原版完全一样:
1 | http://127.0.0.1:25500/sub?target=clash&url=<URL编码后的订阅链接> |
自建部署的通用注意事项(端口别暴露公网、自定义规则等)看我之前那篇 Subconverter 自建教程,这里不重复。
关键提醒:客户端必须用 Mihomo 内核
输出 target=clash 时,hy2 节点在 YAML 里是这样写的:
1 | - {name: "HK-hy2", type: hysteria2, server: 1.2.3.4, port: 443, password: xxx, ...} |
原版 Clash 内核不认识 type: hysteria2,会报 unsupported proxy type。必须用 Mihomo/Clash Meta 内核的客户端(Clash Verge Rev、FlClash、ClashMeta for Android 等)。这个问题站内有专文细讲:Clash报unsupported proxy type hysteria2怎么办。
和原版的对比
| 原版 tindy2013 | MetaCubeX 分支 | |
|---|---|---|
| 解析 hysteria2:// | 否(直接丢弃) | 是(源码验证) |
| 输出 hy2 到 Clash/Surge/sing-box | 否 | 是 |
| Docker 镜像 | tindy2013/subconverter | metacubex/subconverter |
| 接口/端口 | 25500,/sub | 一致 |
| 维护状态 | 原版 | 2026-10-17 仍在更新 |
注意事项
- 镜像默认无鉴权,25500 不要暴露到公网(只监听 127.0.0.1 或加反代);
- 转完先检查输出里有没有 hy2 节点、参数全不全,再导入客户端;
- 以上源码结论来自 2026-10-18 读取的 master 分支,后续版本以仓库为准;部署步骤未在真机逐条验证。