订阅管理 阅读约 9 分钟

Clash 订阅格式详解:YAML 配置、Base64 链接与通用订阅互转方法

拿到的订阅链接客户端认不出?先分清 Clash YAML、Base64 节点列表与各协议专用格式的差异,再介绍订阅转换的工作原理、常用参数与隐私注意事项。

三种常见订阅格式的本质区别

把一条订阅链接丢进浏览器打开,返回的内容形态并不统一。多数排障问题的起点,其实是没先分清返回的到底是哪种格式,就直接假设客户端"应该认得"。目前流通的订阅内容大致分三类,处理逻辑完全不同。

  • Clash YAML 配置:响应体本身就是一份完整的 YAML 文档,包含 proxiesproxy-groupsrules 等字段,可以直接被 Clash / Clash Meta / mihomo 内核解析并生效,不需要任何转换步骤。
  • Base64 节点列表:响应体是一整段 Base64 字符串,解码后是若干行以 vmess://ss://trojan:// 等协议前缀开头的节点链接。这类格式常见于 V2Ray/V2RayN 生态,Clash 内核无法直接识别整段响应,必须先解码再逐条转换为 proxies 条目。
  • 协议专用分享链接的裸文本合集:不经 Base64 包装,直接把节点链接逐行罗列返回,常见于个人搭建的小型面板。处理方式与 Base64 列表类似,只是省去了解码这一步。

判断方法很直接:用浏览器或 curl 打开订阅链接,看返回内容第一行。如果是 port:mixed-port:proxies: 这类 YAML 键值对,就是 Clash 原生配置;如果是一长串没有换行、全是字母数字加等号结尾的字符,大概率是 Base64;如果每行都以协议名加 :// 开头,则是裸文本节点列表。

提示:很多面板同时提供多种格式的订阅地址,区别通常只在 URL 参数或路径后缀上(例如 ?clash=1/clash),遇到无法识别的订阅前先检查面板后台是否已经提供了 Clash 专用链接,往往比手动转换更省事。

Clash YAML 配置的关键字段

能被 Clash 内核直接使用的订阅,骨架大致如下:

port: 7890
socks-port: 7891
mode: rule
log-level: info

proxies:
  - name: "hk-01"
    type: ss
    server: example.com
    port: 443
    cipher: aes-256-gcm
    password: "your-password"

proxy-groups:
  - name: "auto"
    type: url-test
    proxies:
      - hk-01
    url: "http://www.gstatic.com/generate_204"
    interval: 300

rules:
  - DOMAIN-SUFFIX,google.com,auto
  - GEOIP,CN,DIRECT
  - MATCH,auto

其中 proxies 描述节点本身的连接参数,proxy-groups 把节点组织成策略组(自动测速、手动选择、负载均衡等),rules 决定流量按什么条件分配到哪个策略组。三段缺一不可,如果订阅返回的 YAML 只有 proxies 而没有后两段,多数客户端会自动补一套默认策略组和规则,但具体行为因客户端而异,建议导入后打开配置查看器确认。

如果使用的是 Clash Meta(mihomo)内核,还可能出现 proxies 里带 tfosmuxreality-opts 等扩展字段,这些是原版 Clash 不识别的新协议参数,导入原版内核会直接报错或跳过对应节点,这也是判断"要不要换内核"的一个直接信号。

Base64 节点列表的解码与转换原理

Base64 格式的订阅本质上只是"把一堆分享链接打包成一段文本",方便客户端一次性拉取更新,它并不是加密,只是编码。解码之后,常见节点链接大致是这样的结构:

ss://[email protected]:443#hk-01
vmess://eyJ2IjoiMiIsInBzIjoiaGstMDIiLCJhZGQiOiJleGFtcGxlLmNvbSIsInBvcnQiOiI0NDMi...}
trojan://[email protected]:443?sni=example.com#hk-03

逐条转换的思路是固定的:

  1. 先按 URL 参数拆出协议类型(ss / vmess / trojan / hysteria2 等)。
  2. 把用户信息段(通常也是 Base64 编码,如 ss:// 的用户信息部分)再解码一次,拿到加密方式与密码。
  3. 把服务器地址、端口、传输层参数(wsgrpc、TLS 相关字段)映射成 Clash YAML 里 proxies 条目对应的字段名。
  4. 把节点名(# 后面的部分,通常经过 URL 编码)解码还原成可读名称。

手动做这件事对单个节点没问题,但订阅通常包含几十上百个节点,逐条手改基本不现实,实际操作中几乎都依赖订阅转换服务完成批量转换,下一节具体说明。

订阅互转的两条常见路径

把 Base64/裸文本订阅转换成 Clash 能识别的 YAML,常见做法分两类,各有取舍。

路径一:客户端内置转换

部分安卓客户端在"新建配置"或"导入订阅"环节内置了格式探测逻辑:粘贴链接后客户端先尝试按 Clash YAML 解析,失败则自动按 Base64 解码再逐条转换生成本地配置。这条路径不依赖第三方服务,数据全程在本机处理,是隐私角度最干净的方案,但转换能力取决于客户端本身对协议字段的支持程度,遇到较新的传输层参数(例如某些 hysteria2 混淆参数)可能转换不完整或直接丢弃对应节点。

路径二:订阅转换服务中转

另一种做法是把原始订阅链接交给一个转换服务,由服务端完成解码与格式重写,再把生成的 Clash YAML 链接交给客户端订阅。这类服务通常支持自定义参数,常见的有:

  • target:目标格式,填 clashclashr
  • url:原始订阅地址,多个订阅用 | 分隔可以合并处理。
  • config:远程规则模板地址,决定生成的 proxy-groupsrules 结构,不填则走转换服务的默认模板。
  • emoji / udp / tfo:布尔参数,控制节点名前是否加国旗表情、是否强制开启 UDP 转发与 TCP Fast Open 标记。

这条路径的优势是转换能力更强、模板可复用,适合需要统一多个订阅源命名规则、合并去重的场景;代价是原始订阅链接(包含账号身份信息)会经过第三方服务器,存在隐私暴露面,选择时要留意服务是否公开声明日志策略,更谨慎的做法是自建开源转换服务,把中转环节控制在自己手里。

注意:订阅链接里通常携带用户唯一标识(token 或用户名密码),一旦经第三方转换服务中转,等同于把账号凭证暴露给了该服务。不清楚转换服务背景时,优先选择客户端内置转换或本地部署的转换工具,避免把订阅原文交给不受控的第三方。

转换后常见的失效场景与排查

订阅转换成功导入,不代表节点一定能正常连接。以下几种情况在实际使用中出现频率较高。

节点数量对不上

转换后节点数量比原订阅少,通常是转换服务或客户端不支持某个协议字段导致整条节点被跳过,而不是报错中断。排查方法是先看原始 Base64 解码后的节点总数,再对比生成的 YAML 里 proxies 条目数,如果确实少了,检查缺失节点的协议类型是否偏冷门(例如某些实验性传输层组合),换一个转换模板或更新到支持该协议的最新内核版本往往能解决。

策略组里看不到新节点

如果使用了远程规则模板(config 参数指定的模板),策略组的节点筛选条件是按节点名关键词匹配写死的,新节点名称如果不符合模板里的关键词规则(比如模板只筛"HK|SG|JP"开头的节点),就不会被自动归入对应策略组。这种情况需要检查模板里的筛选正则,或者干脆去掉远程模板,让转换服务用默认的"全部节点入一个自动测速组"策略。

转换后 TLS/SNI 参数丢失

部分协议(尤其是 Trojan 和 VMess 的 WebSocket+TLS 组合)对 SNI 和 skip-cert-verify 字段比较敏感,转换服务如果没有正确解析原始链接里的 sniallowInsecure 参数,生成的节点会连接超时或握手失败。这种情况建议手动打开生成的 YAML,对照原始分享链接的参数,补全或修正 servernameskip-cert-verify 字段。

更新周期设置不当导致订阅过期

转换生成的订阅链接本质上是"实时代理请求",每次客户端刷新订阅时,转换服务都会重新拉取原始订阅并重新转换一遍。如果原始订阅本身设有更新频率限制(常见的是几小时一次),客户端刷新过于频繁会被原始面板判定异常请求而拒绝响应,进而导致转换服务返回空节点列表。客户端里的订阅刷新间隔建议设置在 6~12 小时,避免手动频繁点击刷新。

选择格式与转换方式的实用建议

  • 如果服务商直接提供 Clash 专用订阅链接,优先使用,跳过所有转换环节,减少出错概率。
  • 只有 Base64/裸文本订阅时,先尝试客户端内置转换,转换失败或节点缺失明显时才考虑第三方转换服务。
  • 使用第三方转换服务时,尽量选择开源且可自行部署的项目,把原始订阅凭证留在自己控制的服务器上处理。
  • 转换完成后,先用 url-test 策略组做一次全量测速,确认节点数量和延迟正常,再切换到日常使用的规则模式。
  • 规则模板与节点命名规则最好保持稳定,减少因服务商修改节点名称格式导致策略组匹配失效的情况。

订阅格式的转换看起来是个格式转换的小问题,但背后牵涉的是节点信息在多方之间的流转路径。弄清楚每一步数据经过了谁的服务器、以什么形式暴露,比单纯让"链接能用"更值得花时间确认。

下载客户端