订阅格式科普:Clash YAML、Base64 节点链接与订阅转换的区别和用法
讲清 Clash YAML 配置、Base64 编码节点列表与单条协议链接三类订阅格式的结构差异,说明订阅转换的原理、风险,以及在客户端里正确导入的方法。
一、先看返回内容,再选导入入口
Clash 客户端通常需要兼容当前内核的 YAML 配置;Base64 编码节点列表与单条协议链接,不等于完整配置。下载文件叫“订阅”、后缀是 .yaml,都不能保证能够导入。真正决定格式的是服务器返回的文本结构,以及客户端是否提供对应的解析或转换功能。
订阅地址是获取内容的入口,不是一种固定格式。同一个地址可能按请求参数或 User-Agent 返回不同内容:浏览器看到节点链接,客户端拿到 YAML,也可能相反。因此,“浏览器能打开地址”和“Clash 客户端能加载配置”需要分开验证。
| 内容类型 | 常见特征 | 适合的处理方式 |
|---|---|---|
| Clash YAML | 能看到 proxies:、proxy-groups:、rules: 等字段 | 核对内核兼容性后,作为配置导入 |
| Base64 节点列表 | 外层是一长串编码文本,解码后常为逐行协议链接 | 用支持该输入的工具转换成目标配置 |
| 单条协议链接 | 以 ss://、vmess://、trojan:// 等开头 | 使用节点导入功能,或转换后加入配置 |
| 网页或接口错误 | 出现 <!DOCTYPE html>、登录提示、错误 JSON | 先修正订阅请求,不要继续转换 |
二、Clash YAML:节点、策略组和规则各管什么
YAML 是序列化格式,Clash 配置则是内核约定的一组字段。任意合法 YAML 都不一定是合法 Clash 配置。例如,只有一个 message 字段的接口响应可以通过 YAML 语法解析,却没有可用的代理配置。
proxies:节点定义,包含协议类型、服务器、端口及认证参数。proxy-providers:节点提供者,可从文件或远程地址加载节点集合。proxy-groups:策略组,定义手动选择、延迟测试或故障转移等选择方式。rules:按顺序匹配流量,并交给DIRECT、REJECT或已定义的策略。dns、tun:解析与流量接管配置;它们不是每份节点订阅都包含的内容。
一个用于识别字段的最小示例
下面是直连规则配置,mixed-port: 7890 表示 HTTP 与 SOCKS 共用监听端口。它没有远程节点,也不会开启系统代理或 TUN,仅用于说明完整配置与节点列表的差别。客户端可能通过界面设置覆写端口等字段,实际值以运行配置为准。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups:
- name: LOCAL
type: select
proxies:
- DIRECT
rules:
- MATCH,LOCAL
这里的 MATCH,LOCAL 指向已定义的 LOCAL 策略组。常见的 MATCH,PROXY 也要求配置中存在名为 PROXY 的节点或策略组;它不是自动生成的内置出口。只复制规则而漏掉策略组,会造成引用错误。
完整配置与 provider 文件不要混用
节点 provider 文件通常以 proxies: 为核心,只提供节点集合;规则 provider 文件通常使用 payload:。它们需要主配置引用,不应直接当成包含策略组和分流规则的完整订阅。尤其不要把规则 provider 的地址填进节点订阅入口。
三、Base64 与协议链接:解码不等于转换
Base64 只是编码,不是加密,也不是代理协议。传统订阅常把多条协议链接按行排列,再对整段文本进行 Base64 编码。解码后得到的仍是节点描述,不会自然出现策略组、DNS 或规则。
另外,某些协议链接内部也使用 Base64。例如常见的 VMess 分享形式会把 JSON 节点参数编码后放在 vmess:// 后面;Shadowsocks 链接则存在不同编码形式。不能把“整份订阅的编码层”和“单个协议链接的编码层”混为一谈,更不能反复解码直到文本看起来熟悉。
- 识别外层:原文已经是逐行
ss://等链接,就不必先做整段 Base64 解码。 - 本地解码:若确认是编码节点列表,使用可信的本地工具查看结果,留意 URL-safe 字符及缺少填充符的情况。
- 核对字段:检查协议、端口、传输方式和 TLS 参数,不要只确认“节点名称能显示”。
- 生成配置:把可解析节点映射为目标内核字段,再补上策略组和规则,这一步才是订阅转换。
四、订阅转换:目标内核、模板与凭据风险
转换工具通常执行三个步骤:下载源内容、解析节点参数、按目标格式输出。若还应用了规则模板,它会额外生成策略组、分流规则,甚至远程规则集引用。因此,同一组节点经过不同模板转换,最终的流量走向可能完全不同。
优先使用服务方提供的匹配格式
订阅管理页若有“Clash”“Clash Meta”或“mihomo”入口,优先选择与实际内核对应的选项。Clash Meta 现称 mihomo;旧 Clash 内核与 mihomo 支持的字段和协议范围并不相同。转换器界面里的目标名称也可能是历史命名,最终要看输出字段和目标内核文档。
转换无法给旧内核增加协议支持。源节点使用目标内核不支持的协议或传输参数时,工具可能报错、跳过节点或丢弃字段。把输出后缀改成 .yaml,不能解决这种兼容性问题。
公开转换服务能接触哪些信息
- 源订阅 URL,包含路径、查询参数及访问令牌。
- 获取到的服务器地址、端口、密码、UUID 等节点凭据。
- 订阅返回的套餐信息,以及转换请求相关的访问记录。
HTTPS 保护传输过程,但不会阻止转换服务本身读取输入。需要转换时,优先选择可信的本地工具或自托管服务;仅把网页保存在本地,不代表转换就在本地完成,还要检查它是否向远程后端发出请求。
转换后必须复查的项目
对照源内容核对节点数量、协议类型、TLS 的 servername、WebSocket 的 ws-opts、gRPC 的 grpc-opts,以及认证信息是否保留。不要为了消除连接错误而统一打开 skip-cert-verify。同时检查模板是否加入陌生的 rule-providers、DNS 上游或外部控制设置;转换成功只代表有输出,不代表配置符合预期。
五、在 Clash 客户端中导入与验证
先区分“导入远程配置”和“添加单个节点”。多数 Clash 图形客户端以配置为管理单位,不保证直接接受任意协议链接。以下以 Clash Verge Rev 的“订阅”页面为例;其他产品的入口可能叫“配置”,按钮名称也会随版本变化。
- 备份当前配置:保存现有订阅地址、本地覆写及正在使用的策略组选择。测试新配置时先保留旧配置,便于切回。
- 添加远程配置:进入“订阅”,把服务方提供的 Clash 或 mihomo 订阅地址填入 URL 输入框,执行“导入”,然后选中新增配置。
- 导入本地文件:如果手上是 YAML 文件,使用客户端的本地配置导入入口;不要把磁盘路径粘贴到远程 URL 输入框。
- 确认解析结果:进入“代理”检查策略组与节点是否出现。再看日志,区分配置加载失败、provider 下载失败与节点连接失败。
- 验证流量:确认实际监听端口,再启用系统代理测试浏览器访问。若运行端口为
7890,应用连接地址应是本机127.0.0.1:7890,而不是订阅服务器地址。
系统代理与 TUN 决定流量如何进入内核,并不负责把 Base64 节点列表转换成 YAML。导入失败时反复切换 TUN,通常只会增加排查变量。先让配置成功加载,再处理接管范围、DNS 与路由问题。
需要长期保留的规则应放进客户端支持的覆写机制。直接编辑远程订阅下载后的文件,下次更新可能恢复为服务方原文。覆写涉及列表合并时,还要确认客户端采用追加、前置还是替换策略,避免把最终的 MATCH 规则放到自定义规则之前。
六、导入失败:按错误所在层排查
| 现象或日志片段 | 优先检查 | 下一步 |
|---|---|---|
401 Unauthorized / 403 Forbidden | 令牌是否过期、服务方限制、地址是否复制完整 | 重新获取订阅地址;不要靠转换绕过访问限制 |
yaml: unmarshal errors | 响应是否为 YAML、字段类型是否正确 | 本地查看实际响应,核对报错行附近的结构 |
proxy not found | 规则或策略组引用的名称是否存在 | 逐字核对名称、大小写与转换后的重命名结果 |
| 节点少于源订阅 | 转换器是否跳过不支持的协议或过滤节点 | 检查转换日志、过滤条件及目标内核支持范围 |
| 配置已加载,但连接超时 | 节点可达性、认证、DNS、TLS 与传输参数 | 检查连接日志,不要先重做格式转换 |
YAML 缩进与字段类型
YAML 缩进使用空格,不要用 Tab。列表项需要保留 -,映射通常使用冒号加空格。密码或名称中含有冒号、井号等字符时,应按 YAML 规则加引号。认证值建议使用字符串,避免纯数字或特殊文本被解析成其他类型。
浏览器能下载,客户端却不能更新
检查重定向、证书、请求头差异,以及更新订阅时使用的是直连还是代理路径。若订阅只能通过代理访问,而当前配置还没有可用节点,就可能出现更新依赖尚未建立的情况。可以先使用服务方提供的本地 YAML 完成首次导入,再检查远程更新路径。
新协议导入后提示不支持
在客户端“关于”页核对客户端版本和内核版本,两者不是同一个编号。保存准确的协议名、内核版本与报错,再查兼容性。不要只看安装包名称包含 Clash 就认定所有字段通用;旧版 Clash 配置、mihomo 扩展字段和客户端自己的覆写脚本需要分别判断。
处理顺序固定为:确认响应内容 → 识别格式 → 核对目标内核 → 导入配置 → 检查连接。拿到匹配的 YAML 后就不必再转换;需要转换时,保留源内容与转换设置,方便对照定位丢失字段。