client/subscription · 集群 A · 订阅原理与格式 · 2/6
Clash YAML、Base64 与 sing-box 订阅格式有什么区别
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 等结构差异较大,转换后通常需要检查和调整,不能假设一一对应。
协议待核实的品牌,订阅格式会受影响吗?
订阅格式与协议是两回事。协议资料待核实只说明本站没有拿到可核对的协议信息,实际导入时应以服务商提供的订阅格式说明为准。
信息来源与更新时间
- 信息来源
- 品牌清单资料(品牌公开信息整理)
- 测试范围
- 本站未进行测速与解锁实测,所有能力描述均为资料声明或未测试状态。
- 发布时间
- 待核实
- 核实日期
- 待核实
- 最近更新
- 待核实