本文适合需要在 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 结构与换行方式。
- 先看明文前缀。以
vmess://或vless://开头时,通常可以按单节点分享链接处理。 - 再看 JSON 顶层字段。出现
inbounds、outbounds、routing与dns时,更接近 Xray 或 V2Fly 内核的原生配置。 - 检查是否为可解码文本。若内容主要由字母、数字、加号、斜杠和末尾等号构成,可尝试按标准 base64 解码,再检查结果是否为逐行链接。
- 确认响应没有被网页包装。若开头是
<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 安全变体对字符的处理不同,错误地删除末尾补位符可能导致解码失败。
- base64 订阅转分享链接列表:解码外层文本,统一换行符,移除空行,再逐条识别协议头。该过程一般不丢失节点字段。
- 分享链接导入客户端:客户端解析单节点参数,并在本地生成对应出站配置。客户端自己的 DNS、路由和日志设置不会来自分享链接。
- 分享链接转原生 JSON:可以生成一个出站对象,但仍需补充本地入站、DNS、路由、日志与策略,才可能成为完整运行配置。
- 原生 JSON 提取分享链接:只适用于结构明确的单个出站。多出站、负载分配、路由规则、DNS 服务器和策略对象无法完整装进一条普通链接。
- VMess 与 VLESS 互转:只有服务端同时提供两种协议的监听和认证参数时,才能分别生成对应链接。客户端侧不能自行推导另一种协议配置。
结论:先确定目标层级,再执行转换
只是迁移节点时保留分享链接即可;需要复制整套 DNS 与路由行为时,应迁移原生 JSON 或在目标客户端重新配置本地策略。把完整 JSON 压缩成单条链接,必然舍弃一部分运行逻辑。
转换 VLESS URI 时,还要保留查询参数的大小写和值域。例如 type=ws、security=tls、sni=edge.example.com 和 path=%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 节点进行延迟测试和实际连接,确认日志没有协议字段错误。