选型参考 预计阅读 12 分钟

Clash 订阅格式科普:base64、YAML 与通用格式的区别及相互转换

对比 Clash YAML 订阅、base64 分享链接与通用订阅格式的结构差异,说明各客户端的兼容情况,以及用转换工具在格式之间迁移时需要注意的字段丢失问题。

先分清编码、链接与配置文件

“Clash 订阅”不是单一格式。服务端返回的内容可能是一整份 Clash YAML,也可能是多条分享链接组成的文本,再套一层 base64 编码。三者看起来都能通过一个 URL 导入,但客户端拿到响应后,走的是不同解析路径。

最容易混淆的是 base64。它只是把字节转换成可打印字符的编码方式,不定义节点有哪些字段,也不决定客户端支持什么协议。把一组 ss://trojan://vmess:// 链接逐行排列,再对整段文本做 base64 编码,通常就被称为“base64 订阅”。解码以后,真正有意义的仍是每一条分享链接。

Clash YAML 则是一份有层级的配置。除了节点,它还能携带策略组、分流规则、DNS、监听端口、规则集合与 TUN 参数。通用订阅通常只负责传递节点,策略怎么组合、流量怎么分,交给客户端模板或转换器补齐。

形式 典型开头或结构 能表达的内容 主要用途
Clash YAML proxies:proxy-groups: 节点、策略组、规则、DNS、TUN 等 直接作为 Clash 或 mihomo 配置
明文分享链接 ss://trojan:// 单个节点的连接参数 跨客户端复制节点
base64 订阅 连续字母、数字及编码符号 通常是编码后的多条分享链接 以一个订阅地址分发节点集合
提供商专用 JSON { 或客户端定义字段 取决于服务端和目标应用 特定客户端或 API 对接

Clash YAML 为什么不只是节点列表

一份可直接运行的 Clash YAML 通常至少涉及 proxiesproxy-groupsrules 三部分。前者保存节点参数,中间一段定义手动选择、自动测速或故障转移等策略,最后一段决定连接进入哪个策略组。

mixed-port: 7890
allow-lan: false
mode: rule

proxies:
  - name: HK-Trojan-01
    type: trojan
    server: edge.example.net
    port: 443
    password: example-password
    sni: cdn.example.net

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - HK-Trojan-01
      - DIRECT

rules:
  - DOMAIN-SUFFIX,github.com,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

这段配置把混合代理端口设为 7890,并建立一个名为 PROXY 的手动选择组。实际订阅中还可能出现 rule-providersproxy-providersdnssniffertun 与持久化缓存设置。它们都超出了单条分享链接的表达范围。

完整配置与代理提供者不是一回事

mihomo 配置支持通过 proxy-providers 引用远端节点集合。主配置保留 DNS、规则和策略组,远端地址只更新节点。这个结构适合把“本地分流逻辑”与“远端节点来源”拆开管理。

proxy-providers:
  airport-a:
    type: http
    url: https://sub.example.net/token
    path: ./providers/airport-a.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

这里的远端内容通常是 provider YAML,顶层可能只有 proxies:,并不是一份能独立启动内核的完整配置。如果把 provider 文件直接导入只接受完整 Profile 的客户端,常见结果是缺少端口、策略组或规则,客户端会报告配置校验失败。

YAML 对缩进和数据类型敏感

  • 使用空格缩进,不要用 Tab 字符混排。
  • 端口 443通常是数字,密码、名称和服务器地址通常是字符串。
  • 名称包含冒号、井号或前后空格时,建议使用引号。
  • true 与字符串 "true"含义不同,不能随意互换。
  • 同名节点进入策略组后可能产生歧义,转换时应先做名称去重。

base64 订阅与通用分享链接怎么组织

通用订阅的常见原始内容是一行一个 URI。每种协议自行规定 URI 中的服务器、端口、认证信息和扩展参数。比如 Shadowsocks 常见 ss://,Trojan 使用 trojan://,VMess 常见 vmess://,VLESS 使用 vless://。mihomo 还支持更多协议类型,但旧版 Clash 内核和不同图形客户端的支持范围并不一致。

ss://[email protected]:8388#SS-01
trojan://[email protected]:443?sni=cdn.example.net#Trojan-01
vless://[email protected]:443?type=ws&security=tls&host=cdn.example.net#VLESS-01

链接末尾的片段通常用作节点名称,查询参数则可能保存 TLS、SNI、WebSocket 路径、Host、传输方式或指纹参数。不同实现对参数命名和默认值的处理存在差异。一个客户端能识别 URI 前缀,不代表它一定完整理解其中每个扩展字段。

base64 解码后可能还有第二层编码

整份订阅解码以后,VMess 链接内部还可能包含一段 base64 编码的 JSON;Shadowsocks 的用户信息也存在多种 URI 表达方式。排查时要按层次处理:先解码订阅正文,再逐行识别协议,最后交给对应协议解析器。直接对整段内容反复解码,容易破坏原始链接。

  1. 获取订阅响应,保留原始文本副本。
  2. 检查开头是否已经出现 proxies:、协议 URI 或 JSON 结构。
  3. 只有在内容确实符合 base64 字符特征时才尝试解码。
  4. 解码后按换行拆分,过滤空行,再逐条识别协议。
  5. 检查节点数量、名称、端口与 TLS 参数是否完整。

客户端兼容性取决于内核与导入入口

同一订阅在两个客户端中表现不同,通常不是订阅地址失效,而是内核协议支持、客户端预处理逻辑和导入入口不同。Clash for Windows 0.20.39 已停止维护,其 Profiles 页面主要面向 Clash 配置;mihomo 系客户端通常能解析更广的协议字段,但图形界面是否接受原始通用订阅,仍取决于客户端自己的订阅模块。

完整 YAML 的导入路径

以 Clash for Windows 0.20.39 为例,常见路径是「Profiles」→ 在顶部输入订阅 URL →「Download」。导入后应先看配置卡片是否出现,再切到「Proxies」确认策略组和节点。若只看到节点却没有预期规则,服务端可能返回了经客户端模板处理的节点集合,而不是原始完整 YAML。

在采用 mihomo 内核的 2.x 图形客户端中,入口常见为「订阅」→「新建」→「URL」。名称会随客户端变化,但检查逻辑一致:更新日志是否返回 HTTP 200、配置校验是否通过、策略组数量是否符合预期、内核是否成功重载。

端口号不属于订阅节点本身

789078919090 经常出现在 Clash 配置里,但作用不同。7890常用于 HTTP 与 SOCKS 混合入口,7891在部分旧配置中用于 SOCKS,9090常用于外部控制接口。通用分享链接描述的是远端代理节点,不会替本地客户端决定监听端口。

因此,把通用订阅转换成 YAML 时,转换器往往要额外注入 mixed-port、策略组和规则。两次转换结果即使节点完全相同,也可能因为模板不同而表现出不同的分流行为。

格式转换实际做了哪些事

所谓“订阅转换”通常包含四步:识别输入、解析节点、映射字段、套用输出模板。输入可以是完整 YAML、provider YAML、base64 链接集合或明文 URI;输出则可能是 Clash YAML、mihomo YAML,或者另一种客户端能读取的订阅文本。

通用订阅转 Clash YAML

这条路径最常见。转换器把每条分享链接解析为 proxies 项,再根据模板创建策略组与规则。最低限度要确认以下字段:

  • 协议类型、服务器地址、端口与认证信息。
  • TLS 是否启用,SNI 或 servername是否保留。
  • WebSocket、gRPC 等传输方式及路径参数。
  • UDP 开关、跳过证书验证设置及客户端指纹参数。
  • 节点名称编码是否正常,重名是否自动增加后缀。
  • 生成目标是旧 Clash 语法还是 mihomo 扩展语法。

Clash YAML 转通用订阅

反向转换一定会丢掉配置层信息。分享链接能带走节点连接参数,却带不走 proxy-groupsrulesrule-providers、DNS、TUN、嗅探与监听端口。再次导入其他客户端后,看到节点数量一致,也不能据此判断两份配置等价。

完整 YAML 转 provider YAML

这一步通常只抽取 proxies,输出一个供 proxy-providers引用的文件。原配置中的分流规则和策略组不会自动进入主配置。主配置里还需要通过 use:把 provider 放进指定策略组,否则节点虽已下载,界面中仍可能没有可选项。

proxy-groups:
  - name: AUTO
    type: url-test
    use:
      - airport-a
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 80

字段丢失通常发生在这六处

一、协议扩展字段没有对应目标

源格式可能包含客户端指纹、Reality 公钥、短 ID、ECH、拥塞控制或特定传输参数,而目标格式没有等价字段。转换器可能忽略它们,也可能写入目标客户端不认识的扩展键。结果通常不是立即报错,而是节点能显示、连接却超时。

二、规则与策略组被模板覆盖

从完整 YAML 转换时,如果工具先抽取节点再套模板,原来的 DIRECTREJECT、故障转移组和规则顺序会被替换。Clash 规则按从上到下匹配,顺序变化本身就会改变结果。例如把 GEOIP,CN,DIRECT放在特定域名代理规则之前,可能让目标连接提前直连。

三、节点名称参与了筛选

不少模板用正则按名称建立“香港”“日本”“低倍率”等策略组。转换后若名称中的旗帜、空格或地区缩写改变,筛选结果可能从 30 个节点降为 0 个。迁移前后应比较策略组实际成员,而不只比较订阅总数。

四、布尔值和默认值发生变化

源链接没有写某个参数时,两个客户端可能采用不同默认值。例如 UDP、TLS 验证、SNI 推导与传输 Host 都可能依赖默认行为。转换器显式写入一个值后,连接行为反而会和原客户端不同。

五、DNS 与 TUN 完全留在旧配置

节点迁移成功不等于系统代理路径迁移成功。Fake-IP 地址池、DNS 上游、域名嗅探、路由排除项、TUN 自动路由都属于本地配置。通用订阅不承载这些字段。切换客户端后,应重新检查「设置」→「系统代理」、「设置」→「TUN 模式」及 DNS 配置,而不是沿用旧客户端的状态判断。

六、订阅更新机制不同

完整 YAML 可以直接携带固定节点;provider 则有独立的 interval和缓存路径;图形客户端还可能维护自己的更新时间。示例中的 interval: 3600表示每 3600 秒请求一次,而健康检查的 interval: 600表示每 600 秒测试一次,两者不是同一任务。

一套可复查的迁移流程

格式转换最稳的做法不是“一键导入后直接接管流量”,而是保留旧配置并分阶段核对。下面这套流程适用于从通用订阅迁移到 mihomo YAML,也适用于两个 Clash 图形客户端之间换配置。

  1. 记录基线。记下原客户端节点总数、常用策略组、系统代理端口、DNS 模式和 TUN 状态。
  2. 判断输入。确认返回的是完整 YAML、provider YAML、明文 URI 还是 base64 文本。
  3. 选择目标。明确目标内核是旧 Clash 还是 mihomo,避免生成目标内核不支持的字段。
  4. 先转节点。核对服务器、端口、协议、TLS、SNI、传输层与名称,不急着覆盖规则。
  5. 再套模板。加入策略组、规则、DNS 与监听端口,检查引用名称是否一致。
  6. 执行配置校验。在客户端重载前查看解析错误,重点检查 YAML 缩进、重复键和不存在的策略组。
  7. 小流量验证。先关闭 TUN,只启用系统代理;确认浏览器路径后,再测试 DNS 和 TUN。
  8. 比较实际行为。分别测试直连域名、代理域名、被拒绝域名和 UDP 场景,确认规则命中符合预期。

如果转换后节点显示正常但全部超时,先抽取一个节点对照源链接,检查端口、SNI、TLS 与传输路径。如果只有部分网站异常,重点看规则顺序和 DNS。如果系统应用不走代理,则检查系统代理或 TUN,而不是继续修改订阅格式。

选格式时直接按使用目标判断

  • 需要完整复现分流:优先使用与目标内核兼容的完整 YAML,并保留规则、策略组和 DNS。
  • 只想跨客户端搬节点:使用通用分享链接或 base64 订阅,目标客户端重新负责策略。
  • 想长期维护本地规则:主配置固定,节点通过 proxy-providers远程更新。
  • 需要兼容 mihomo 扩展协议:转换目标明确选择 mihomo,避免退回旧 Clash 字段集合。
  • 来源格式不确定:先查看响应正文,再决定是否解码或转换,不要连续套多个转换器。

归根结底,base64 解决的是文本传输,分享链接描述的是单个节点,Clash YAML 管的是整套代理行为。转换可以搬运字段,却不能凭空保留目标格式表达不了的信息。迁移前先分清这三层,节点“导入成功但不能用”、规则消失和 DNS 行为突变的问题会少很多。

安装客户端并验证订阅

先选择对应平台,再按教程导入订阅、检查策略组、系统代理与 DNS。

去下载页 看教程
下载Clash