先分清:订阅地址、内容格式与代理协议

“订阅导入失败”不一定是地址失效。一个链接可能返回 Clash YAML,也可能返回 Base64 编码的节点列表,甚至是登录页。客户端拿到内容之后,还要判断结构、解析节点,再交给内核建立连接。任何一步不匹配,都可能表现为导入失败或节点不可用。

排查时,把下面三个层次拆开看,比反复点击“更新订阅”有效。

  • 订阅地址:下载配置的 HTTP 或 HTTPS 地址。路径有没有 .yaml 后缀,不足以证明响应是什么格式。
  • 内容格式:节点与配置采用什么结构保存,例如 YAML、Base64 包裹的 URI 列表、SIP008 JSON。
  • 代理协议:实际连接使用 Shadowsocks、VMess、Trojan 等哪一种。格式转换不会把一种代理协议变成另一种。

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

YAML 是配置的书写格式,不是代理协议。Clash 系完整配置通常能看到 proxies、proxy-groups、rules 等字段,也可能通过 proxy-providers 引用外部节点。除了服务器地址与密码,它还能表达代理组选择、规则顺序、DNS 和监听端口等设置。

一份完整配置可以带上分流逻辑

下面是用于辨认结构的示例。域名与口令仅作演示,不能用来连接;mixed-port: 7890 表示本机混合代理监听端口,并非远端服务器端口。

mixed-port: 7890
allow-lan: false
mode: rule
proxies:
  - name: "示例 SS 节点"
    type: ss
    server: node.example.com
    port: 443
    cipher: aes-128-gcm
    password: "demo-password"
proxy-groups:
  - name: "出口选择"
    type: select
    proxies:
      - "示例 SS 节点"
      - DIRECT
rules:
  - DOMAIN-SUFFIX,example.org,DIRECT
  - MATCH,出口选择

这里的 443 是示例远端端口。规则从上往下匹配:访问 example.org 及其子域名走直连,其他连接由“出口选择”组决定。导入后如果只看到了一个节点,却没有对应代理组和规则,应检查客户端是否把源内容当作“节点导入”,而不是完整配置导入。

只有 proxies 的文件可能是提供器内容

节点提供器文件常以顶层 proxies: 保存节点列表,供主配置中的 proxy-providers 加载,再由代理组的 use 引用。它缺少完整分流策略,不应仅凭“这是 YAML”就把它当成可直接切换的完整配置。

反过来,完整配置也不应原样塞进只接收节点列表的入口。想保留本地规则、只更新服务商节点,应采用客户端支持的提供器或覆写方案,而不是每次更新后手动重改整份远程配置。具体设置方式可对照协议手册。

Base64:包了一层编码的节点链接列表

常说的“Base64 订阅”,通常是把多条节点 URI 按行排列,再把整段文本进行 Base64 编码。解码后可能看到 ss://、vmess://、trojan:// 等开头的链接。一些订阅直接返回这些明文链接,并没有最外层编码。

  • Base64 不负责加密:拿到内容的人通常可以还原其中的服务器地址、认证信息和节点备注。
  • 节点内部还可能有编码:例如某些 URI 的认证段或载荷自身也使用 Base64,解开订阅外层后,不代表所有字段都已是明文。
  • 扩展字段存在实现差异:传输层、TLS、插件参数或新协议字段,需要导入器与内核都支持,才可能完整保留。

Base64 只是外包装,通常不包含 Clash 的 rules 和 proxy-groups。将它转换成 Clash 配置时,新出现的“自动选择”“故障转移”或分流规则,多半来自转换模板,而不是从原始节点列表中恢复出来的。

SIP008:Shadowsocks 的结构化服务器列表

SIP008 是 Shadowsocks 生态中的在线配置交付约定,使用 JSON 表达服务器列表。它不是包含全部代理协议的通用订阅标准,也不负责表达 Clash 的策略组和域名规则。常见 SIP008 v1 文档会包含 version 与 servers 字段,服务器条目列出地址、端口、加密方法、密码和备注。

{
  "version": 1,
  "servers": [
    {
      "id": "c71e2e80-925f-4cf6-a437-ef9b79e9cb17",
      "remarks": "示例 SS 节点",
      "server": "node.example.com",
      "server_port": 443,
      "method": "aes-128-gcm",
      "password": "demo-password"
    }
  ]
}

转换为 Clash 节点时,通常将 server_port 映射为 port,method 映射为 cipher,remarks 映射为 name,再补上 type: ss。这叫字段映射,不是协议转换。

若条目带有 plugin 与 plugin_opts,还要检查目标内核支持的插件及其参数写法。转换器能够输出 YAML,不代表插件握手一定兼容。只有服务器支持相应连接方式,客户端配置也正确,连接才能建立。

Clash 系客户端能直接导入哪种格式

需要区分“内核读取配置”和“图形客户端帮忙转换”。Clash 与 mihomo 以 Clash 风格 YAML 配置为主要入口;部分图形客户端另有分享链接导入、订阅识别或模板合成功能。不能因为某个客户端支持 Base64,就推断所有 Clash 客户端都支持。

拿到的内容 合适的入口 需要核对
Clash 完整 YAML 配置文件或远程配置导入 内核能否识别协议和配置字段
YAML 节点提供器 主配置中的 proxy-providers 代理组是否通过 use 引用了提供器
Base64 或明文 URI 列表 客户端明确支持的节点导入,或可信转换流程 是否需要补齐代理组、规则与 DNS
SIP008 JSON 明确支持 SIP008 的导入或转换入口 SS 加密方法与插件参数是否兼容

各客户端的菜单文案并不统一。操作时先分清“导入配置文件”“新建远程配置”和“导入节点”三个用途,不要把节点分享链接粘到仅接收 HTTPS 订阅地址的输入框。初次安装可以先按快速上手教程完成配置导入,再处理格式兼容问题。

订阅互转会丢什么:节点之外的信息最容易消失

“转换成功”只说明目标文件生成了,不等于原配置被完整复制。先判断源格式有没有承载目标信息的能力,再检查转换器是否真正保留。

从完整 YAML 转为节点链接

  • 规则与顺序:DOMAIN-SUFFIX、IP-CIDR、MATCH 等规则一般不会进入单条节点 URI。
  • 代理组关系:select、url-test、fallback 的层级,以及测速地址、间隔等设置通常无法保留。
  • 本地运行参数:DNS、TUN、监听地址、混合端口、控制接口等设置不属于节点分享内容。
  • 外部引用:规则集、节点提供器和它们的更新策略,可能在导出时被忽略,或者只保留当时展开后的节点快照。

从节点列表转为完整 YAML

转换器必须额外决定节点放进哪个组、哪些域名直连、兜底走哪里。模板不同,结果就不同。同一批节点生成两份配置,访问同一个网站可能走不同出口,原因往往是规则变化,而不是节点本身发生变化。

节点名称也值得检查。重命名、去重或按地区分组可能让原有规则引用失效;某些名称经过 URI 编码,转换时还需要正确解码。遇到导入报“代理不存在”,先对照 proxy-groups 与 rules 中引用的名称,不要急着删除所有规则。

转换不能补出服务端不存在的能力

将 Shadowsocks 条目改写成 Trojan 或其他协议字段,不会让原服务器支持该协议。类似地,源内容缺少 TLS 的服务器名称、传输路径或必要认证字段时,转换器不能凭空推导。应重新获取正确的目标订阅,而不是随意补参数直到文件能保存。

一套可复用的订阅识别与转换流程

  1. 保留原始来源:记录订阅入口的格式说明与获取时间,备份当前可用配置。不要在旧配置唯一副本上直接覆盖测试。
  2. 确认响应内容:检查下载是否成功。以 <!DOCTYPE html> 或登录表单开头的响应是网页,不是可用代理配置;HTTP 200 也不能排除这种情况。
  3. 看结构而非文件名:顶层有 proxies: 等字段通常指向 YAML;带 version 与 servers 的 JSON 可能是 SIP008;一长段编码文本则需在本地检查解码后的结构。
  4. 优先换原生入口:如果服务商提供对应内核的 Clash 或 mihomo 格式,优先重新获取。只有缺少合适入口时,再考虑可信的本地或自建转换工具。
  5. 保留更新链路:导出一次 YAML 得到的是快照,不会自动订阅原地址的后续变化。远程转换地址则可能依赖转换服务持续可用,并使其接触原订阅。
  6. 导入后逐项核对:比较源节点数、目标节点数、协议种类、代理组与最终兜底规则,再测试一个直连目标和一个应走代理的目标。

例如源列表有 12 个条目,目标只剩 9 个,应检查另外 3 个是否因协议不支持、字段缺失、重复过滤或名称冲突而被跳过。这个数字只是核对方法示例,不是转换工具的正常损耗范围;正确转换不应默认接受不明原因的节点减少。

导入失败与更新失效:按报错所在层排查

出现 YAML 语法错误

先查看错误行附近的缩进、冒号和引号。YAML 缩进使用空格,不能用 Tab 代替。示例中的密码加了引号,是为了避免特殊字符被解释为结构符号。如果响应实际是 JSON 或 HTML,调整 YAML 缩进没有意义,应返回检查订阅入口。

配置能导入,但没有节点或无法连接

先确认文件是不是只有提供器内容,以及主配置是否引用了它。节点存在却无法连接,则继续检查内核日志中的“不支持的代理类型”“未知加密方法”或插件参数错误。格式正确与连接可用是两回事,后者还取决于服务器状态、网络路径和账户有效性。

刚改好的规则,更新一次就恢复原样

远程配置更新通常会替换下载内容。本地直接编辑远程文件,可能在下一次更新时被覆盖。需要长期保留的规则,应放进客户端支持的覆写、合并或独立主配置机制,并确认最终加载顺序。规则采用从上到下匹配的逻辑,把自定义规则追加到 MATCH 后面,通常不会得到预期效果。