先分清:订阅地址、内容格式与代理协议
“订阅导入失败”不一定是地址失效。一个链接可能返回 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 的服务器名称、传输路径或必要认证字段时,转换器不能凭空推导。应重新获取正确的目标订阅,而不是随意补参数直到文件能保存。
一套可复用的订阅识别与转换流程
- 保留原始来源:记录订阅入口的格式说明与获取时间,备份当前可用配置。不要在旧配置唯一副本上直接覆盖测试。
- 确认响应内容:检查下载是否成功。以
<!DOCTYPE html>或登录表单开头的响应是网页,不是可用代理配置;HTTP 200 也不能排除这种情况。 - 看结构而非文件名:顶层有
proxies:等字段通常指向 YAML;带version与servers的 JSON 可能是 SIP008;一长段编码文本则需在本地检查解码后的结构。 - 优先换原生入口:如果服务商提供对应内核的 Clash 或 mihomo 格式,优先重新获取。只有缺少合适入口时,再考虑可信的本地或自建转换工具。
- 保留更新链路:导出一次 YAML 得到的是快照,不会自动订阅原地址的后续变化。远程转换地址则可能依赖转换服务持续可用,并使其接触原订阅。
- 导入后逐项核对:比较源节点数、目标节点数、协议种类、代理组与最终兜底规则,再测试一个直连目标和一个应走代理的目标。
例如源列表有 12 个条目,目标只剩 9 个,应检查另外 3 个是否因协议不支持、字段缺失、重复过滤或名称冲突而被跳过。这个数字只是核对方法示例,不是转换工具的正常损耗范围;正确转换不应默认接受不明原因的节点减少。
导入失败与更新失效:按报错所在层排查
出现 YAML 语法错误
先查看错误行附近的缩进、冒号和引号。YAML 缩进使用空格,不能用 Tab 代替。示例中的密码加了引号,是为了避免特殊字符被解释为结构符号。如果响应实际是 JSON 或 HTML,调整 YAML 缩进没有意义,应返回检查订阅入口。
配置能导入,但没有节点或无法连接
先确认文件是不是只有提供器内容,以及主配置是否引用了它。节点存在却无法连接,则继续检查内核日志中的“不支持的代理类型”“未知加密方法”或插件参数错误。格式正确与连接可用是两回事,后者还取决于服务器状态、网络路径和账户有效性。
刚改好的规则,更新一次就恢复原样
远程配置更新通常会替换下载内容。本地直接编辑远程文件,可能在下一次更新时被覆盖。需要长期保留的规则,应放进客户端支持的覆写、合并或独立主配置机制,并确认最终加载顺序。规则采用从上到下匹配的逻辑,把自定义规则追加到 MATCH 后面,通常不会得到预期效果。