client/subscription · 集群 A · 订阅原理与格式 · 2/6

Clash YAML、Base64 与 sing-box 订阅格式有什么区别

发布时间 待核实核实日期 待核实最近更新 待核实测试状态 Not Tested
Answer First · 核心结论

Base64 订阅只是一份编码后的节点链接清单,Clash YAML 是包含节点、策略组和规则的完整配置,sing-box 使用 JSON 结构并把入站、出站、路由分开描述。三者承载的信息量不同,客户端只认自己支持的格式,所以导入失败多数是格式不匹配而不是订阅坏了。

三种格式的核心区别是什么

三种格式的根本区别在于“装了多少东西”:Base64 只装节点,Clash YAML 装节点加分流逻辑,sing-box JSON 装节点、路由与 DNS 的完整描述,且结构与 Clash 不同。

对比项 Base64 节点列表 Clash YAML sing-box JSON
文本外观 一整段编码字符串 缩进分层的键值文本 花括号嵌套的 JSON
承载内容 仅节点链接(解码后每行一个) 节点 + 策略组 + 规则 + 部分 DNS 设置 入站、出站、路由、DNS 分块描述
是否含分流规则 不含 通常含 可含,结构独立
常见适配客户端 v2rayN、v2rayNG、Shadowrocket 等通用客户端 Clash Verge Rev、ClashX 系列、Stash、OpenClash 等 sing-box 官方客户端及基于其内核的应用
可读性 需解码 较好 较好但嵌套深
手工修改难度 低(只改节点) 中 中到高

一句话理解:Base64 是“购物清单”,Clash YAML 是“带路线图的购物清单”,sing-box 是“另一套地图标准的完整导航方案”。

Base64 节点列表:最通用也最简单

Base64 订阅是兼容面最广的格式,代价是不含任何分流逻辑,分流需要客户端自己补。

解码后,每一行是一条节点分享链接,形如 协议名://认证信息@地址:端口?参数#节点名。客户端逐行解析,生成节点列表。它的特点:

  • 优点:几乎所有通用客户端都能读,结构简单,排查时解码即可看清节点。
  • 缺点:没有策略组和规则,客户端要么使用内置规则,要么全部走代理或手动选择。
  • 风险提示:Base64 不是加密,解码后节点地址与认证信息一览无余,因此转发订阅文本与转发链接一样危险,这一点在 订阅链接泄露有哪些表现 中有展开。

Clash YAML:带策略组和规则的完整配置

Clash YAML 订阅是一份可以直接运行的完整配置,导入后通常就有分组、自动测速和分流规则。

典型的顶层结构如下:

mixed-port / port        本地监听端口
dns                      DNS 设置(可选)
proxies                  节点列表
proxy-groups             策略组:手动选择 / 自动测速 / 故障转移 / 负载均衡
rules 或 rule-providers  分流规则:哪些域名直连、哪些走代理

它的好处是“开箱即用”,坏处是“服务端写什么你就用什么”。如果你想修改规则,直接改订阅下载下来的文件,下次更新订阅时会被覆盖。更稳妥的做法是使用客户端的覆写或合并功能,把个人规则放在订阅之外,详见 多个机场订阅如何合并。

此外,Clash 生态有多个内核分支,较新的 Clash Meta(mihomo)内核支持的协议与字段比早期内核多。同一份 YAML 在旧内核上报“不支持的协议类型”并不罕见,此时应升级客户端或改用支持该协议的内核,而不是怀疑订阅。协议层面的区别可以参考 代理协议 专题。

sing-box JSON:结构更严格的另一套体系

sing-box 使用 JSON 配置,把“流量从哪进来、往哪出去、按什么规则路由”拆成独立模块,与 Clash 不能直接互换。

主要模块包括:

模块 作用 与 Clash 的大致对应
inbounds 本地监听方式(混合端口、TUN 等) 端口与 TUN 设置
outbounds 节点与选择器 proxies + proxy-groups
route 路由规则 rules
dns DNS 服务器与规则 dns

由于 sing-box 版本迭代较快,配置字段可能随版本调整。拿到 sing-box 订阅却启动失败时,常见原因是配置字段与本地内核版本不匹配。排查时优先确认客户端版本与服务商提供的配置版本说明是否一致。

导入失败时如何判断是格式问题

导入失败先看报错关键词,再看订阅文本开头,九成以上的格式问题可以在两分钟内定位。

导入失败
 ├─ 报错含 "yaml" / "unmarshal" / "invalid config"
 │    └─ 客户端期望 YAML,但拿到了 Base64 或 HTML 错误页 → 换 Clash 格式链接或做订阅转换
 ├─ 报错含 "unsupported" / "unknown type"
 │    └─ 内核不支持某协议 → 升级客户端或更换内核
 ├─ 报错含 "json" / "unknown field"
 │    └─ sing-box 字段与版本不匹配 → 核对客户端版本
 └─ 导入成功但节点为空
      └─ 可能是账号状态问题或解析失败 → 见订阅失效排查

一个容易忽略的情况是:订阅地址返回的其实是一个 HTML 页面(例如被拦截、域名跳转或服务端报错页),客户端按 YAML 去解析自然失败。用浏览器打开订阅链接看一眼返回内容,往往比反复点“更新”有效。节点为空的情况可以参考 订阅导入后节点为空怎么办。

同一订阅在不同设备上的格式组合

多设备用户最常见的困惑是“电脑上好好的,手机上导不进去”,这通常是因为不同设备上的客户端期望的格式不同,而不是订阅在某台设备上坏了。

设备场景 常见客户端类别 通常需要的格式 获取建议
Windows / macOS Clash 系桌面客户端 Clash YAML 使用服务商的 Clash 专用链接
iOS 通用型或 Clash 系客户端 Base64 或 Clash YAML,视客户端而定 查看客户端支持的导入方式
Android Clash 系或 v2rayNG 类客户端 Clash YAML 或 Base64 按所装客户端选择链接
路由器 OpenClash 等插件 Clash YAML 使用 Clash 专用链接,见 路由器方案

实践中,建议把每台设备用的是哪种链接记录下来。这样在重置订阅或更换服务商时,可以清楚知道每台设备该替换成哪一种格式的新链接,避免把 Base64 链接贴进 Clash 客户端后又陷入“导入失败”的排查循环。移动端的具体导入方式可参考 移动客户端 专题。

选哪种格式更合适

格式选择跟着客户端走:用 Clash 系客户端就要 Clash YAML,用 sing-box 就要 sing-box JSON,用通用客户端就用 Base64;不确定时优先使用服务商针对你的客户端提供的专用链接。

  • 如果服务商后台为不同客户端提供了不同链接,优先直接使用对应链接,减少转换环节。
  • 如果只提供一种格式而你的客户端不支持,再考虑订阅转换,原理与注意事项见 订阅转换是什么。
  • 协议资料待核实的品牌,不建议根据格式去猜测协议,以服务商文档为准。

在选择服务前,可以在 机场品牌库 查看各品牌标注的客户端类型(自研 + 第三方或仅第三方),或进入 字段说明 了解“客户端”“协议”等字段的含义与数据状态。

常见问题

怎么判断订阅返回的是哪种格式?

看文本开头即可大致判断:以 proxies、proxy-groups 等键名开头的是 Clash YAML;以花括号开头、包含 outbounds 的是 sing-box JSON;一整段没有换行的字母数字串通常是 Base64,解码后是一行行节点链接。

Base64 订阅能直接导入 Clash 吗?

取决于客户端。较新的 Clash 系内核在部分场景下可以识别节点列表,但很多客户端只接受完整 YAML,此时需要服务端提供 Clash 格式链接或通过订阅转换生成配置。

sing-box 格式和 Clash 格式能互相转换吗?

节点层面大多可以转换,但规则、策略组和 DNS 等结构差异较大,转换后通常需要检查和调整,不能假设一一对应。

协议待核实的品牌,订阅格式会受影响吗?

订阅格式与协议是两回事。协议资料待核实只说明本站没有拿到可核对的协议信息,实际导入时应以服务商提供的订阅格式说明为准。

信息来源与更新时间

信息来源
品牌清单资料(品牌公开信息整理)
测试范围
本站未进行测速与解锁实测,所有能力描述均为资料声明或未测试状态。
发布时间
待核实
核实日期
待核实
最近更新
待核实

字段含义与数据状态见 字段说明;核查进度见 品牌动态与核查日志。