3158 字
16 分钟

subconverter 订阅转换完全指南 2026:自建 Docker 部署 + pref 配置 + 多客户端格式输出 + sub-store 现代方案

subconverter 是科学上网工具链里最被低估、却几乎人人都离不开的一环。你已经有了机场订阅,也装好了 Clash / sing-box / Shadowrocket,但把「机场给的那串链接」变成「客户端能直接用、还带分流规则和去广告」的配置,中间这一步,90% 的新手都卡住过。

本文把这件事讲透:为什么需要订阅转换、subconverter 怎么工作、如何自建部署、pref 配置每个参数什么意思、转换 API 怎么调,再到 Clash Meta / sing-box / Shadowrocket / Quantumult X 的实战输出,最后介绍一下更现代的 sub-store 方案。读完你就能把任意订阅收拾成「开箱即用」的配置。

阅读提示

本文与 《mihomo(Clash Meta)完全配置指南》《sing-box 全平台使用教程》《Clash Verge Rev 进阶配置》 互为补充:那几篇讲「客户端怎么用配置」,本文讲「配置从哪来」。四篇合起来就是 2026 年「机场订阅 → 可用配置」的完整链路。


一、为什么需要订阅转换#

直接把机场订阅丢进客户端,绝大多数情况下都用不顺。原因有五:

1.1 订阅里只有节点,没有规则#

机场的订阅本质是一份「节点清单」——一串 vmess://vless://trojan:// 或 Clash YAML。它不包含分流规则:哪些域名走代理、哪些直连、哪些走广告拦截。Clash / sing-box 拿到一份「只有代理节点、没有规则」的配置,要么全部走代理(国内网站也绕一圈,慢且费流量),要么全部直连(代理形同虚设)。

1.2 不同客户端的格式不通用#

客户端接受的订阅格式
Clash / mihomoClash YAML
sing-boxsing-box JSON
Shadowrocket原始链接 / Surge 格式
Quantumult XQuantumult X 专有格式
V2RayNV2Ray JSON

机场通常只提供一种或两种格式(大多是 Clash 或原始链接)。你想用 sing-box,但机场只给 Clash 订阅?这就是转换的刚需。

1.3 节点名里外混杂、没有 emoji#

很多机场的节点名是 HK-01|BGP|3x100Mbps 这类机器生成的字符串。转换时可以自动加国旗 emoji、重命名为中文、按地区分组,一眼就能找到想用的节点。

1.4 需要去广告、加自定义规则#

subconverter 能在输出时注入通用规则集(国内直连、国外代理、去广告、流媒体解锁),免去手动维护几百行规则的痛苦。

1.5 想聚合多个机场#

手里有多家机场?可以用 subconverter 把多个订阅合并成一个,统一管理、按延迟排序。


二、subconverter 是什么:工作原理#

subconverter 是一个订阅「中转处理」服务。它不生产节点,只做节点的「搬运 + 加工」:

订阅URL(机场/原始链接)
┌─────────────────────────────┐
│ subconverter(本地/自建) │
│ 1. 拉取原始订阅 │
│ 2. 按 pref 配置处理: │
│ 加emoji / 重命名 / 去广告 │
│ 过滤节点 / 注入规则集 │
│ 3. 转换成目标格式 │
└─────────────────────────────┘
输出:Clash / sing-box / SSR / Quantumult X ...
导入客户端直接用

核心就三步:拉取 → 处理 → 输出。处理规则写在 pref 配置文件里,输出格式通过 URL 的 target 参数指定。


三、在线转换的隐患:必须自建/本地优先#

网上有很多「一键订阅转换」网页。方便,但有代价:

  • 节点泄露:转换服务在服务端能完整拿到你的节点(服务器、端口、密码、UUID)。作恶或数据库泄露 = 节点被滥用 + 被精准封锁。
  • 规则投毒:恶意服务可能在转换时往配置里塞它自己的节点或劫持规则。
  • 订阅失效:在线服务随时跑路,转换链接就废了。
安全底线

生产环境一律自建 subconverter(一个 Docker 容器,内存占用几十 MB,跑在本地或自己的 VPS 上)。临时救急用在线服务可以,但转完立刻删掉配置、别保存转换链接。


四、自建部署:Docker Compose 部署 subconverter#

官方镜像叫 stillnesszwm/subconverter 或社区维护的 tindy2013/subconverter。下面用 Compose 跑一个本地实例。

4.1 准备目录#

Terminal window
mkdir -p ~/subconverter && cd ~/subconverter
mkdir -p data/base data/config data/template

4.2 docker-compose.yml#

version: "3"
services:
subconverter:
image: stillnesszwm/subconverter:latest
container_name: subconverter
restart: unless-stopped
ports:
- "25500:25500"
volumes:
- ./data/base:/base
- ./data/config:/config
- ./data/template:/template
environment:
- TZ=Asia/Shanghai

4.3 启动#

Terminal window
docker compose up -d
# 验证
curl http://localhost:25500
# 返回 "SubConverter" 即成功

默认端口是 25500,基础访问路径是 /sub。接下来所有转换请求都发往 http://<你的地址>:25500/sub

放公网?

如果只是自己用,subconverter 跑在 127.0.0.1 即可,用 SSH 端口转发(ssh -L 25500:localhost:25500 user@vps)从本地访问,完全不暴露端口。真要公网开放,务必加一层 Nginx + 密码/Token 保护。


五、pref 配置详解#

subconverter 的行为由 pref.toml(或 pref.ini)控制,放在 data/config/ 里。下面逐参数说明最常用的:

data/config/pref.toml
api_mode = true
backend = "https://api.dler.io" # 默认后端,自建时可用本地或公共后端
default_url = "" # 默认订阅(留空则每次用 url 参数指定)
default_target = "clash" # 默认输出格式
# 节点名美化
emoji = true # 加国旗 emoji
emoji_char = "🚀" # 自定义前缀 emoji
remove_old_emoji = true # 先清掉原节点名里的 emoji 再处理
append_proxy_type = false # 是否在节点名后追加类型(如 [Trojan])
# 连接特性
udp = true # 启用 UDP 转发
skip_cert_verify = false # 是否跳过证书校验(默认 false,更安全)
expand = true # 展开为多条规则
clash_new_field = true # 输出 Clash.Meta 新字段(rule-providers 等)
# 节点增删
enable_insert = false # 是否插入额外节点
insert_url = "" # 要插入的额外订阅
common_rules = "" # 通用规则文件路径
base_path = "sub" # 访问基础路径
api_short_url = false # 是否用短链
strict_mode = false # 严格模式

5.1 核心参数速查表#

参数作用推荐值
emoji节点名加国旗 emojitrue
remove_old_emoji清除原有 emoji 重新加true
udp开启 UDP(游戏/语音必需)true
clash_new_field输出 mihomo 新字段true
expand展开规则true
skip_cert_verify跳过 TLS 校验false(安全)
append_proxy_type节点名后缀协议类型看个人喜好
enable_insert / insert_url合并额外订阅多机场时启用
backend后端转换服务地址自建指向本地或可信公共端

六、转换 API 与参数#

subconverter 的转换本质是拼一个 URL。格式:

http://<host>:25500/sub?target=<格式>&url=<订阅链接>&emoji=true&udp=true&append_proxy_type=true

6.1 target 目标格式一览#

target 值输出格式适用客户端
clashClash YAMLClash / mihomo
clashrClash + SSR老版 Clash
singboxsing-box 1.x JSONsing-box
singbox&ver=2sing-box 2.x新版 sing-box
surge&ver=4Surge 配置Surge
quanQuantumult XQuantumult X
surfboardSurfboardSurfboard
ssShadowsocksSS 客户端
v2rayV2RayN JSONV2RayN / v2rayN
trojanTrojan 配置Trojan 客户端
mixed混合格式通用
base64Base64 编码原始链接批量导入

6.2 常用 URL 参数#

参数说明示例
url原始订阅(需 URL 编码url=https%3A%2F%2F...
target输出格式(见上表)target=clash
emoji加 emojiemoji=true
udp启用 UDPudp=true
rename重命名(逗号分隔 源=目标rename=HK=香港
exclude排除匹配正则的节点exclude=(\u52a0\u72ed|过期)
filter只保留匹配正则的节点filter=(香港|日本)
sort排序方式sort=rsesi(按延迟)
insert额外订阅合并insert=https://...
append_proxy_type节点名追加类型append_proxy_type=true
clash_new_field输出 mihomo 新字段clash_new_field=true

注意url 参数里的订阅链接必须 URL 编码(把 : 变成 %3A/ 变成 %2F)。可以用 python -c "import urllib.parse;print(urllib.parse.quote('你的订阅'))" 快速编码。


七、实战一:机场订阅 → Clash Meta 配置#

假设机场给你一个 Clash 格式订阅,你想转成「带 emoji + mihomo 新字段 + 国内直连规则」的配置:

http://localhost:25500/sub?target=clash&url=<URL编码的订阅>&emoji=true&udp=true&clash_new_field=true&append_proxy_type=false

把返回的 YAML 保存为 config.yaml,导入 Clash Verge Rev / mihomo 即可。

7.1 加上外部规则集(rule-providers)#

subconverter 默认输出基础分流规则。要获得持续更新的精细规则(国内直连、国外代理、去广告、流媒体解锁),在生成的配置里引用社区维护的 rule-providers:

# 在 config.yaml 末尾追加
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
icloud:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
path: ./ruleset/icloud.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
lancidr:
type: http
behavior: ipcidr
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt"
path: ./ruleset/lancidr.yaml
interval: 86400

这正好对接 《mihomo(Clash Meta)完全配置指南》 里讲到的 rule-provider 用法。


八、实战二:机场订阅 → sing-box 配置#

sing-box 用 JSON 格式,target 换成 singbox

http://localhost:25500/sub?target=singbox&ver=2&url=<URL编码的订阅>&emoji=true&udp=true

注意 sing-box 版本差异较大,用 singbox&ver=2(对应 1.8+ 的路由/outbound 结构)或 singbox&ver=3(最新版)匹配你客户端版本。不确定的话,打开 sing-box 客户端看它要求的订阅格式提示。

把生成的 JSON 存为 config.json,在 sing-box 客户端里加载即可。详见 《sing-box 全平台使用教程》


九、实战三:机场订阅 → Shadowrocket / Quantumult X#

9.1 Shadowrocket(iOS)#

Shadowrocket 接受原始链接或 Surge 格式。最稳的方式是 target=surge&ver=4,再用 Shadowrocket 导入 Surge 配置:

http://localhost:25500/sub?target=surge%26ver=4&url=<URL编码的订阅>&emoji=true

也可以直接 target=ss 或保留原始链接格式,在 Shadowrocket 里「订阅」栏粘贴转换后的链接。

9.2 Quantumult X#

http://localhost:25500/sub?target=quan&url=<URL编码的订阅>&emoji=true&udp=true

生成的配置直接覆盖 Quantumult X 的「配置文件」即可。更细的用法见 《Quantumult X 配置完全指南》


十、sub-store:更现代的订阅管理方案#

如果你觉得 subconverter 的 pref + URL 参数不够灵活,可以看 sub-store——一个带 Web 界面的订阅管理面板,核心优势是「脚本化」:

  • JavaScript 脚本处理:可以用 JS 对节点做任何处理(批量改名、按正则分组、按延迟排序、注入自定义字段)。
  • 多订阅聚合:把一个面板里管理多家机场,统一输出。
  • 本地运行:同样可 Docker 部署,数据在自己手里。
  • Web UI:可视化编辑、预览、一键复制。
# sub-store 最简 Compose(示意)
services:
sub-store:
image: stillnesszwm/sub-store:latest
container_name: sub-store
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/data

sub-store 适合进阶用户:需要按延迟自动选优、批量把节点改成中文名、按地区/运营商分组、对同一份订阅做多种输出。普通用户用 subconverter 已经足够。

两者如何选
  • 只想「一键把机场订阅变成 Clash/sing-box 配置」→ subconverter(简单、稳定)。
  • 想精细控制节点、写脚本、聚合多机场、有 Web 界面 → sub-store(灵活、强大)。
  • 实战中很多人两者并存:sub-store 管订阅,subconverter 做最终格式转换。

十一、常见问题排错#

11.1 转换后节点为空#

  • 检查 url 是否做了 URL 编码(最常见的坑)。
  • 机场订阅是否过期(浏览器直接打开订阅链接,看还有没有内容)。
  • backend 是否可达(自建时 backend 指向的服务能否联网)。

11.2 规则不生效 / 还是全走代理#

  • Clash 确认有 rules 段且 GEOIP,CN,direct 等规则存在;sing-box 确认 route.rules 配置正确。
  • 检查是否用了外部 rule-providers 但路径/path 写错导致加载失败(看客户端日志)。

11.3 emoji 不显示#

  • emoji=trueremove_old_emoji=true 同时开;部分旧客户端字体不支持国旗 emoji,属正常现象。

11.4 证书错误 / TLS 握手失败#

  • 默认 skip_cert_verify=false 最安全,但如果机场订阅本身证书链异常,可临时设 true 排查(不建议长期开启)。

11.5 输出的 Clash 配置某些字段客户端不认#

  • mihomo 新字段需要 clash_new_field=true;确认你的客户端内核版本(Clash Premium 旧版不支持 rule-providers/script)。

十二、安全与隐私建议#

  1. 自建优先:subconverter / sub-store 都跑在自己机器或 VPS 上,订阅链接不外泄。
  2. 别存转换链接:转换出的配置导入客户端后,删掉浏览器里的转换 URL。
  3. SSH 端口转发:本地用 ssh -L 25500:localhost:25500 访问 VPS 上的 subconverter,端口不暴露公网。
  4. 公网开放必加 auth:Nginx 反代 + Basic Auth 或 Token,避免被扫到滥用。
  5. 定期换订阅:机场订阅有泄露风险,定期在机场后台「重置订阅链接」。

十三、总结与延伸阅读#

subconverter 是「机场订阅 → 可用配置」这条链路上不可或缺的加工站:它把杂乱的原始订阅,变成带 emoji、带规则、带去广告的「开箱即用」配置,并能在 Clash / sing-box / Shadowrocket / Quantumult X 之间自由转换。自建一份只需一个 Docker 容器,安全和灵活性都远胜在线服务。

想要更精细的订阅管理,再上 sub-store 用脚本做任意处理。两者配合,订阅这件事就彻底解决了。

延伸阅读(形成完整闭环):

subconverter 订阅转换完全指南 2026:自建 Docker 部署 + pref 配置 + 多客户端格式输出 + sub-store 现代方案
https://971918.xyz/posts/proxy-tools/subconverter-subscription-convert-guide/
作者
九所长
发布于
2026-08-02
许可协议
CC BY-NC-SA 4.0