本文速览
本文适合需要判断订阅内容、迁移单个节点或排查导入失败的 v2rayN、v2rayNG 与 v2flyNG 用户。读完可以区分聚合订阅、完整配置和分享链接,理解三者能够转换到什么程度,并按客户端入口完成导入与验证。
三种格式解决的问题不同
“订阅”经常被用作一个宽泛称呼,但实际拿到的内容可能属于三个层级。base64 聚合订阅是一批分享链接的封装;VMess 或 VLESS 分享链接通常只描述一个出站节点;原生 JSON 则可以是一份包含入站、出站、DNS、日志和路由规则的完整运行配置。先判断层级,再选择导入方式,比反复尝试不同按钮更有效。
浏览器打开订阅地址后看到长串字母、数字以及少量等号,不代表内容损坏。它可能是整份文本经过 base64 编码后的结果。解码后若每一行以
vmess:// 或 vless:// 开头,就是常见的聚合订阅。编码在这里承担文本包装作用,不等于加密,也不会改变节点参数本身。base64 聚合订阅
推荐一条地址可返回多个节点,客户端更新时能够整体替换服务器列表,适合持续维护。
适合:日常订阅更新、多设备同步节点列表
VMess 或 VLESS 分享链接
一条链接描述一个节点,便于临时导入、复制给另一台设备或检查参数差异。
适合:单节点迁移、手动测试、参数核对
原生 JSON 配置
可以同时表达入站监听、多个出站、DNS 与路由,结构最完整,但依赖内核字段兼容性。
适合:精细分流、服务端配置、进阶排错
| 格式 | 常见开头 | 承载范围 | 典型导入结果 |
|---|---|---|---|
| base64 聚合 | 无固定协议头 | 多条分享链接 | 生成一组服务器记录 |
| VMess 分享链接 | vmess:// |
单个 VMess 节点 | 生成一条服务器记录 |
| VLESS 分享链接 | vless:// |
单个 VLESS 节点 | 生成一条服务器记录 |
| 原生 JSON | { |
完整或局部内核配置 | 作为自定义配置运行或解析 |
结论:先识别承载层级,再决定转换方式
需要长期更新一批节点时保留订阅地址;只迁移一个节点时使用分享链接;涉及 DNS、入站端口和路由规则时保存原生 JSON。三者不是简单的文件扩展名差异。
base64 聚合订阅的内部结构
典型聚合订阅的原始响应是一段 base64 文本。解码后通常得到 UTF-8 文本,每行放置一条分享链接,换行符可能是 LF 或 CRLF。客户端更新订阅时先请求地址,再解码文本,随后按协议头逐行解析。无法识别的行通常会被跳过,因此“更新成功但节点数量为零”往往意味着解码后的协议不受当前客户端支持,或服务器返回了登录页、提示页等非订阅内容。
dmxlc3M6Ly9mNDdhZDQ4YS1hZWMxLTQwZTQtYTgzOC0wNjE2N2VhZDc4OTVA
ZXhhbXBsZS5pbnZhbGlkOjQ0Mz9lbmNyeXB0aW9uPW5vbmUmc2VjdXJpdHk9
dGxzJnR5cGU9d3MmcGF0aD0lMkZhcGkjVExTLVdTLUV4YW1wbGU=
上面的内容只是格式示意。判断它是否属于 base64,可先观察字符是否主要落在
A-Z、a-z、0-9、加号、斜杠和等号范围内,再进行解码。仅凭字符外观不能确定有效性,因为普通随机文本也可能符合字符范围。更可靠的方法是检查解码结果是否为可读文本,以及每一行是否拥有受支持的协议头。1 行
通常对应一个分享链接
UTF-8
常见解码后文本编码
10808
常见本地 SOCKS 监听端口示例
2 层
聚合编码与单节点编码可能叠加
VMess 分享链接本身也常包含一层 base64 编码,其内部一般是描述地址、端口、用户标识、传输方式和 TLS 参数的 JSON 对象。因此,一个 VMess 聚合订阅可能先对单节点 JSON 编码生成
vmess:// 链接,再把多条链接拼接后整体编码。排查时应逐层处理,不能把整份订阅直接当作单个 VMess 节点解码。VMess 与 VLESS 分享链接怎样表达节点
分享链接的目标是让客户端重建一个出站节点。VMess 常见形式是协议头后接经过 base64 编码的 JSON;VLESS 更接近标准 URI,用户标识放在用户信息部分,服务器地址和端口位于主机部分,传输、安全与流控参数位于查询字符串,井号后的文本作为节点名称。两种链接都可能包含敏感连接凭据,不应粘贴到公开网页或公开日志中。
- 读取协议头,确定使用 VMess 还是 VLESS 解析器。
- 提取服务器域名、端口与用户标识,并检查端口是否为 1 至 65535 的整数。
- 读取传输类型,例如 TCP、WebSocket、gRPC,并按类型解析路径或服务名。
- 读取 TLS、服务器名称与应用层协议参数,避免只迁移地址和端口。
- 解码节点备注,处理百分号编码后再显示在服务器列表中。
VLESS URI 的结构示意
下面示例使用不可解析的保留域名,重点是字段位置。
security=tls 表示传输安全设置,type=ws 表示 WebSocket,path 是请求路径,sni 是 TLS 握手使用的服务器名称。参数名区分大小写的情况应按客户端实现处理,不建议手工改写未知字段。vless://[email protected]:443?encryption=none&security=tls&sni=edge.example.invalid&type=ws&path=%2Fproxy#TLS-WS-Example
VMess 与 VLESS 也不能只替换协议名称完成互转。两者的认证模型和参数集合不同,VLESS 的
flow 等字段没有可直接映射的 VMess 对应项。只有服务端同时提供两种入站配置时,才能分别生成两条可连接的分享链接;单纯改写 URI 不会让服务端增加另一种协议支持。原生 JSON 与客户端订阅的关系
原生 JSON 面向 V2Ray 或 Xray 内核,顶层常见字段包括
log、dns、inbounds、outbounds 和 routing。其中,分享链接大多只能映射到某个 outbounds 项。若 JSON 还包含按域名、IP、端口或入站标签执行的路由规则,导出为单节点链接后无法保持原有行为。推荐方案:订阅负责节点,客户端负责本地策略
桌面端 v2rayN
- 通过订阅分组维护服务器列表
- 本地 SOCKS 端口按需设为 10808
- 路由规则单独保存并测试命中结果
安卓端 v2rayNG 或 v2flyNG
- 导入同一条订阅地址
- 按客户端支持范围解析节点
- 在设备端单独设置路由与 DNS
节点参数可以随订阅同步,本地监听、应用范围和路由策略应由每台设备分别管理。
最小配置并不等于订阅
以下 JSON 同时定义一个本地 SOCKS 入站和一个 VLESS 出站。即使把出站字段转换成分享链接,监听地址
127.0.0.1、端口 10808 与路由行为也不会进入链接。目标客户端会用自身默认值或现有设置补齐这些内容。{
"inbounds": [
{
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"udp": true
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.invalid",
"port": 443,
"users": [
{
"id": "f47ad48a-aec1-40e4-a838-06167ead7895",
"encryption": "none"
}
]
}
]
}
}
]
}
inbounds决定本机程序怎样把流量交给内核。outbounds决定流量通过哪个远端协议或直接连接离开。routing根据域名、IP、端口和标签选择出站。dns决定名称解析方式,但不会自动成为节点分享参数。
客户端导出的 JSON 还可能包含程序生成的标签、统计策略或特定内核字段。将其导入另一款客户端前,应确认目标客户端采用的内核及版本是否识别这些字段。v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核;两者对基础 VMess、VLESS 与常见传输的覆盖存在交集,但新字段和扩展能力不应假定完全一致。
导入、转换与更新的实际操作
日常使用中,优先让客户端直接读取订阅地址,而不是手工解码后逐条导入。直接订阅能够保留更新入口,服务端调整节点名称、地址或端口后,客户端可重新获取列表。手工转换适合检查内容、迁移少量节点或定位某一条记录为什么解析失败。
| 目标操作 | 建议入口 | 完成后的检查 |
|---|---|---|
| v2rayN 添加订阅 | 「订阅分组」→「订阅分组设置」→「添加」 | 更新订阅后检查分组名称与节点数量 |
| v2rayN 导入单节点 | 复制分享链接后使用「服务器」→「从剪贴板导入批量 URL」 | 核对地址、端口、传输和 TLS 参数 |
| v2rayNG 添加订阅 | 打开侧边菜单的「订阅分组设置」,新增地址后执行更新 | 确认当前分组已切换到新订阅 |
| v2rayNG 导入单节点 | 复制链接,点击右上角“+”,选择「从剪贴板导入」 | 打开节点详情检查服务器名称与传输方式 |
| v2flyNG 导入订阅 | 进入订阅分组设置,填写名称与完整地址后更新 | 确认节点协议在 v2fly 内核支持范围内 |
菜单文案可能随客户端版本调整,但操作顺序基本一致:先保存订阅地址,再主动更新,最后选择节点并启动连接。测试时不要只看“已启动”状态,还应检查核心日志、实际延迟与目标网页访问结果。延迟测试失败不一定代表节点完全不可用,也可能是测试地址不可达或 DNS 解析异常。
订阅更新成功,为什么列表还是空的?
先在订阅分组中确认当前选中的分组,再查看更新结果是否显示解析到 0 条记录。若为 0,复制响应内容到本地文本工具检查:base64 解码后应出现逐行分享链接,而不是登录页面、错误提示或 HTML 源码。
复制 VLESS 链接后提示格式错误怎么办?
检查链接是否从
vless:// 开始,用户标识、域名和端口之间是否完整,查询参数中的 & 是否被聊天工具截断。重新复制原始纯文本,不要手工删除百分号编码。base64 解码后出现乱码,是编码不兼容吗?
先确认输入没有缺失末尾字符,并分别尝试标准 base64 与 URL 安全变体。解码后的字节通常按 UTF-8 读取;若仍不可读,内容可能经过压缩、采用其他订阅协议,或返回的并非聚合文本。
能把完整 JSON 直接贴进订阅地址栏吗?
不能把配置正文当作网址。订阅地址栏需要可请求的 URL;完整 JSON 应通过客户端提供的自定义配置导入入口处理,并检查其中的入站端口是否与现有程序冲突。
同一订阅在两个客户端显示的节点数不同?
分别记录更新后的总数,并检查被跳过节点的协议和传输参数。v2rayNG 与 v2flyNG 使用不同内核,遇到仅一方支持的字段时,解析或运行结果可能不同。不要用改名方式强行转换协议。
转换时需要保留的字段与安全边界
可靠的转换应先解析成结构化对象,再按目标格式重新序列化,而不是对字符串做查找替换。至少要保留协议、服务器地址、端口、用户标识、传输类型、TLS 状态、服务器名称、路径或服务名、流控参数与节点备注。任何一个连接关键字段缺失,都可能产生“可以导入但无法连接”的记录。
- 复制原始内容到本地受控环境,判断它是订阅响应、分享链接还是完整 JSON。
- 解码并解析为字段对象,对端口、用户标识和必填参数进行类型检查。
- 根据目标客户端与内核能力筛选可表达字段,记录无法映射的项目。
- 生成目标格式后重新解析一次,比较地址、端口、安全层和传输层是否一致。
- 在客户端中建立独立测试分组,不覆盖仍可使用的原订阅。
- 连接后检查核心日志,并分别验证 DNS、TCP 与需要的 UDP 场景。
结论:转换前保留原订阅,转换后做字段回读
最稳妥的验收不是看到“导入成功”,而是把生成结果再次解析并逐项比对。地址、端口、用户标识、TLS 服务器名称和传输路径全部一致后,再进入连接测试。
订阅地址和分享链接都可能直接包含访问凭据。截图排错时应遮盖完整订阅 URL、用户标识和认证字段;分享日志时只保留错误类型、时间与必要的网络状态。若订阅地址已经进入公开记录,应在服务提供方后台更换订阅凭据,再删除客户端中的旧地址并执行一次完整更新。