V2Ray 订阅格式科普:base64、原生 JSON 与分享链接的区别及转换

base64 订阅、原生 JSON 和 vmess/vless 分享链接处在不同的数据层级。识别它们的结构,才能判断客户端是否可以直接导入,以及转换过程会丢失哪些配置。

本文速览

本文适合需要在 v2rayN、v2rayNG 与 v2flyNG 之间迁移节点,或正在排查订阅格式错误的用户。重点说明三类格式的实际结构、识别方法、客户端导入路径,以及哪些转换可以直接完成、哪些转换必须由服务端提供对应协议参数。

三类格式不在同一个配置层级

“订阅”经常被当作所有配置文件的统称,但严格来说,订阅是一种批量分发机制,分享链接是单个节点的便携表示,原生 JSON 则是内核运行时读取的完整配置。三者可以包含部分相同字段,却不能简单地按文件扩展名判断是否等价。

常见的 base64 订阅响应,是先把多条 vmess、vless 等分享链接按行排列,再把整段 UTF-8 文本编码为 base64。客户端更新订阅时先下载响应、解码文本,然后逐行解析节点。base64 只改变文本表示方式,不负责加密,也不会自动补齐协议字段。

订阅地址

推荐

由固定地址持续返回节点列表,适合统一维护、批量更新和多端同步。

适合:日常使用、节点较多、参数会定期调整

vmess/vless 分享链接

一条链接通常表达一个出站节点,复制方便,但不会承载完整 DNS 与路由配置。

适合:单节点迁移、临时导入、逐项核对参数

原生 JSON

可描述入站、出站、DNS、路由、日志与策略,字段最完整,但依赖具体内核语法。

适合:自定义配置、复杂分流、内核级部署

vmess 分享链接本身也经常包含一段 base64。经典形式是在 vmess:// 后放入编码后的 JSON 对象,其中可包含地址、端口、用户标识、传输方式、TLS 设置与备注。这里的 base64 只作用于单个节点对象,与“整份订阅再次编码”的外层 base64 不是同一层。

VLESS 链接依赖完整查询参数

vless 分享链接通常使用 URI 查询参数直接表达配置,例如服务器地址、端口、加密标记、传输类型、TLS 或 REALITY 参数。它更接近可读的键值结构,但路径、主机名和备注中的特殊字符必须进行 URL 编码。

格式 典型开头 主要内容 能否表达完整路由
base64 订阅 通常没有固定协议头 多条分享链接或节点记录 通常不能
VMess 分享链接 vmess:// 单个 VMess 出站节点 不能
VLESS 分享链接 vless:// 单个 VLESS 出站节点 不能
原生 JSON { 内核完整运行配置 可以

识别 base64、分享链接与 JSON 的操作方法

判断格式时应先看解码前后的第一层结构,不要仅根据文件名判断。订阅接口即使以 .txt 结尾,也可能返回 base64;没有扩展名的地址也可能直接返回逐行分享链接。正确流程是确认响应为文本,再检查协议头、JSON 结构与换行方式。

UTF-8
订阅文本常用字符编码
1 行
通常对应一条分享链接
10808
v2rayN 常见本地 SOCKS 端口
10809
v2rayN 常见本地 HTTP 端口
  1. 先看明文前缀。vmess://vless:// 开头时,通常可以按单节点分享链接处理。
  2. 再看 JSON 顶层字段。出现 inboundsoutboundsroutingdns 时,更接近 Xray 或 V2Fly 内核的原生配置。
  3. 检查是否为可解码文本。若内容主要由字母、数字、加号、斜杠和末尾等号构成,可尝试按标准 base64 解码,再检查结果是否为逐行链接。
  4. 确认响应没有被网页包装。若开头是 <html、错误提示或登录页面,说明拿到的不是可导入订阅数据。

下面是解码后可能出现的逐行结构。示例域名与用户标识只用于说明字段位置,不能用于连接。

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=edge.example.com&path=%2Fws#Example-VLESS
vmess://eyJ2IjoiMiIsInBzIjoiRXhhbXBsZS1WTWVzcyIsImFkZCI6Im5vZGUuZXhhbXBsZS5jb20iLCJwb3J0IjoiNDQzIn0=

识别编码层级

第一行是可直接阅读的 VLESS URI。问号前是用户标识、服务器与端口,问号后是传输和安全参数,井号后是节点备注。第二行的 VMess 数据仍需再解码一次;这正是外层订阅编码与内层节点编码可能叠加的情况。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks"
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443
          }
        ]
      }
    }
  ]
}

原生 JSON 不能按分享链接解析

这类 JSON 已经包含本地入站和远端出站的层级,不应当当作普通订阅逐行解析。完整可运行配置还需要合法用户参数和匹配的传输设置;示例只展示结构识别方法。

v2rayN、v2rayNG 与 v2flyNG 的导入差异

客户端是否支持某种协议,与它能否识别某种文本格式是两个问题。客户端可能成功解码订阅,却因为当前内核不支持节点使用的传输或安全特性而无法连接。排查时应分别确认“解析成功”和“内核可用”。

以 v2rayN 7.x 界面为例,批量订阅通常通过「订阅分组」→「订阅分组设置」添加。保存地址后返回主界面,再执行更新订阅。单条分享链接可先复制,再使用从剪贴板导入服务器的功能。导入后应核对地址、端口、传输类型、TLS、SNI 与路径,而不是只看节点名称。

推荐方案:订阅负责节点,客户端负责本地策略

桌面端 v2rayN
  • 通过订阅分组维护节点列表
  • 按本机需求设置系统代理与路由
  • 使用日志确认 10808、10809 等本地端口状态
安卓端 v2rayNG 或 v2flyNG
  • 导入同一条兼容订阅地址
  • 更新后重新选择有效节点
  • 按客户端内核能力筛选协议与传输

订阅用于同步远端节点参数,本地 DNS、分应用规则和系统代理状态仍应分别配置。

v2rayNG 使用 Xray 内核,适合导入由该内核支持的 VMess、VLESS 及相关传输配置。常用路径是打开订阅分组设置,新增订阅地址并执行更新;单条链接则可通过右上角添加入口从剪贴板导入。v2rayNG 1.9.x 不同小版本的菜单文字可能略有调整,但订阅分组与剪贴板导入是两个独立入口。

导入成功不代表内核兼容

v2flyNG 使用 V2Fly 内核,应优先导入服务端明确标记为 V2Fly 兼容的配置。若订阅中混入仅由其他内核实现的字段,链接可能被读取,但连接阶段仍会报不支持的传输或安全参数。不能通过改节点备注、删除未知字段来推断协议兼容性。

输入内容 v2rayN v2rayNG v2flyNG
base64 节点订阅 可作为订阅分组更新 可作为订阅更新 可导入兼容节点
单条 VMess 链接 可从剪贴板导入 可从剪贴板导入 可导入兼容链接
单条 VLESS 链接 取决于所选内核与参数 取决于 Xray 支持情况 取决于 V2Fly 支持情况
完整内核 JSON 按自定义配置处理 不等同于普通节点订阅 不等同于普通节点订阅

格式转换的可行路径与信息损失

格式转换首先要区分“编码转换”和“协议转换”。把 base64 解码为逐行分享链接只是恢复文本,不会改变节点协议;把 VLESS 改写成 VMess 则涉及服务端认证与协议实现,不能靠替换链接前缀完成。

从 base64 订阅转换为明文链接列表通常是可逆的:按 UTF-8 解码后保留每一行,再按原顺序编码即可。需要注意标准 base64 与 URL 安全变体对字符的处理不同,错误地删除末尾补位符可能导致解码失败。

  1. base64 订阅转分享链接列表:解码外层文本,统一换行符,移除空行,再逐条识别协议头。该过程一般不丢失节点字段。
  2. 分享链接导入客户端:客户端解析单节点参数,并在本地生成对应出站配置。客户端自己的 DNS、路由和日志设置不会来自分享链接。
  3. 分享链接转原生 JSON:可以生成一个出站对象,但仍需补充本地入站、DNS、路由、日志与策略,才可能成为完整运行配置。
  4. 原生 JSON 提取分享链接:只适用于结构明确的单个出站。多出站、负载分配、路由规则、DNS 服务器和策略对象无法完整装进一条普通链接。
  5. VMess 与 VLESS 互转:只有服务端同时提供两种协议的监听和认证参数时,才能分别生成对应链接。客户端侧不能自行推导另一种协议配置。

结论:先确定目标层级,再执行转换

只是迁移节点时保留分享链接即可;需要复制整套 DNS 与路由行为时,应迁移原生 JSON 或在目标客户端重新配置本地策略。把完整 JSON 压缩成单条链接,必然舍弃一部分运行逻辑。

转换 VLESS URI 时,还要保留查询参数的大小写和值域。例如 type=wssecurity=tlssni=edge.example.compath=%2Fws 分别描述传输、安全层、服务器名称与路径。漏掉任意一个关键字段,都可能表现为握手失败或连接后无流量。

VMess 转换后逐项校验字段

VMess 链接的 JSON 字段存在不同历史表示方式,端口可能是字符串,也可能被解析为数字。处理时应先按客户端可接受的结构输出,不应只根据字段名称做机械拼接。遇到导入成功但节点参数为空的情况,应重新解码链接,对照地址、端口、用户标识、传输类型与 TLS 字段逐项检查。

订阅转换失败的常见问题

订阅更新失败不一定是格式问题。网络超时、地址返回登录页、响应被截断、字符编码错误和客户端内核不兼容,都可能产生相似提示。最有效的排查方式是先确认下载到的原始内容,再进入节点解析与连接测试。

订阅地址打开后只有一长串字符,算正常吗

如果字符主要由字母、数字、加号、斜杠与末尾等号组成,可能是标准 base64。解码后应出现逐行分享链接;若结果仍是乱码,应检查响应编码和内容是否完整。

链接能导入,但更新后节点数量是零怎么办

先确认响应不是网页错误页,再检查解码结果是否含有客户端可识别的协议头。v2rayN 7.x 可打开日志查看订阅解析提示,并确认订阅分组没有启用错误的筛选条件。

为什么同一条订阅在两个客户端里节点数不同

客户端可能按内核能力过滤不兼容节点,也可能使用不同的备注去重规则。分别记录更新前后的节点数,再对比被忽略链接的协议与传输参数。

把原生 JSON 编码成 base64 就能当订阅吗

不能直接等同。常见 base64 订阅的解码结果是逐行分享链接,而完整 JSON 是单个配置对象。除非接收端明确支持这种响应结构,否则仍会解析失败。

如果订阅更新超时,可先连接一个已确认可用的节点,再检查更新请求是否允许经过当前代理。v2rayN 中还应核对本地监听端口是否被占用;常见配置使用 10808 作为 SOCKS 端口、10809 作为 HTTP 端口,但实际值应以「设置」→「参数设置」中的当前配置为准。

  • 响应以 HTML 标签开头:检查订阅地址是否跳转到登录或错误页面。
  • base64 无法解码:检查复制是否缺少结尾字符,或响应是否被截断。
  • 节点导入后地址为空:检查 VMess 内层 JSON 字段是否完整。
  • VLESS 导入后握手失败:核对端口、SNI、传输类型、路径与安全参数。
  • 更新后出现重复节点:检查多个订阅分组是否引用同一数据源,并核对备注去重设置。

建立可维护的订阅与配置迁移流程

迁移时保留三类原始信息

稳定的迁移流程应保留原始订阅地址、解码后的节点列表和客户端本地设置三类信息。订阅地址负责后续更新,节点列表便于定位解析问题,本地设置则包含系统代理、DNS、路由分流和端口等不会随分享链接迁移的内容。

在更换客户端或内核前,先记录当前可用节点的协议、服务器端口、传输类型与安全参数,再用目标客户端导入同一条订阅。更新完成后不要立刻批量修改全部节点,应先选取一个 VMess 或 VLESS 节点进行延迟测试和实际连接,确认日志没有协议字段错误。

  1. 记录订阅地址所属分组、更新方式和最近一次成功更新时间。
  2. 抽取一条已知可用链接,核对协议、地址、端口、用户标识与传输参数。
  3. 在目标客户端新增订阅,不覆盖现有可用分组。
  4. 执行一次手动更新,并记录更新前后的节点数量。
  5. 选择单个节点测试,检查核心日志、DNS 解析和本地监听端口。
  6. 确认连接正常后,再恢复路由分流、自动更新与系统代理设置。

对于只需要在 v2rayN 与 v2rayNG 之间同步节点的场景,优先保留订阅地址,不必反复导出完整 JSON。对于依赖复杂域名分流、多个出站和自定义 DNS 的场景,应把节点迁移与路由迁移拆成两个步骤,避免误以为分享链接已经包含全部行为。

最终判断标准不是文件能否被“导入”,而是字段是否被完整解析、当前内核是否支持、连接日志是否正常,以及本地代理与路由是否按预期生效。先识别数据层级,再选择对应导入入口,能够减少大多数订阅转换问题。

下载 v2rayN 查看四个平台安装包