· 订阅与配置 · 预计阅读 10 分钟

订阅链接格式科普:Clash YAML、Base64 节点列表与 sing-box 配置如何互转

介绍常见订阅格式的结构差异与客户端兼容范围,讲清订阅转换的原理、可能丢失的字段,以及转换后的检查要点。

订阅地址与配置格式:先区分下载入口和返回内容

订阅链接是获取配置的入口,不是某一种文件格式。客户端访问同一个 HTTPS 地址,可能收到 Clash YAML、Base64 编码的节点列表,也可能收到 sing-box JSON。有些服务会根据地址参数、账户设置或请求头中的 User-Agent 返回不同内容。因此,链接能在浏览器打开,不代表它能直接导入当前客户端。

排查时分三层检查:请求是否成功、返回内容是什么格式、目标内核是否理解其中的协议和字段。HTTP 200 只说明请求获得了响应;返回内容仍可能是登录页、流量到期提示或错误 JSON。把这些响应交给配置解析器,常见结果就是导入失败、节点数为零或提示缺少字段。

三种常见格式分别保存哪些信息

格式典型结构通常包含
Clash YAMLproxies、proxy-groups、rules节点、策略组、分流规则;完整配置还可包含 DNS 与监听设置
Base64 节点列表解码后为逐行排列的协议分享链接节点连接参数;通常不含完整的 DNS、规则与 TUN 设置
sing-box JSONinbounds、outbounds、route入站、出站、路由;完整配置还可包含 DNS 等模块

Clash YAML:完整配置与节点提供者不是一回事

完整 Clash 配置可以描述节点、策略组和规则。下面是一份仅直连的结构示例,混合代理端口为 7890,只监听本机。它用于展示字段位置,不会提供远程代理连接。若本地已有程序占用该端口,需要先调整端口。

mixed-port: 7890
allow-lan: false
mode: rule
proxies: []
proxy-groups:
  - name: 手动选择
    type: select
    proxies:
      - DIRECT
rules:
  - MATCH,手动选择

另有一种 YAML 只在顶层包含 proxies,用于作为 proxy-providers 的节点来源。它不等于完整运行配置,需要由主配置通过提供者名称引用,并在策略组中使用。类似地,规则提供者文件常以 payload 开头,也不能当作节点订阅导入。

“Clash 格式”还存在内核能力差异。mihomo 延续了 Clash 配置体系,但增加了协议支持与扩展字段。能被 mihomo 解析的配置,不代表能被原版 Clash 解析。判断兼容性应查看实际内核,而不是只看图形客户端名称。

Base64:编码容器,不是独立代理协议

常见 Base64 订阅会把多行 ss://、vmess://、trojan:// 等分享链接整体编码。解码只是恢复文本,不会自动获得策略组或分流规则。部分订阅直接返回明文 URI 列表;单条分享链接内部还可能再次使用 Base64,因此需要区分外层订阅编码与协议自身编码。

Base64 也不提供保密性。解码后可能直接看到服务器地址、端口和认证信息。订阅地址中的令牌与下载后的配置都应按凭据保存,不宜放入公开截图、聊天记录或问题工单附件。

sing-box JSON:需要目标版本对应的配置结构

sing-box 通常使用 JSON 描述配置,但并非任何 JSON 节点数组都是完整 sing-box 配置。下面同样是仅直连的结构示例:监听本机 7890,把进入该混合入站的连接交给 direct 出站。

{
  "inbounds": [
    {
      "type": "mixed",
      "tag": "local-mixed",
      "listen": "127.0.0.1",
      "listen_port": 7890
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    }
  ],
  "route": {
    "final": "direct"
  }
}

此示例与前面的 YAML 应分别测试,不要同时启动并争用端口。实际订阅往往包含 TLS、DNS、路由规则和选择器;这些模块有各自的版本要求。转换目标应尽量明确到客户端使用的 sing-box 版本,而不是笼统选择“JSON”。

订阅转换的过程:解析、映射与补全

转换器通常先读取源内容,解析成内部节点对象,再按目标配置模式输出。节点列表缺少的策略组、规则、DNS 和监听项,往往由转换模板补全。因此,转换结果既取决于订阅本身,也取决于所选模板与转换器支持的协议版本。

  1. 识别源格式。判断内容是完整配置、节点提供者、明文 URI 列表,还是需要先解码的 Base64 文本。
  2. 解析协议参数。提取服务器、端口、认证、传输层、TLS 与协议专用选项。
  3. 映射目标字段。把节点写入 Clash 的 proxies 或 sing-box 的 outbounds,并处理名称引用。
  4. 生成运行结构。根据模板创建策略组、路由与 DNS;最后使用目标内核检查配置。

例如,Clash 节点使用的 server 与 port,在 sing-box 中通常对应 server 与 server_port。但这不意味着只替换键名就能完成转换:策略组引用、TLS 对象、传输配置和规则动作都有结构差异。

互转时最容易丢失的字段与语义

节点能导入,不代表连接参数完整

服务器和端口正确只是第一步。TLS 的服务器名称、证书验证设置、ALPN,以及 WebSocket 的路径与 Host 请求头,都可能影响握手。Reality 的公钥和 short ID、协议特定的 UDP 选项,也需要转换器明确支持。把不认识的字段静默删除,可能让配置通过语法检查,却无法连接。

规则、DNS 与 TUN 无法按名称机械照搬

Clash 的 proxy-groups 与 sing-box 的选择器、测速出站并非完全等价。即使都能“自动选择”,探测 URL、测试间隔和切换行为也可能不同。节点重命名后,还必须同步更新所有策略组和规则中的引用,否则会出现找不到出站或策略组为空的问题。

Clash 的 rules、规则提供者与 sing-box 的路由规则、规则集也不能互相直接粘贴。规则顺序、域名匹配语义和最终回退目标需要核对。DNS 的 Fake-IP 范围、域名过滤与解析出口同样会影响实际访问行为;只比较节点数量无法发现这些差异。

TUN 更接近运行环境配置,而不是节点属性。macOS 上的虚拟网卡授权、路由接管和客户端服务组件由具体客户端管理。从一份完整配置转换出的 TUN 字段,即使语法正确,也不代表目标 Mac 客户端已经完成授权。初次验证应先确认本机代理入站可用,再按客户端流程开启 TUN。

Mac 上的导入与验证顺序

先确定内核,再选择订阅入口

  1. 在客户端的「关于」或内核信息页面记录内核名称和版本。客户端版本与内核版本分开记录,界面路径以实际客户端为准。
  2. 在服务的订阅管理页面选择对应格式。mihomo 客户端优先选择明确标注 Clash Meta 或 mihomo 的入口。
  3. 在客户端的订阅或配置页面添加远程地址,执行更新,再选中刚导入的配置。不同客户端的菜单名称可能不同。
  4. 查看更新日志与配置检查结果。记录节点数、失败字段和报错行号,再决定是否需要转换。

使用内核检查,不用文件扩展名代替验证

若 Mac 已安装对应的命令行内核,可以在终端运行下列检查。命令假设当前目录中的文件分别名为 config.yaml 与 config.json,二进制已加入 PATH。图形客户端内置的检查功能也可用于同一目的,不必为了验证而替换其内核文件。

mihomo -t -f config.yaml
sing-box check -c config.json

检查通过说明目标内核接受配置,不代表远端节点可达、账号有效或规则符合预期。检查失败时应保留原始配置,围绕第一条明确错误修复,避免同时修改节点、DNS 与规则后失去对照。

如果客户端显示的实际混合端口为 7890,可通过下列命令显式使用 HTTP 代理,验证本机入站与一次 HTTPS 访问。此命令不依赖终端是否读取 macOS 系统代理。

curl --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com

测试时同时查看客户端连接记录,确认命中的规则和最终出站。能返回 HTTP 响应不等于一定经过远程节点:若匹配到 DIRECT,流量仍是直连。这条命令也不能证明 TUN 已接管终端,因为它已经显式指定了代理。

常见导入问题与转换后的检查清单

“解析失败”与“导入后没有节点”

先查看返回内容是否为 HTML 登录页或错误提示,再确认配置层级。完整配置入口收到只有 payload 的规则文件,或节点提供者入口收到完整配置,都可能失败。YAML 还应检查缩进,避免使用制表符;JSON 则应检查尾随逗号与字符串引号。不要把 YAML 文本仅改名为 .json 后再次导入。

“节点数量正确,但部分节点无法连接”

选一个失败节点,对照转换前后的协议、端口、TLS 和传输字段。若错误集中在某一种协议,应先核对目标内核与转换器是否支持该协议。若全部节点同时失败,再检查账户状态、本机网络、系统时间和 DNS,避免把所有问题都归因于格式。

“手动修复后,下次更新又恢复原样”

远程订阅更新通常会重新生成或覆盖配置。需要长期保留的规则、策略组或 DNS 调整,应使用客户端支持的覆写、合并或扩展功能,或在可控的转换模板中维护。先确认合并顺序与数组处理方式,再进行修改,避免自定义规则被追加到最终兜底规则之后而无法命中。

选择格式的核心是让“源内容、转换器、目标内核”三者匹配。完整 Clash YAML 与完整 sing-box JSON 可以承载运行策略;Base64 节点列表通常只提供连接材料。需要互转时,应把节点映射与策略重建分别检查,再处理 macOS 系统代理或 TUN 接管。

Clash Mac版安装包