sing-box 订阅转换怎么弄?按格式完成转换、校验与导入
简答:先不要急着使用在线转换站:先查看订阅提供方是否已有 sing-box 专用链接或 JSON 配置;如果没有,再根据原始格式选择转换方式。转换后保存为 JSON,用 sing-box check -c config.json 校验,确认 outbounds 中确实有节点后再导入客户端。
定义:sing-box 订阅转换,是把 Clash YAML、Base64、节点 URI 或其他订阅数据整理成 sing-box 能读取的 JSON 配置或 sing-box 节点输出。
先试这一步:确认是否真的需要转换
很多订阅并不需要先转换。先登录你购买或获取订阅的服务后台,查看是否存在“sing-box”“SFA”“SFI”“SFM”“JSON”或“通用订阅”等选项。若已有 sing-box 专用链接,优先直接导入;只有在没有对应输出格式,或现有链接导入后格式不兼容时,才考虑转换。
本文是第三方使用指南,不代表任何品牌或服务商的官方页面。具体订阅类型、客户端支持范围和可用协议,以订阅提供方与当前 sing-box 客户端显示为准。
| 你手里的内容 | 先怎么判断 | 通常的下一步 |
|---|---|---|
| sing-box 专用链接 | 后台明确标注 sing-box 或对应客户端格式 | 优先直接导入,不再转换 |
| Clash YAML | 文本开头常见为 proxies、proxy-groups 或 rules 等字段 | 选择 Clash/Mihomo 作为输入格式,再输出 sing-box |
| Base64 订阅 | 打开后是一长串编码文本,不能直接读出节点字段 | 按 Base64 或自动识别输入,再输出 sing-box |
| VLESS、VMess、Trojan 等 URI | 通常是一行一个链接,可能以对应协议名称开头 | 选择 URI、节点列表或对应协议输入方式 |
| 完整 sing-box JSON | 可以看到 outbounds、inbounds、route 等 JSON 字段 | 通常直接保存、校验和导入,不要重复转换 |
| 只有节点列表或 outbounds 片段 | 可能只有节点数据,没有 DNS、route 或入站设置 | 需要放进完整配置结构后再导入 |
sing-box 官方配置文档说明,配置文件使用 JSON,常见顶层字段包括 dns、inbounds、outbounds 和 route;因此“能生成节点列表”不等于已经得到完整的可运行配置。可参阅 sing-box 配置结构文档。
标准转换流程:从订阅链接到 sing-box JSON
- 复制订阅链接。
从后台复制完整订阅地址,不要手动删掉参数。链接通常包含账户识别信息,把它当作密码处理,不要发到公开群组、工单截图或在线代码仓库。
- 优先选择官方或自建转换路径。
如果后台有 sing-box 输出,直接使用。没有时,可以使用自己部署的订阅管理工具,或在可信环境中使用转换工具。以 Sub-Store 文档为例,其文档列出了 sing-box 作为输出目标,并区分“订阅输出”和“生成完整配置文件”两种用途;具体功能应以当前工具文档为准,不能把第三方工具当作 sing-box 官方组件。参阅 Sub-Store 订阅转换文档。
- 选择输入格式和目标格式。
输入格式要与原始内容一致,目标格式选择 sing-box。若原始订阅是 Clash YAML,却选择成 Base64,常见结果是解析失败或节点数量为 0。无法确定时,先用浏览器或 curl 查看返回内容,再决定格式。
- 生成输出。
工具可能生成一个远程链接,也可能生成 JSON 文件。远程链接适合定期更新,但每次请求都可能暴露订阅凭据给托管转换服务;本地 JSON 便于检查内容,但不会自动跟随上游更新。根据隐私和更新需求择一使用。
- 保存为配置文件。
如果输出内容是 JSON,将其保存为
config.json。不要把带有真实节点、UUID、密码、私钥或订阅地址的文件上传到公开仓库。
如果使用 Sub-Store 一类工具,还要区分“sing-box 输出链接”和“完整 sing-box 配置文件”。前者可能主要提供节点数据,后者才可能包含 DNS、route、入站和日志等完整配置;导入前应打开文件确认结构,而不是只看文件扩展名。
转换后先校验:命令、结果和处理方法
官方 sing-box 配置文档列出了 sing-box check 检查命令。假设可执行文件已经安装,并且配置文件位于当前目录,可以运行:
sing-box check -c config.json如果你的版本不接受该参数形式,可先运行 sing-box check --help 查看当前版本帮助;版本差异未核实时,不要照抄其他项目的启动参数。
| 现象 | 含义 | 处理方式 |
|---|---|---|
| 命令返回成功且没有报错 | JSON 结构和当前命令支持的配置字段通过基础检查 | 继续检查节点数量、tag、协议参数和客户端导入结果 |
| JSON parse error | 文件不是合法 JSON,可能有多余逗号、注释或截断 | 用编辑器格式化,删除注释和末尾多余逗号,再检查 |
| unknown field 或字段不支持 | 配置字段与当前 sing-box 版本或目标客户端不匹配 | 对照当前官方配置文档,删除未经确认的字段,避免套用旧模板 |
| 检查通过但节点为 0 | 格式选择错误、上游返回空内容,或协议被过滤 | 先保存原始返回内容,重新确认输入格式和过滤条件 |
| 检查通过但无法连接 | JSON 结构正确不代表远端节点参数有效 | 检查 server、server_port、认证信息、TLS、传输层和时间设置 |
下面是一个仅用于验证 JSON 结构的最小配置,它只包含本地直连出口,不代表可连接任何远程节点:
{
"log": {
"level": "info"
},
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
]
}实际转换得到的远程节点字段必须以当前 sing-box 文档和转换结果为准。不要因为某个节点使用 VLESS、Hysteria2、TUIC 或 WireGuard,就自行猜测字段名称、认证方式或传输参数。
导入 sing-box 客户端时,先区分远程配置和本地 JSON
sing-box 官方列出了 Android、Apple 平台、Windows 和 Linux 等图形客户端,但不同平台的菜单名称和导入能力可能不同,可在官方客户端页面确认对应项目。参阅 sing-box 图形客户端列表。
- 远程配置:在客户端中选择新增配置、远程配置或 URL 导入一类入口,粘贴转换后的链接,保存后执行更新。菜单名称以当前版本界面为准。
- 本地 JSON:将
config.json传到设备后,在客户端选择本地文件或导入配置,选中该文件,再运行配置检查。 - 检查节点和出口:确认配置列表中能看到节点或出站项。若只有
direct,说明导入的是最小配置或转换结果没有生成远程节点。 - 先不开 TUN 测试:优先使用客户端提供的系统代理或应用内代理方式验证节点,确认基本连接后再处理 TUN、DNS 和路由问题。TUN 需要的权限、网卡和路由设置可能因系统而不同。
如果只是想更新节点,远程配置更方便;如果需要手动审查 DNS、route、规则和协议字段,本地 JSON 更容易检查。两者不要混淆:一个 URL 返回的内容不一定就是完整配置文件。
转换失败或导入后不能用:按顺序排查
- 先测原始订阅是否有返回。
在本机终端执行,以下地址仅作占位示例:
curl -L --fail --max-time 20 "https://example.invalid/your-subscription" -o raw.txt如果命令失败,先处理订阅地址、网络、认证或上游服务问题,不要先修改 sing-box 配置。真实订阅地址不要放进文章、截图或公共日志。
- 查看返回内容的类型。
打开
raw.txt,判断它是 YAML、Base64、URI 列表还是 JSON。若返回的是登录页、错误页、HTML 或空文件,说明转换器拿到的不是有效订阅。 - 检查节点数量。
转换后搜索
outbounds、节点协议名称和tag。完整配置通常还应结合 DNS、route 或客户端要求的其他字段;只有节点列表时,不能直接假定它具备完整分流能力。 - 检查协议参数是否完整。
重点查看服务器地址、端口、UUID或密码、TLS、SNI、传输层、Reality 公钥与短 ID等字段是否来自原始订阅。缺字段时不要凭记忆补写,应回到原订阅或转换工具重新生成。
- 最后才排查 TUN、DNS 和系统网络。
如果配置检查通过、普通代理能连接,但开启 TUN 后不能上网,先关闭 TUN 回到普通代理测试,再单独检查系统权限、虚拟网卡、路由和 DNS。不要把 TCP 连通性测试结果当成 UDP 或 QUIC 协议的完整结论。
订阅安全:在线转换前后的最低限度检查
- 不要公开粘贴订阅链接。订阅链接可能包含可直接更新节点的凭据,分享前应删除或打码。
- 优先使用专用输出。后台已经提供 sing-box 格式时,通常不必把原始订阅交给额外的在线转换站。
- 需要在线转换时,先确认数据流向。查看工具是否需要远程拉取、是否保存订阅、是否支持自建部署;未核实的数据处理方式不要当成安全承诺。
- 怀疑泄露就及时处理。回到订阅提供方后台查找重置、重生成、撤销或更换订阅链接的功能;具体按钮名称以当前后台为准。
- 不要把真实配置用于公开调试。分享报错时,至少删除订阅 URL、服务器地址、认证信息、私钥、公钥和可识别节点名称。
结论:最短可执行路径
- 先找 sing-box 专用链接;有就直接导入。
- 没有专用链接,再识别原始格式,不要盲选输入类型。
- 生成远程链接或本地 JSON后,检查是否包含实际节点。
- 运行
sing-box check -c config.json,先解决 JSON 和字段错误。 - 先不开 TUN 验证基本连接,再分别排查 DNS、路由和系统网络。
- 涉及真实订阅时,始终把链接当作敏感凭据处理。
如果转换后仍然是 0 节点、配置字段不兼容或远程更新失败,保留原始返回状态和脱敏后的错误信息,再根据输入格式、输出格式和当前客户端版本逐项定位。
常见问题
sing-box 订阅可以直接导入吗?
如果服务后台已经提供 sing-box、JSON 或对应客户端专用链接,可以先直接导入。Clash YAML、Base64、URI 列表等格式不能默认视为 sing-box 完整配置,是否需要转换要看实际返回内容。
为什么转换后显示 0 个节点?
常见原因包括输入格式选错、原始订阅返回空内容或错误页、转换工具过滤了不支持的协议,以及订阅本身没有返回节点。先用浏览器或 curl 保存原始返回内容,再核对输入格式和过滤设置。
生成的 sing-box JSON 能通过 check,为什么还是连不上?
check 主要用于配置结构和字段层面的基础检查,通过不代表远端认证、TLS、传输层或服务器参数一定正确。应继续核对节点字段,并先不开 TUN 使用普通代理方式测试。
在线订阅转换会不会泄露订阅?
存在需要核实的数据暴露风险,因为转换工具可能需要读取远程订阅。优先使用订阅提供方自带输出、本地或自建工具;不要公开分享真实链接,怀疑泄露时及时重置或撤销。
完整配置和只有 outbounds 的结果有什么区别?
完整配置通常还会包含 DNS、inbounds、route、日志等结构;只有 outbounds 的结果主要是节点数据,导入后可能缺少分流、DNS或本地入站设置。应打开 JSON 检查顶层字段,不要只看文件名。
相关阅读
参考资料
- sing-box 配置结构与 check 命令文档
- sing-box 官方图形客户端列表
- Sub-Store 订阅转换文档(sub-store-org.github.io)
- Sub-Store 订阅概览与输出链接说明(sub-store-org.github.io)