V2Ray 订阅格式详解:Base64 订阅、原生 JSON 与 vless:// 分享链接互转

拆解三种常见订阅形态的结构差异,说明 v2rayN 与 v2rayNG 分别识别哪些格式,以及分享链接与 JSON 配置之间如何手动转换、排查导入失败。

本文速览

先区分订阅地址、订阅返回内容和单节点分享链接,再用一个 VLESS over TCP + TLS 示例演示字段映射。适合遇到订阅更新后没有节点、JSON 无法从剪贴板导入、节点能导入却连接失败的用户。文中的地址、UUID 与端口只用于说明结构,不是可连接的服务。

三种格式:地址、节点列表与完整配置

“V2Ray 订阅”不是单一的文件规范。日常收到的订阅地址通常是一个 HTTPS URL,客户端访问它后,才取得节点列表。返回内容可能是逐行排列的分享链接,也可能是这份列表经过 Base64 编码后的文本。地址负责获取和更新,内容负责描述节点,二者不能互相替代。

形态典型结构导入入口保留范围
Base64 订阅解码后是多行分享链接订阅分组中的 URL主要是节点连接参数
VLESS 分享链接vless://UUID@主机:端口?参数#名称从剪贴板导入通常描述一个节点
原生 JSON包含 inbounds、outbounds 等键自定义配置入口可包含入站、DNS、路由与多个出站

Base64 是编码,不是加密;能解码的人通常也能看到服务器地址与身份凭据。不要把订阅 URL、解码后的节点列表或完整配置粘贴到公开讨论区。订阅 URL 中的令牌还可能允许他人持续获取更新,不能因为它看起来不像密码就公开。

判断:先看解码后的第一层内容

出现多行协议链接,就按节点列表处理;出现带入站、出站的对象,就按完整配置处理。不要靠文件扩展名或文本长度判断格式。

v2rayN 与 v2rayNG:选对导入入口

v2rayN 是桌面客户端,v2rayNG 是使用 Xray 内核的 Android 客户端。两者常用的订阅流程都面向节点列表,能够解析哪些协议和参数还取决于客户端及内核版本。不能把“支持 JSON”理解成“订阅更新入口能直接接受任意 JSON”。

订阅 URL

推荐

将提供方给出的订阅地址保存到订阅分组。后续更新仍访问这个地址,适合节点会变化的服务。

适合:需要定期更新的节点列表

单条分享链接

复制完整的 vless:// 或 vmess:// 链接,再使用剪贴板导入。导入一次不等于建立了可更新的订阅。

适合:测试单节点与核对参数

自定义 JSON

使用客户端提供的自定义配置功能,并确认配置属于所选内核。完整配置可能接管 DNS 与路由,不能只检查服务器地址。

适合:需要保留完整路由或特殊出站的配置

  1. 建立订阅组

    v2rayN 主界面进入「订阅分组」→「订阅分组设置」,添加分组并填写订阅 URL。这里填写地址,不粘贴整段 Base64 内容。

  2. 更新节点

    返回「订阅分组」菜单,选择「更新全部订阅(不通过代理)」;如果地址需要经过现有代理访问,再尝试对应的「通过代理」更新项。不同界面的标点与名称可能略有差异。

  3. 测试单条

    在 v2rayN 使用「服务器」→「从剪贴板导入批量 URL」。在 v2rayNG 使用主界面「+」→「从剪贴板导入」,只复制协议链接本身,不带引号与说明文字。

  4. 安卓订阅

    v2rayNG 主界面右上角菜单进入「订阅分组设置」,通过「+」添加地址并保存,再返回主界面菜单执行「更新订阅」。若所用版本菜单名称不同,以订阅分组与更新功能为准。

v2flyNG 使用 v2fly 内核,不应把适用于 Xray 的所有扩展参数原样套用过去。尤其是 REALITY、特定流控等能力,必须先确认内核支持;本文的字段转换示例针对 Xray,不作为跨内核兼容承诺。

Base64 解码与重编码:只转换外层包装

常见 Base64 订阅的生成过程是:将每条节点链接放在独立的一行,再对整份 UTF-8 文本编码。因此,正确的解码结果通常仍是链接,而不是 JSON。部分提供方直接返回明文链接列表,这时不需要再做一次解码。

在 Mac 上,可以先复制 Base64 订阅正文,再在终端执行下面的命令。命令读取剪贴板并把结果输出到当前终端,不会替你访问订阅地址。输出中包含凭据,操作时避免共享终端画面。

pbpaste | base64 -D

反向操作时,先在本地纯文本文件中按行保存分享链接,再编码文件。以下命令假定当前目录已经存在 nodes.txt;它生成的是静态文本文件,不会自动得到一个可供客户端更新的订阅 URL。

base64 -i nodes.txt -o subscription.txt

vless:// 转 JSON:逐字段映射

下面用 TCP + TLS 展示最小映射。服务器域名为文档示例域名,UUID 为格式示例,不能直接连接。实际使用时,需要由服务提供方给出匹配的地址、端口、UUID 与 TLS 参数;不能只替换域名就假定可用。

vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=node.example.com#Example-TLS
443
示例远端 TLS 端口
10808
示例本机 SOCKS 端口
36
含连字符的示例 UUID 字符数

这些数字用于解释配置,不是测速结果,也不是所有客户端的默认值。远端端口和本地监听端口属于连接的两端,不要求相同。下面是一份用于说明字段的 Xray 配置,监听地址限定为本机回环地址。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443,
            "users": [
              {
                "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com"
        }
      }
    }
  ]
}
链接字段JSON 位置注意事项
UUIDsettings.vnext[0].users[0].id身份凭据,不能随意改写
主机与端口settings.vnext[0].address 与 portJSON 端口使用数字
encryption=noneusers[0].encryptionVLESS 字段,不等于关闭 TLS
type=tcpstreamSettings.network传输类型,需与服务端一致
security=tlsstreamSettings.security这里选择 TLS 传输安全层
snitlsSettings.serverName可能与连接地址不同
#Example-TLS客户端节点备注不参与协议握手

遇到 WebSocket、gRPC、REALITY 或 Vision 时,还需要映射路径、服务名、公钥、短 ID、指纹或 flow 等相应字段。不要给 TCP 示例随手添加一个 flow=xtls-rprx-vision 就当成转换完成;传输方式、服务端配置和内核能力必须一起核对。

JSON 转分享链接:哪些内容会丢失

反向转换要先找到目标出站,再读取它的协议、服务器、用户和传输设置。上面的 JSON 只有一个 VLESS 出站,因此可以还原为对应链接;若配置包含多个服务器或多个用户,则需要分别生成链接,不能用一条 URI 表示全部对象。

  1. 确认目标为 protocol: "vless",读取 vnext 内的地址、端口和用户 UUID。
  2. 把传输网络与安全类型分别写入 type 和 security,再补齐协议所需的查询参数。
  3. 对查询参数值与备注做百分号编码。例如路径 /edge?x=1 应写为 %2Fedge%3Fx%3D1,防止问号被误解析。
  4. 若服务器地址为 IPv6,URI 中的地址需要方括号;不要直接用冒号拆分整个地址。
  5. 在目标客户端重新导入后,逐项核对节点编辑页,再做实际连接测试。

结论:节点互转不等于配置迁移

需要保留 DNS、路由分流、多个出站之间的选择关系或本地入站时,保存原始 JSON。分享链接只适合迁移能够表达出来的节点参数。

即使链接能成功导入,客户端仍会使用自己的系统代理、TUN、DNS 与路由设置。原始 JSON 中“国内直连、其余代理”的规则不会随着一个 VLESS 节点自动迁移。系统代理决定哪些应用把请求交给客户端,路由规则决定接收后的请求走哪个出站,这是不同层次。

导入失败与连接失败:按阶段排查

先观察故障发生在哪一步:订阅请求失败、正文解析失败,还是节点已经出现在列表中却无法连接。节点出现说明至少通过了部分格式解析,不说明 UUID、TLS 参数或远端服务一定正确。

订阅更新成功,为什么还是没有节点?

检查当前选中的订阅分组与列表筛选,再查看更新日志是否提示有效节点数量为零。若返回正文实际是登录页、到期提示或完整 JSON,应先向提供方确认适用于该客户端的订阅格式,不要反复对同一内容编码。

JSON 粘贴进去怎么显示没有有效配置?

普通剪贴板节点导入入口通常按分享链接解析。完整 JSON 应使用自定义配置功能;同时检查逗号、双引号和顶层结构。JSON 不接受注释与末尾多余逗号,语法通过后仍需确认配置匹配所选内核。

链接能导入,但提示 TLS 握手失败?

先核对远端端口、security、SNI 和系统时间,再对照服务端要求检查传输类型。不要把关闭证书验证作为常规修复;地址能解析与证书名称匹配是两项不同检查。

订阅地址超时,需要先开 TUN 吗?

不必先改 TUN。若已有可用节点,可尝试客户端提供的通过代理更新选项;没有可用节点时,先确认当前网络能否访问订阅地址。若日志显示本地端口占用,应先停止重复运行的客户端或调整监听端口。

转换后节点通了,为什么应用仍连不上?

检查应用是否使用系统代理,以及实际代理端口是否与客户端一致。命令行工具未必读取系统代理,不能仅凭浏览器测试判断所有应用。启用 TUN 前先核对权限、路由和 DNS,避免同时改变多项设置而失去排查线索。

下载v2rayN按平台选择客户端