V2Ray 订阅格式全解析:Base64、原生 JSON 与分享链接互转方法

Base64 订阅、原生 JSON 配置和 VMess、VLESS 分享链接并不是同一种数据。先判断外层容器与节点协议,再执行解码、拆分或导入,可以减少格式错误和字段丢失。

本文速览

本文面向需要导入、迁移或排查 V2Ray 订阅的用户,解释 Base64 文本、原生 JSON 与分享链接的结构边界,给出从识别格式到客户端导入的完整流程,并说明转换时最容易丢失的传输、TLS、路由和订阅更新信息。

先区分订阅、分享链接与运行配置

“订阅”通常指一个可以定期请求的地址。客户端访问该地址后,服务器返回一组节点数据,再把这些节点写入本地数据库。订阅地址本身不等于节点,它更接近一个持续更新的数据入口;同一地址今天返回 8 个节点,下次更新时可能变为 10 个。

“分享链接”则表示单个节点。常见形式以 vmess://vless:// 开头,链接中携带服务器地址、端口、用户标识、传输方式和 TLS 参数。多个分享链接可以逐行排列,再整体编码成订阅响应,但单条链接本身没有自动更新能力。

“原生 JSON”通常是 V2Ray 或 Xray 核心可以读取的运行配置。它包含 inboundsoutboundsroutingdns 等对象,描述的不只是远端节点,还包括本地监听端口、流量入口和路由行为。把一份完整运行配置当作普通订阅导入,客户端不一定能够拆出节点列表。

订阅响应

数据数量
通常为多节点
常见外层
Base64 文本
更新方式
按订阅地址重新请求
主要用途
批量维护节点

重点是节点集合与后续更新,不负责保存客户端全部设置。

单节点链接

数据数量
每条一个节点
常见前缀
vmess 或 vless
更新方式
重新导入链接
主要用途
分享与快速迁移

适合少量节点迁移,无法保留订阅分组的远端更新关系。

原生 JSON

顶层对象
inbounds 与 outbounds
本地端口
可包含 10808、10809
路由规则
可完整表达
主要用途
核心运行配置

导入前要确认客户端支持整份配置运行,而不是只支持节点解析。

客户端本地数据

节点记录
来自订阅或手动添加
分组信息
由客户端维护
系统代理
属于本机设置
路由模式
可能独立于订阅

迁移节点不等于迁移本机端口、路由模式和系统代理状态。

结论:先确认数据层级再转换

需要定期更新时保留订阅地址;只迁移单个节点时使用分享链接;需要复制本地入站、DNS 和路由行为时才考虑完整 JSON 配置。

Base64 订阅如何识别与解码

传统 V2Ray 订阅响应常把多条分享链接按换行拼接,再对整段 UTF-8 文本执行 Base64 编码。浏览器直接打开订阅地址时,看到的内容可能是一长串由字母、数字、加号、斜线和等号组成的文本。外层解码后,才会出现逐行排列的 vmess://vless:// 链接。

判断时不能只看字符串是否“像 Base64”。普通文本、压缩数据和某些 URL 安全编码也可能具有相似外观。可靠方法是先读取响应的内容类型和前几个字符,再尝试解码;解码结果应当是有效 UTF-8 文本,而且每个非空行都应有可识别的协议前缀。若解码后仍是一段编码文本,需要检查是否发生了重复编码,而不是持续盲目解码。

获取响应 判断容器 解码文本 逐行解析 写入分组

外层解码后的典型结构

vmess://编码后的单节点数据
vless://用户标识@node-a.example:443?encryption=none&security=tls&type=ws&path=%2Fedge#A-WS
vless://用户标识@node-b.example:443?encryption=none&security=reality&type=tcp&flow=xtls-rprx-vision#B-TCP

上面的内容展示结构,不提供可连接凭据。实际解析时应按换行符切分,并兼容 Unix 的 LF 与 Windows 的 CRLF。空行可以忽略,但行首、行尾的空格应先清理。若服务端返回的文本末尾没有换行符,最后一条链接仍然必须被解析。

Base64 还有标准字母表与 URL 安全字母表之分。标准形式使用加号和斜线,URL 安全形式使用连字符和下划线;末尾的等号填充也可能被省略。成熟客户端通常会兼容这些差异,但手工处理时要先统一字母表并补齐长度。编码长度除以 4 后若余 2,需要补两个等号;若余 3,需要补一个等号;余 1 通常意味着文本被截断。

  • HTTP 状态应为成功响应;跳转到登录页或错误页时,不要把 HTML 当成订阅内容。
  • 解码结果应使用 UTF-8;节点备注包含中文时,错误字符集会造成名称乱码。
  • 每一行只放一条分享链接;不要在链接中间插入人工换行。
  • 订阅更新后节点数量从 12 变成 0 时,先保存原分组,再检查响应内容是否为空。
  • 订阅地址属于需要谨慎保存的数据,不应粘贴到公开网页或不受控的转换服务。

VMess、VLESS 分享链接的字段差异

VMess 与 VLESS 分享链接的编码方式不同。常见 VMess 链接在 vmess:// 后放置一段 Base64 编码的 JSON,对象中可能包含 addportidnetpathhosttlssni 等字段。部分旧格式还会出现 vpsaid,其中常见配置版本值为 2,现代部署中的 aid 通常为 0。

VLESS 分享链接更接近标准 URI:用户标识位于用户名区域,服务器地址与端口位于主机区域,传输和安全参数放入查询字符串,节点备注放在井号后的片段中。例如 type=ws 表示 WebSocket,security=tls 表示 TLS,path=%2Fedge 解码后为 /edge。参数顺序通常不影响含义,但参数名和值必须进行正确的 URL 编码。

字段目的 VMess 常见字段 VLESS 常见位置 转换注意项
服务器 add URI 主机部分 IPv6 地址需要保留方括号
端口 port URI 端口部分 必须为 1 至 65535 的整数
用户标识 id URI 用户信息部分 复制时不能增加空格
传输类型 net type ws、tcp、grpc 不可直接混用
传输路径 path pathserviceName WebSocket 路径与 gRPC 服务名含义不同
安全层 tls security TLS 与 Reality 所需参数不同
服务器名称 sni sni 不要用节点备注替代服务器名称

转换不是简单更换前缀

VMess 与 VLESS 是不同协议,不能把 vmess:// 直接改成 vless://。即使服务器地址、端口和传输层相同,服务端也必须存在相应协议入站,用户认证方式也要匹配。所谓“互转”更准确地说,是在已知服务端同时支持目标协议时,将公共连接参数映射到另一种链接结构。

传输字段必须按语义映射。例如 VMess JSON 中的 net=ws 可以映射到 VLESS 的 type=wspath=/edge 需要变成 URL 编码后的查询参数;但 Reality 所需的公钥、短标识、指纹与 Flow 并不存在于传统 VMess + TLS 链接中,转换工具不能凭空生成这些值。

结论:转换只映射已有参数

目标链接缺少公钥、短标识、SNI 或 gRPC 服务名时,应回到节点提供方取得完整参数;用默认值补齐通常只会得到一条格式正确但无法连接的链接。

原生 JSON 与分享链接怎样互相整理

从原生 JSON 提取分享链接时,首先定位 outbounds 中协议为 VMess 或 VLESS 的出站,再读取服务器、端口和用户字段。随后还要检查 streamSettings:其中的 network 决定传输类型,security 决定 TLS 或 Reality,具体的 WebSocket、gRPC、TCP 设置则位于对应子对象中。

反向生成 JSON 时,分享链接只能还原远端出站及其传输参数。它通常无法提供本地 SOCKS 端口、HTTP 端口、DNS 服务器、日志级别和完整路由规则。因此,把分享链接转换成 JSON 后,还需要客户端或配置生成器补充本地部分。常见本地组合是 SOCKS 监听 127.0.0.1:10808、HTTP 监听 127.0.0.1:10809,具体端口应以当前客户端设置为准。

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks"
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example",
            "port": 443,
            "users": [
              {
                "id": "示例值已隐藏",
                "encryption": "none"
              }
            ]
          }
        ]
      }
    }
  ]
}

这段 JSON 只用于说明层级。实际配置还需要与节点匹配的 streamSettings,并可能需要额外的直连与阻断出站。若直接导入缺少传输设置的配置,而服务器实际使用 WebSocket + TLS,核心会按不匹配的默认传输尝试连接,日志中通常只能看到连接被关闭或握手失败。

从完整配置导出单节点链接时,还会遇到路由信息无法表达的问题。域名分流、GeoIP、GeoSite、进程规则和 DNS 查询策略属于运行配置,不是单节点 URI 的字段。正确做法是分别迁移节点与路由:节点通过分享链接导入,路由规则通过客户端的备份、导入功能或手工配置恢复。

  1. 检查 JSON 顶层是否包含 outbounds,并确认目标出站的协议名称。
  2. 读取服务器地址、端口与用户参数,不复制示例或已失效记录。
  3. streamSettings 提取传输、安全层、SNI、路径和服务名。
  4. 按目标协议生成分享链接,对路径、备注和查询参数执行 URL 编码。
  5. 导入客户端后查看详情页,逐项核对端口、传输、TLS、SNI 和用户标识。
  6. 先测试单节点,再批量加入订阅响应,避免错误参数扩散到整个分组。

三款客户端的导入范围与具体操作

v2rayN 是桌面客户端,可管理订阅分组、单节点链接和自定义配置。以 7.x 系列界面为例,添加订阅地址可进入“订阅分组”→“订阅分组设置”,新建分组后填写订阅地址并保存,再执行“订阅分组”→“更新全部订阅”。若剪贴板中有多条分享链接,可使用“服务器”→“从剪贴板导入批量 URL”。

v2rayNG 使用 Xray 内核处理常见 VMess 与 VLESS 节点。安卓端添加订阅时,可打开左上角菜单,进入“订阅分组设置”,使用右上角添加按钮保存地址,再回到主界面执行更新。单条或多条分享链接可先复制到剪贴板,再通过右上角“+”选择“从剪贴板导入”。不同小版本的文字可能略有差异,但入口仍围绕订阅分组和添加按钮。

v2flyNG 使用 v2fly 内核,适合以 VMess 和 V2Ray 核心兼容配置为主的场景。其订阅与剪贴板导入流程和安卓端常见布局接近,但协议识别范围取决于内核能力。若订阅包含只由另一内核实现的安全方式或传输组合,链接可以被解析并显示,运行时仍可能失败。

客户端 主要平台 Base64 多节点订阅 分享链接 完整 JSON
v2rayN 7.x 桌面端 可按订阅分组更新 支持批量剪贴板导入 可作为自定义配置使用,需核对核心
v2rayNG 1.10.x Android 可保存地址并更新 支持剪贴板与文件导入 导入能力取决于配置结构与 Xray 内核
v2flyNG 1.x Android 可维护订阅分组 适合 V2Ray 兼容链接 需符合 v2fly 内核支持范围

导入后必须核对的六项参数

  • 地址与端口:端口应为有效整数,常见 TLS 入口为 443,但不能据此自动改写其他端口。
  • 用户标识:检查前后是否带空格,避免聊天工具换行造成截断。
  • 传输方式:TCP、WebSocket 与 gRPC 必须和服务端一致。
  • 路径或服务名:WebSocket 路径通常以斜线开头;gRPC 使用服务名,不应强行添加斜线。
  • 安全参数:TLS、Reality、SNI、指纹和 Flow 应逐项对应,不能只看链接前缀。
  • 本地代理端口:在 v2rayN 中打开“设置”→“参数设置”,确认本地 SOCKS 与 HTTP 端口没有被其他程序占用。

转换失败、订阅为空与乱码的排查方法

转换失败通常发生在三个阶段:获取订阅响应、解码外层容器、解析单条节点。排查时应按这个顺序进行,不要一开始就修改协议参数。若订阅请求已经返回错误页,后续的 Base64 解码和节点导入都不会产生有效结果。

可以先记录三个具体数值:HTTP 状态、响应字节数和解码后的非空行数。例如状态正常、响应为 18 KB、解码后得到 24 行,说明订阅获取与外层解码基本完成;若客户端最后只显示 20 个节点,应继续检查剩余 4 行的协议前缀或字段格式。

订阅更新后显示零个节点怎么办?

先不要删除原分组。复制订阅地址到受控环境中检查响应类型;若内容以网页标签开头,通常是请求被重定向到提示页。确认地址完整后,在客户端重新保存并更新。

Base64 解码提示长度不正确怎么办?

先删除换行与首尾空格,再确认使用的是标准还是 URL 安全字母表。长度除以 4 余 2 时补两个等号,余 3 时补一个;余 1 时应重新获取原文。

导入成功但节点名称全是乱码怎么办?

确认订阅响应和解码结果按 UTF-8 读取。若只有井号后的备注乱码,重新对 URI 片段执行百分号解码;不要把整条链接重复解码。

VLESS 链接导入后缺少路径怎么办?

查看原链接是否包含 type=wspath=。路径中的斜线应编码为 %2F;若使用 gRPC,应核对 serviceName,而不是填写 WebSocket 路径。

为什么同一链接在不同客户端表现不同?

先比较客户端内核家族和版本,再打开节点详情核对未识别参数。链接解析成功只代表结构可读,不代表当前内核实现了对应的传输与安全组合。

用日志定位字段层错误

若节点能够启动但无法建立连接,先查看客户端核心日志。DNS 解析失败通常指向域名或 DNS 设置;连接超时更可能是地址、端口或网络路径问题;TLS 握手失败应重点检查 SNI、系统时间和安全层;启动阶段直接报配置字段错误,则需要检查 JSON 层级或当前内核是否认识该字段。

本地端口冲突也会造成“导入正确但无法使用”。例如 SOCKS 端口配置为 10808,而另一实例已经监听同一端口,核心可能无法启动。在 v2rayN 中进入“设置”→“参数设置”核对端口,并关闭重复运行的实例;安卓端则先停止当前连接,再重新启动目标配置。

安全迁移与长期维护建议

订阅地址可能具备访问节点列表的能力,应按敏感配置管理。保存时使用客户端的订阅分组,不在截图、公开文档和聊天记录中展示完整地址。需要跨设备迁移时,优先通过客户端自身的配置导出功能传递,并在完成后清理临时文件。

不要依赖在线转换页面处理真实订阅。Base64 只是编码,不提供保密能力;任何能够读取原文的服务都能得到其中的节点参数。需要检查结构时,可以在本地复制一份,先移除用户标识与订阅查询参数,再进行格式分析。

长期维护应把“节点来源”和“本机策略”分开。订阅负责节点更新,客户端负责系统代理、TUN、DNS 和路由分流。这样即使订阅列表发生变化,本机的直连域名、阻断规则和监听端口也不会随节点一起被意外覆盖。

  1. 为不同来源建立独立订阅分组,不把所有节点合并到一个不可追踪的列表。
  2. 更新前记录节点数量,更新后比较新增、删除和名称变化。
  3. 保留一个已验证可用的节点副本,避免订阅短时异常导致全部配置不可用。
  4. 每次转换后抽查至少一条 VMess 与一条 VLESS 节点,核对传输层字段。
  5. 客户端升级后先验证订阅更新、节点启动与本地端口,再恢复自动更新计划。

结论:节点格式与本机策略分开维护

订阅只承担节点集合更新,分享链接只承担单节点迁移,JSON 才表达完整运行结构。按这三个层级保存数据,后续更换客户端或内核时更容易定位兼容问题。

客户端入口 查看各平台下载选项