sing-box订阅怎么转换成配置文件?从订阅链接到 JSON 导入
简答:最稳妥的做法是先判断订阅链接返回的内容:如果已经是 sing-box JSON,可直接作为远程配置导入;如果返回 Clash YAML、Base64 或节点 URI,则需要转换为 sing-box JSON。转换后不要只看“生成成功”,还要用 sing-box check 校验,并确认 outbounds、route、DNS 和默认出口是否完整。
定义:sing-box 配置文件是描述 DNS、入站、出站和路由规则的 JSON 文件,而订阅链接只是获取配置或节点数据的远程地址,两者不是同一个概念。
先试这一步:识别订阅返回格式,再决定是否需要转换
本文面向 Windows、macOS、Linux、Android 和 iOS 上使用 sing-box 图形客户端或命令行的用户。不同客户端的菜单名称可能随版本变化,以下按“远程配置”和“本地 JSON”两个概念说明,不把某个未核实的版本号或菜单名称当成固定事实。
| 看到的内容 | 通常代表什么 | 下一步 |
|---|---|---|
以 { 开头,能看到 outbounds、route 或 dns | 可能已经是 sing-box JSON | 先保存为 config.json,再校验;也可以作为 Remote Profile 使用 |
出现 proxies:、proxy-groups: 或 YAML 缩进 | 更像 Clash 或兼容格式 | 使用转换工具输出 sing-box 格式,再检查字段是否丢失 |
| 是一长串字母数字,常见为 Base64 外观 | 可能是编码后的节点 URI 列表 | 先解码并确认每行是什么协议,再转换 |
以 vless://、vmess://、ss:// 等开头 | 节点 URI,而不是完整配置 | 转换为 outbounds,之后补齐 DNS、route 和默认出口 |
| 浏览器返回登录页、HTML 或错误提示 | 链接失效、需要授权或被重定向 | 不要继续转换,先回到订阅来源核对链接、权限和有效期 |
sing-box 官方文档明确说明,配置文件使用 JSON,并由 dns、inbounds、outbounds、route 等部分组成。查看 sing-box 配置结构说明。订阅地址包含访问凭据时,不要把完整链接发到群组、工单或在线转换页面。
方法一:已有 sing-box 专用配置时,直接导入远程配置
- 在浏览器中打开订阅链接,观察返回内容是否是 JSON。不要只根据链接后缀判断,实际返回内容更重要。
- 如果内容中能看到
outbounds、route或dns,先保存一份脱敏备份;不要公开其中的服务器地址、UUID、密码、密钥或完整订阅 URL。 - 打开 sing-box 图形客户端,找到添加远程配置、Remote Profile 或类似功能,将订阅地址作为更新来源添加。官方通用客户端文档将 Remote Profile 定义为“以 URL 作为更新来源的远程 sing-box 配置”,并说明客户端应支持自动更新和 HTTP Basic authorization。查看 sing-box Remote Profile 说明。
- 手动更新一次远程配置,查看配置内容或日志。如果客户端能显示配置且没有 JSON 解析错误,只能说明下载和解析这两层基本正常,不代表目标网站、DNS 或所有节点都能使用。
- 启动前确认默认出口。配置中如果只有多个节点但没有 Selector、URLTest 或明确的默认出站,可能出现“有节点但没有流量”的情况;这时需要根据当前配置的
tag和route.final进行调整。
远程导入的优点是可以保留自动更新,缺点是每次更新都依赖订阅服务器和当前网络。若更新后节点突然减少,先保存旧配置,再比较新旧 JSON,不要直接覆盖唯一备份。
方法二:只有 Clash、Base64 或节点 URI 时,转换为 sing-box JSON
转换前先确认输入类型。Clash YAML、Base64 节点列表、单条 URI 和已有 sing-box JSON 的结构不同,不能把它们都当成“订阅链接”直接导入。
- 准备输入:复制订阅链接或下载后的文件,但先删除聊天记录、截图和日志中的完整令牌。若使用在线转换服务,订阅凭据可能经过第三方服务器,应优先选择可信工具、自建实例或本地转换。
- 选择输出格式:在转换工具中选择
sing-box,不要误选 Plain JSON、V2Ray URI 或 mihomo。Sub-Store 的公开文档列出了 Clash YAML、常见节点 URI 等输入类型,并将 sing-box 列为输出目标;具体支持范围仍应以当前工具页面和实际转换结果为准。查看 Sub-Store 官方仓库说明。 - 下载结果:将转换结果保存为
config.json,使用文本编辑器检查文件开头是否为 JSON 对象,而不是 HTML、错误页面或带额外说明文字的内容。 - 检查核心字段:至少查看
outbounds是否存在,节点是否有唯一的tag,是否存在可用的 DNS 和 route。只有 outbounds 的“节点列表”不等于完整可运行配置。 - 本地校验:在已安装 sing-box 的终端中进入配置文件所在目录,运行
sing-box check。官方文档将该命令列为配置检查方式;如果命令失败,先根据报错定位 JSON 语法、字段名称或版本兼容性。查看官方 check 与 format 命令。 - 格式化文件:确认配置可以被读取后,再运行
sing-box format -w -c config.json。建议先复制一份原始文件,因为格式化会改变排版,不能替代备份。
如果转换工具提供“仅生成节点列表”与“生成完整配置”两个选项,优先选择符合当前客户端要求的完整配置;若只能得到节点列表,就需要自行补足入站、DNS、route 和默认出站,不要把生成结果直接当成完整配置使用。
转换成功但导入失败:按四层定位
| 层级 | 表现 | 检查方法 | 处理方式 |
|---|---|---|---|
| 下载层 | 更新超时、返回 HTML 或 401/403 | 浏览器查看实际响应;确认 URL、授权和网络 | 重新复制订阅地址,必要时撤销旧令牌并生成新链接 |
| 解析层 | JSON parse error、字段类型错误 | 用文本编辑器检查括号、引号和逗号,再运行 sing-box check | 重新转换,或按当前 sing-box 文档修正字段 |
| 结构层 | 能打开但没有节点、没有选择器或没有默认出口 | 搜索 outbounds、tag、route 和 final | 比较原始订阅与转换结果,确认是否只输出了节点列表 |
| 连接层 | 配置能启动但访问目标失败 | 先测试单个节点,再看 DNS、TLS、MTU、路由和系统代理 | 一次只改一个变量,保留能启动的旧配置以便回滚 |
为什么转换后节点数量减少
常见原因包括输入格式本身不完整、转换器不支持某种协议字段、节点被筛选规则排除,或原始内容中混有非标准 URI。Sub-Store 官方仓库也提示,部分客户端导出的 URI 可能不是标准 URI,因此不能仅凭“链接能打开”判断每个节点都能无损转换。
为什么有节点却不能启动
节点通常属于 outbounds,而完整配置还可能需要 dns、inbounds、route 和默认出口。sing-box 官方配置结构把这些部分分别列出,因此“转换出节点”与“生成可运行配置”是两个不同结果。先用 sing-box check 解决结构错误,再排查连接参数。
协议字段缺失怎么办
Reality、Hysteria2、TUIC、WireGuard 等协议的字段并不完全相同。若转换后缺少服务器名、TLS、密钥、SNI、ALPN 或传输层参数,不要凭经验补写随机值;回到原始订阅核对字段,或改用能直接输出 sing-box 格式的来源。无法核实的字段应标记为“未核实”。
本地文件与远程订阅怎么选:安全和维护对比
| 方式 | 适合谁 | 优点 | 注意事项 |
|---|---|---|---|
| 直接 Remote Profile | 已有 sing-box JSON 订阅 | 步骤少,可按远程地址更新 | 依赖远程地址;更新前应保留旧版本 |
| 第三方在线转换 | 需要快速处理 Clash 或 URI | 无需本地部署 | 订阅凭据会经过第三方;不要提交长期有效的完整链接 |
| 本地或自建转换 | 重视隐私、需要批量处理 | 输入不必交给公共转换站 | 需要自己维护工具、依赖和输出模板 |
| 手动编辑 JSON | 只需修正少量字段 | 可精确控制 DNS、route 和出口 | 字段必须匹配当前 sing-box 构建版本,改动前要备份 |
建议采用“原始订阅、转换结果、可运行旧配置”三份分开保存的方式。订阅链接可视为凭据:不要公开分享;如果怀疑泄露,应在订阅来源处撤销旧链接并重新生成。更换令牌后,还要同步更新远程配置地址和客户端中的保存项。
如果你使用的是图形客户端,先导入远程配置或本地 JSON,再确认客户端显示的配置内容;如果使用命令行,先执行 sing-box check,通过后再启动服务。JSON Schema 只能帮助编辑器补全和验证字段,不能证明节点本身可连接;官方文档也提供了生成与当前二进制匹配 Schema 的 sing-box schema -o schema.json 命令。查看官方 JSON Schema 说明。
最小可执行检查清单
- 确认订阅实际返回的是 JSON、YAML、Base64 还是 URI。
- 确认没有把完整订阅链接、UUID、密码、私钥和令牌贴到公开位置。
- 确认输出文件名为
config.json,内容不是 HTML 错误页。 - 确认
outbounds、节点tag、DNS 和 route 存在且结构合理。 - 在配置目录运行
sing-box check,预期是命令返回成功且没有配置错误。 - 通过检查后再运行
sing-box format -w -c config.json,并保留原始备份。 - 导入客户端后先测试单个节点和一个明确目标,再决定是否开启系统代理或 TUN。
- 出现失败时按下载、解析、结构、连接顺序回滚,不要同时修改 DNS、MTU、TUN 和节点参数。
常见问题
sing-box 可以直接导入 Clash 订阅吗?
不能一概而论。只有当当前客户端或转换环节明确支持该格式时才可能直接处理。更稳妥的做法是先查看返回内容;如果是 Clash YAML,就转换成 sing-box JSON,再用 sing-box check 校验。
订阅转换成 JSON 后为什么没有节点?
先确认原始订阅本身能否返回节点,再检查转换工具的输入类型和筛选条件。如果原始内容是 HTML、授权失败页面或不兼容 URI,转换结果可能为空。不要只看文件能下载,还要搜索 outbounds 和节点 tag。
只有 outbounds 的 JSON 能直接使用吗?
不一定。outbounds 通常只是出站或节点部分,完整运行还可能需要 DNS、inbounds、route 和默认出口。先运行 sing-box check,再确认客户端是否要求完整配置。
在线订阅转换安全吗?
不能默认安全。订阅链接可能包含令牌,提交在线服务意味着凭据会经过第三方。优先使用直接提供的 sing-box 配置、自建转换或本地工具;如果怀疑链接泄露,应撤销旧令牌并重新生成。
sing-box check 通过后就一定能连接吗?
不一定。check 主要验证配置结构和字段,不能证明服务器可达、DNS 正常、TLS 参数匹配或节点当前可用。通过后还应单独测试节点、DNS、路由和目标应用。