Skip to content

Clash 订阅格式转换机制与协议映射:从 VMess/SS/Trojan/VLESS 到 YAML ​

直接答案:订阅转换的核心本质是**“跨协议标准的对象反序列化与声明式重构”。早期代理生态以 Base64 编码的单行 URI 链接(如 vmess://、vless://、ss://)为主流,每个链接将节点参数压缩在 URL 查询参数或 JSON 载荷中;而 Clash 采用强类型的树状 YAML 语法。订阅转换器(如 Subconverter)通过拉取远程链接 -> Base64 解码 -> 协议 URI 正则切片 -> 抽取连接属性 -> 按照 Clash 节点规范映射组装 YAML**,完成数据结构的标准化统一。


一、各大主流协议 URI 到 Clash YAML 映射全景对照表 (一手核心技术数据) ​

以下为转换引擎在处理主流节点协议时执行的物理字段映射基准表:

节点类型原始 URI 结构特征Clash YAML 目标字段映射关键特殊属性映射说明
Shadowsocksss://BASE64(cipher:pass@host:port)#Nametype: ss
server: host
port: port
cipher: cipher
password: pass
若携带 SIP003 插件(如 v2ray-plugin),转换为 plugin: v2ray-plugin
VMessvmess://BASE64(JSON_PAYLOAD)type: vmess
server: add
port: port
uuid: id
alterId: aid
cipher: auto
JSON 中的 net(ws/tcp/grpc)、tls、host 映射至 network 与 ws-opts
VLESSvless://uuid@host:port?type=ws&security=tls#Nametype: vless
server: host
port: port
uuid: uuid
tls: true
URL Query 中的 flow 映射为 flow: xtls-rprx-vision;fp 映射为 client-fingerprint
Trojantrojan://password@host:port?sni=sni_host#Nametype: trojan
server: host
port: port
password: password
sni: sni_host
allowInsecure=1 映射为 skip-cert-verify: true
Hysteria 2hysteria2://pass@host:port?sni=host&insecure=0#Nametype: hysteria2
server: host
port: port
password: pass
sni: host
mport 映射为多端口;up/down 映射为峰值上下行限制

二、订阅转换底层解析流水线时序图 (一手解析流程) ​

[输入: 用户提供的原始订阅 URL]
                |
                v
+-----------------------------------------------------------+
| 阶段 1:HTTP 载荷获取与 Base64 解码                          |
| 捕获返回体。若是合规 Base64 字符串,解码还原为明文多行 URI  |
+-----------------------------------------------------------+
                |
                v
+-----------------------------------------------------------+
| 阶段 2:逐行协议类型探测与正则提取                          |
| 识别每行的 scheme 头 (ss://, vmess://, vless://, trojan://)|
| 将 URL 编码的别名 (如 #%E9%A6%99%E6%B8%AF) 解码为 UTF-8 名称 |
+-----------------------------------------------------------+
                |
                v
+-----------------------------------------------------------+
| 阶段 3:网络传输层配置装配 (Transport & Security)          |
| 提取 WS 路径、gRPC serviceName、TLS SNI、uTLS 指纹、Reality 密钥 |
+-----------------------------------------------------------+
                |
                v
+-----------------------------------------------------------+
| 阶段 4:目标平台 YAML 模板合成                              |
| 将节点注入主配置 proxies 块,并根据规则模板自动追加       |
| proxy-groups 与 rules 分流列表                             |
+-----------------------------------------------------------+
                |
                v
[输出: 可直接供 Clash/Mihomo 解析的完整 YAML]

三、典型协议转换实战对照示例 ​

1. VMess JSON URI 转 Clash YAML ​

原始链接:

vmess://eyJhZGQiOiAiaGswMS5leGFtcGxlLmNvbSIsICJhaWQiOiAwLCAiaG9zdCI6ICJjZG4uZXhhbXBsZS5jb20iLCAiaWQiOiAiOTU0NDc4MTYtMzU3Mi00MWVlLTg1YzQtODIyMzk2Njc4OTBiIiwgIm5ldCI6ICJ3cyIsICJwYXRoIjogIi92bWVzcy13cyIsICJwb3J0IjogNDQzLCAicHMiOiAiSEstV01lc3MtMDEiLCAidGxzIjogInRscyJ9

转换后生成的 Clash YAML 节点:

yaml
- name: "HK-VMess-01"
  type: vmess
  server: hk01.example.com
  port: 443
  uuid: 95447816-3572-41ee-85c4-82239667890b
  alterId: 0
  cipher: auto
  udp: true
  tls: true
  servername: cdn.example.com
  network: ws
  ws-opts:
    path: /vmess-ws
    headers:
      Host: cdn.example.com

2. VLESS Reality URI 转 Clash/Mihomo YAML ​

原始链接:

vless://[email protected]:443?security=reality&encryption=none&pbk=b_3zD-j10P9_Kk12Lm45No67Pq89Rs01Tu23Vw45Xy6&headerType=none&fp=chrome&type=tcp&flow=xtls-rprx-vision&sni=gateway.icloud.com&sid=0123456789abcdef#US-Reality-01

转换后生成的 Clash YAML 节点:

yaml
- name: "US-Reality-01"
  type: vless
  server: us01.example.com
  port: 443
  uuid: 95447816-3572-41ee-85c4-82239667890b
  cipher: auto
  tls: true
  flow: xtls-rprx-vision
  servername: gateway.icloud.com
  client-fingerprint: chrome
  reality-opts:
    public-key: b_3zD-j10P9_Kk12Lm45No67Pq89Rs01Tu23Vw45Xy6
    short-id: 0123456789abcdef
  network: tcp
  udp: true

四、转换过程中最常见的属性丢失与兼容性陷阱 ​

1. flow: xtls-rprx-vision 丢失导致连接被重置 ​

  • 陷阱表现:VLESS-Reality 节点转换后能测出延迟,但发起实际 HTTPS 流量瞬间报错 read: connection reset by peer。
  • 根因分析:旧版本的通用转换工具未能正确识别 Reality 协议的 flow 字段,丢失了 flow: xtls-rprx-vision。在没有该参数的情况下,服务端直接拒绝了无流控保护的明文双层 TLS 连接。
  • 修复措施:升级转换工具至支持 Mihomo / Clash.Meta 标准的最新内核版本,并在转换模板中指定 target=clash.meta。

2. TLS 跳过证书校验 (skip-cert-verify) 漏传 ​

  • 陷阱表现:自建自签名证书或临时伪造证书的 Trojan/VMess 节点在转换后日志狂刷 x509: certificate signed by unknown authority。
  • 修复措施:在转换工具的规则配置中开启 skip_cert_verify=true,确保生成 YAML 时携带 skip-cert-verify: true 标记。

五、常见问题解答 (FAQ) ​

Q1: 所有的 Clash 客户端都能识别转换出来的 VLESS 节点吗? ​

A: 不能。原生开源版 Clash Premium 早已停止维护,不支持 VLESS 及 Reality 协议。目前能够完美解析并运行 VLESS/Reality/Hysteria2 协议转换结果的只有基于 Mihomo (Clash.Meta) 核心的现代客户端(如 Clash Verge Rev、Mihomo Party 等)。

Q2: 为什么有时候转换出来的节点名全变成了乱码或 URL 编码? ​

A: 这通常是由于原始 URI 末尾的 # 标签包含中文或特殊符号,且服务商使用了非常规的双重 URL 编码(如 %25E9%25A6%2599)。转换工具默认只执行了一次 urldecode,导致还原后的节点名依然保留了百分号编码。


六、延伸阅读与相关资源 ​