Clash 订阅链接格式详解:YAML、Base64 与 URI 节点互转方法

解释 Clash YAML 订阅、Base64 编码订阅与单条 URI 节点的结构差异,介绍订阅转换的原理、常用参数和转换后的检查要点。

订阅链接、编码和配置格式的区别

订阅链接是获取内容的地址,YAML 是描述配置的数据格式,Base64 是编码方式,URI 节点则是单个代理的分享表示。这四个概念不在同一层。一个以 https:// 开头的订阅地址,返回的内容可能是完整 YAML,也可能是经过 Base64 编码的多行节点链接。

判断能否导入 Clash,重点不是链接后缀有没有 .yaml,而是响应正文的结构与客户端内核能否解析它。有些服务会按照请求中的 User-Agent 返回不同内容,因此浏览器打开的结果不一定等于客户端更新订阅时收到的结果。

内容类型常见特征包含的信息使用方式
完整 Clash YAMLproxies:、proxy-groups:、rules:节点、策略组、规则及其他设置通常作为配置导入
节点提供器 YAML主要包含 proxies:节点列表由主配置的 proxy-providers 引用
Base64 订阅较长编码文本,解码后可能是多行 URI通常是节点参数先解析编码和节点,再生成目标格式
单条 URIss://、trojan:// 等单个代理及可选传输参数使用支持该协议的导入器或转换器

Clash YAML:完整配置与节点列表

YAML 通过键值和缩进表达结构。下面是一份用于说明字段关系的最小配置:本地混合代理端口为 7890,代理服务器端口为 8388,两者用途不同。示例域名和密码只用于展示语法,不提供可连接的代理服务。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info

proxies:
  - name: "示例 SS"
    type: ss
    server: node.example.com
    port: 8388
    cipher: aes-128-gcm
    password: "test"
    udp: true

proxy-groups:
  - name: "出口选择"
    type: select
    proxies:
      - "示例 SS"
      - DIRECT

rules:
  - MATCH,出口选择

三个核心字段的分工

  • proxies 定义连接参数,包括协议、服务器、端口和认证信息。
  • proxy-groups 定义如何选择节点。示例中的 select 允许手动选择“示例 SS”或 DIRECT。
  • rules 决定连接交给哪个策略。这里的 MATCH,出口选择 是最终兜底,并不是按地区或域名细分的规则集。

只带 proxies 的 YAML 不等于完整配置。它适合做节点提供器的数据文件;即使某个客户端允许直接导入,也不能据此认为已经具备完整分流策略。自动补全、配置合并和覆盖功能属于客户端行为,应分别确认。

YAML 解析失败先看缩进和字符串

缩进使用空格,不要混用 Tab。节点名称建议加引号,尤其是含有冒号、井号等符号时。密码也建议使用引号,避免某些文本被当成数字或布尔值。修改完后要同时检查结构合法性与内核支持情况:能被 YAML 解析,并不代表每个代理字段都能被当前内核使用。

Base64 与 URI:解码后再识别协议

常见的 Base64 订阅把多条 URI 按行连接,再整体编码。转换时需要先还原文本,然后逐行识别协议。也存在直接返回明文 URI 列表的服务,不能把所有订阅都强行解码一次。

以 Shadowsocks 分享链接为例

下面使用常见的 SIP002 表示形式:认证段编码为 Base64,服务器和端口保留在外层。认证段 YWVzLTEyOC1nY206dGVzdA== 解码后为 aes-128-gcm:test。

ss://[email protected]:8388#demo
  • ss:// 指定 Shadowsocks 协议。
  • 认证段对应加密方法 aes-128-gcm 和密码 test。
  • node.example.com:8388 对应服务器地址和服务端口。
  • #demo 是显示名称,不是服务器密码,也不会作为 HTTP 请求片段发给订阅服务器。

旧式 SS 分享链接可能把服务器地址也放进编码段;带插件的链接还可能包含 plugin 参数。不能只按一个固定的 @ 位置拆分所有变体。Trojan、VMess、VLESS 的分享结构也不同,例如常见 VMess 分享链接的编码正文是 JSON,而不是 SS 风格的认证字符串。

中文名称与编码变体

节点名称常带百分号编码,例如 URI 片段中的 %E9%A6%99%E6%B8%AF 表示“香港”。百分号解码和 Base64 解码是两种操作,顺序应由具体协议决定。Base64 还可能使用 URL 安全字符 -、_,或省略末尾的 =;解析器需要识别这些变体,而不是见到没有等号就判定链接损坏。

订阅转换:解析、映射与生成规则

转换器通常先获取原订阅,再将节点解析成内部数据结构,最后输出目标格式。生成完整 Clash 配置时,还可能套用模板来添加策略组、DNS 和规则。因此,“把 Base64 转成 YAML”不是更换文本外壳,而是一次字段映射和配置生成。

  1. 获取源内容:检查 HTTP 状态与正文,排除登录页、过期提示、限流页面或验证码页面。
  2. 识别输入:区分完整 YAML、提供器 YAML、明文 URI 列表和编码订阅。
  3. 解析节点:提取协议、地址、端口、认证及 TLS、传输等参数。
  4. 选择目标:按实际内核支持的字段输出,不能只看客户端名称里是否带 Clash。
  5. 应用模板:生成策略组和规则,并检查节点名、组名的引用关系。

常用转换参数如何理解

以下以常见 subconverter 风格接口为例。参数并非统一行业标准,不同实现和版本可能具有不同默认值;使用前应核对所部署服务的文档。

参数示例值作用与注意点
targetclash选择输出格式,不代表一定支持 mihomo 的全部扩展字段。
url经过 URL 编码的源地址避免源地址中的问号、与号被外层参数拆分。
listfalse常见实现中用于区分列表输出与完整配置输出,具体内容还取决于模板。
emojifalse控制名称中的旗帜符号处理,不改变服务器位置。
udptrue影响相关 UDP 字段,无法让本来不支持 UDP 的链路获得该能力。
config外部配置地址在支持它的实现中加载模板;需要检查模板来源、分流规则与最终出口。

假设本机已经部署转换服务并监听 127.0.0.1:25500,下面展示参数的嵌套编码关系。这个地址仅用于说明接口,不表示客户端安装后会自动提供转换服务。

http://127.0.0.1:25500/sub?target=clash&url=https%3A%2F%2Fsubscription.example.com%2Ffeed%3Ftoken%3Ddemo&list=false&emoji=false&udp=true

内层地址原本为 https://subscription.example.com/feed?token=demo。若源地址还有 &type=all,其中的与号也必须编码为 %26,否则转换服务会把它当作自己的参数。不要把整条外层地址再次整体编码后直接当成订阅地址使用。

互转边界:节点能导出,分流未必能保留

URI 通常承载单个节点,完整 YAML 则能包含规则、策略组、DNS、TUN 和节点提供器定义。把完整 YAML 导出成 URI 列表时,这些全局配置通常无法表达。之后再将 URI 转回 YAML,得到的是新模板生成的配置,而不是原配置的完整还原。

新协议需要内核和转换器同时支持

Clash 原版、Clash Meta 与 mihomo 的协议和字段覆盖范围不同。以 Hysteria2 为例,源节点存在并不意味着面向旧内核的转换目标可以保留它。实际需要同时满足三项条件:转换器识别输入协议、输出器能够表达对应字段、运行内核能够加载并使用这些字段。

  • TLS 参数:核对 SNI、证书验证设置和 ALPN,不能为了通过导入而随意关闭证书验证。
  • 传输参数:WebSocket 的路径与请求头应保留;把路径丢掉可能导致节点显示正常但握手失败。
  • 扩展功能:多路复用、指纹、Reality 等配置需要逐项核对,不能假定同名字段在所有内核里含义一致。
  • 名称引用:重命名后,策略组引用也必须同步;重复节点名可能导致校验失败或选择结果不符合预期。

如果原服务已经提供与当前 mihomo 内核匹配的 YAML,优先直接使用该格式。只有在输入格式不兼容、需要集中管理模板或需要合并来源时,再引入转换环节,能减少一次字段损失的机会。

转换后检查:从导入成功到实际连通

导入成功只说明配置通过了某个阶段的解析。建议保留原配置,将转换结果另存为新文件,再按以下顺序验证,避免一次替换后失去可用的恢复入口。

  1. 检查节点数量:例如源订阅有 12 条节点,输出只剩 8 条,应查看过滤条件、协议支持或解析日志,而不是直接开始使用。
  2. 检查关键字段:任选至少一个节点,对照服务器、端口、协议、认证和 TLS 参数;确认不是只有名称一致。
  3. 检查内核配置:安装了 mihomo 命令行程序时,可运行下面的测试命令;可执行文件名和路径以本机安装为准。
  4. 检查策略组:确认组内存在目标节点,最终规则引用真实存在的策略,而不是被模板意外改成 DIRECT。
  5. 检查实际连接:先测试节点,再在连接列表查看目标域名、命中规则和最终链路;单次延迟测试不能证明所有网站与 UDP 应用都可用。
mihomo -t -f converted.yaml

该命令用于测试配置,不会证明远端服务器一定可达。若配置引用了外部提供器或规则资源,测试过程还可能涉及资源加载。错误信息中出现字段不支持,应先确认内核能力;出现未知代理名,应检查策略组和规则引用;出现 YAML 解析错误,则先处理缩进、引号和列表结构。

“能导入但连不上”的定位顺序

  • 所有节点同时失败:先检查网络、订阅是否过期,以及转换结果是否整体使用了错误模板。
  • 只有一种协议失败:优先检查该协议的内核支持、传输参数和转换器版本。
  • 节点测试成功但网页失败:检查规则命中、DNS 解析和程序是否进入代理入口。
  • 浏览器可用但游戏失败:继续排查 UDP、应用代理方式与 TUN 接管情况,不能仅修改订阅编码来解决。

订阅隐私、更新地址与常见问题

转换一次后,节点会自动更新吗?

导入本地 YAML 文件通常只是导入当时的快照,不会自动回到原订阅取新节点。导入转换后的远程地址,客户端更新时才会再次请求该地址;是否实时获取源订阅,还取决于转换服务的缓存策略。记录源地址、目标格式和模板设置,后续才能区分是源内容没更新,还是转换缓存尚未刷新。

为什么浏览器打开的是一整段乱码?

如果正文主要由字母、数字和少量编码符号组成,可能是 Base64;应在本地解码后确认内容。如果正文以 HTML 标签开头,或显示登录、额度、访问限制提示,就不是有效节点配置。不要对错误页面继续执行转换,也不要把“HTTP 200”单独当作订阅有效的证据。

把订阅地址发给别人排错是否合适?

不建议直接发送完整地址。可以提供删去认证信息的协议名称、报错文本和配置片段。若令牌已经公开,应在服务端重置订阅地址;仅在本机删除记录无法让旧令牌失效。替换后还要更新客户端与转换服务中保存的源地址。

实际选择可归纳为三步:先识别响应正文,再确认目标内核,最后检查转换后的字段与连接结果。编码解决的是文本表示,转换解决的是格式映射,规则模板决定的是流量去向;把这三件事分开处理,排错路径会更明确。

Clash下载