先区分订阅地址、订阅返回内容和单节点分享链接,再用一个 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 与路由,不能只检查服务器地址。
适合:需要保留完整路由或特殊出站的配置
建立订阅组
v2rayN 主界面进入「订阅分组」→「订阅分组设置」,添加分组并填写订阅 URL。这里填写地址,不粘贴整段 Base64 内容。
更新节点
返回「订阅分组」菜单,选择「更新全部订阅(不通过代理)」;如果地址需要经过现有代理访问,再尝试对应的「通过代理」更新项。不同界面的标点与名称可能略有差异。
测试单条
在 v2rayN 使用「服务器」→「从剪贴板导入批量 URL」。在 v2rayNG 使用主界面「+」→「从剪贴板导入」,只复制协议链接本身,不带引号与说明文字。
安卓订阅
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
- 解码失败时,先排除误复制的引号、代码围栏以及网页提示文字;HTTP 错误页面也不是订阅正文。
- 标准 Base64 与 URL 安全变体的字符表不同,后者可能使用
-、_,并省略末尾补位。不要把所有内容都当成标准 Base64 直接处理。 vmess://的常见分享格式自身还有一层编码过的 JSON。整份订阅解码后看到它是正常现象,不代表所有行都要继续整体解码。vless://通常直接使用 URI 字段与查询参数。不要照搬 VMess 的内部 JSON 结构来解析 VLESS 链接。
vless:// 转 JSON:逐字段映射
下面用 TCP + TLS 展示最小映射。服务器域名为文档示例域名,UUID 为格式示例,不能直接连接。实际使用时,需要由服务提供方给出匹配的地址、端口、UUID 与 TLS 参数;不能只替换域名就假定可用。
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=node.example.com#Example-TLS
这些数字用于解释配置,不是测速结果,也不是所有客户端的默认值。远端端口和本地监听端口属于连接的两端,不要求相同。下面是一份用于说明字段的 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 位置 | 注意事项 |
|---|---|---|
| UUID | settings.vnext[0].users[0].id | 身份凭据,不能随意改写 |
| 主机与端口 | settings.vnext[0].address 与 port | JSON 端口使用数字 |
encryption=none | users[0].encryption | VLESS 字段,不等于关闭 TLS |
type=tcp | streamSettings.network | 传输类型,需与服务端一致 |
security=tls | streamSettings.security | 这里选择 TLS 传输安全层 |
sni | tlsSettings.serverName | 可能与连接地址不同 |
#Example-TLS | 客户端节点备注 | 不参与协议握手 |
遇到 WebSocket、gRPC、REALITY 或 Vision 时,还需要映射路径、服务名、公钥、短 ID、指纹或 flow 等相应字段。不要给 TCP 示例随手添加一个 flow=xtls-rprx-vision 就当成转换完成;传输方式、服务端配置和内核能力必须一起核对。
JSON 转分享链接:哪些内容会丢失
反向转换要先找到目标出站,再读取它的协议、服务器、用户和传输设置。上面的 JSON 只有一个 VLESS 出站,因此可以还原为对应链接;若配置包含多个服务器或多个用户,则需要分别生成链接,不能用一条 URI 表示全部对象。
- 确认目标为
protocol: "vless",读取vnext内的地址、端口和用户 UUID。 - 把传输网络与安全类型分别写入
type和security,再补齐协议所需的查询参数。 - 对查询参数值与备注做百分号编码。例如路径
/edge?x=1应写为%2Fedge%3Fx%3D1,防止问号被误解析。 - 若服务器地址为 IPv6,URI 中的地址需要方括号;不要直接用冒号拆分整个地址。
- 在目标客户端重新导入后,逐项核对节点编辑页,再做实际连接测试。
结论:节点互转不等于配置迁移
需要保留 DNS、路由分流、多个出站之间的选择关系或本地入站时,保存原始 JSON。分享链接只适合迁移能够表达出来的节点参数。
即使链接能成功导入,客户端仍会使用自己的系统代理、TUN、DNS 与路由设置。原始 JSON 中“国内直连、其余代理”的规则不会随着一个 VLESS 节点自动迁移。系统代理决定哪些应用把请求交给客户端,路由规则决定接收后的请求走哪个出站,这是不同层次。
导入失败与连接失败:按阶段排查
先观察故障发生在哪一步:订阅请求失败、正文解析失败,还是节点已经出现在列表中却无法连接。节点出现说明至少通过了部分格式解析,不说明 UUID、TLS 参数或远端服务一定正确。
订阅更新成功,为什么还是没有节点?
检查当前选中的订阅分组与列表筛选,再查看更新日志是否提示有效节点数量为零。若返回正文实际是登录页、到期提示或完整 JSON,应先向提供方确认适用于该客户端的订阅格式,不要反复对同一内容编码。
JSON 粘贴进去怎么显示没有有效配置?
普通剪贴板节点导入入口通常按分享链接解析。完整 JSON 应使用自定义配置功能;同时检查逗号、双引号和顶层结构。JSON 不接受注释与末尾多余逗号,语法通过后仍需确认配置匹配所选内核。
链接能导入,但提示 TLS 握手失败?
先核对远端端口、security、SNI 和系统时间,再对照服务端要求检查传输类型。不要把关闭证书验证作为常规修复;地址能解析与证书名称匹配是两项不同检查。
订阅地址超时,需要先开 TUN 吗?
不必先改 TUN。若已有可用节点,可尝试客户端提供的通过代理更新选项;没有可用节点时,先确认当前网络能否访问订阅地址。若日志显示本地端口占用,应先停止重复运行的客户端或调整监听端口。
转换后节点通了,为什么应用仍连不上?
检查应用是否使用系统代理,以及实际代理端口是否与客户端一致。命令行工具未必读取系统代理,不能仅凭浏览器测试判断所有应用。启用 TUN 前先核对权限、路由和 DNS,避免同时改变多项设置而失去排查线索。