· 内核解析 · 约 10 分钟

Xray 内核与 V2Fly 内核区别:VLESS、XTLS 与 REALITY 特性对比

梳理 Project V 生态中两大内核的分支关系,对比 VLESS、XTLS Vision、REALITY 的支持情况和配置写法,帮你在 v2rayNG 与 v2flyNG 之间做选择。

本文速览

选择内核先看节点要求,而不是只看客户端名称。本文区分客户端、协议、传输与安全层,解释 VLESS 不等于 REALITY、XTLS Vision 不等于普通 TLS,并给出安卓端选择、桌面端核对配置以及迁移失败时的检查顺序。已有 VMess 节点的用户也可以据此判断是否需要更换内核。

一、Xray 与 V2Fly:共同来源,不同配置边界

Project V 是理解这套生态的起点,V2Ray 是其中的核心代理工具,V2Fly 社区维护 V2Ray 的发展。Xray-core 从 V2Ray 项目分支而来,随后形成独立演进的功能与配置体系。因此,两者有相近的入站、出站、路由概念,却不能据此认为任何 JSON 文件都能直接互换。

客户端负责节点列表、订阅更新、界面设置和启动管理;内核负责实际处理连接、协议握手与路由。v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核。桌面端 v2rayN 的可用内核及调用方式取决于发行包和配置类型,排查时应以启动日志显示的可执行程序与版本为准。

二、VLESS、XTLS Vision 与 REALITY 支持对照

VLESS 本身不提供传输加密,常见配置把它与 TLS 或 REALITY 配合使用。V2Fly 也有 VLESS 实现,因此“看到 VLESS 就必须使用 Xray”并不准确;真正需要进一步检查的是 flow、安全层及传输的具体组合。Xray 的扩展能力不能反向推定为 V2Fly 具有同名支持。

配置能力Xray 内核V2Fly 内核选择依据
VMess支持支持继续核对传输、TLS 与服务端参数
基础 VLESS支持有对应实现不能把所有扩展组合视为通用配置
XTLS Vision支持相应流控不支持 Xray 的 Vision 流控出现 xtls-rprx-vision 时选择兼容的 Xray 环境
REALITY支持不支持 Xray 的 REALITY 配置核对密钥材料、SNI、shortId 与指纹设置
路由分流支持规则配置支持规则配置核对配置格式、规则语义及数据文件

XTLS Vision 是流控机制,常见的配置值为 xtls-rprx-vision。它不是传输名称,也不能把节点中的 TLS 开关改名为 Vision 来启用。REALITY 则是 Xray 的安全机制,需要客户端与服务器提供相互匹配的参数;它不是一种订阅编码格式,更不是独立的客户端。

普通 TLS 通常依赖证书与域名验证。REALITY 使用不同的握手机制和认证参数,不能通过关闭证书验证来替代。服务端允许的 serverName、客户端使用的密钥材料与 shortId 必须匹配;有一个字段不对,端口能够连接也不代表代理握手成功。

三、配置写法:先分清 flow 与 security 的位置

下面是用于识别字段层级的 Xray 出站示例,展示 VLESS、Vision 与普通 TLS 的组合。域名使用保留示例域名,UUID 仅为格式演示;这不是可直接使用的节点。实际部署必须替换为服务端提供的地址、用户标识与证书域名,并确认服务端启用了对应流控。

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "example.com",
            "port": 443,
            "users": [
              {
                "id": "e1dd2b67-68ca-4c8f-a92b-27eb305d91e7",
                "encryption": "none",
                "flow": "xtls-rprx-vision"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.com"
        }
      }
    }
  ]
}

示例中的 encryption: "none" 是 VLESS 用户字段,不表示整个连接采用明文传输;外层的 security: "tls" 承担传输安全。flow 放在用户对象内,security 放在 streamSettings 内,写错层级可能导致报错或未按预期生效。

四、v2rayNG、v2flyNG 与 v2rayN 的选择方案

如果现有订阅明确含有 VLESS、Vision、REALITY 的组合,安卓端优先采用 v2rayNG 的 Xray 环境。如果现有配置以 V2Fly 的配置体系为基准,并且不依赖这些 Xray 特性,可以使用 v2flyNG。没有必要仅因为名称不同,就迁移一套已经工作正常的 VMess 配置。

Xray 内核环境

推荐

针对本文的 VLESS、Vision 与 REALITY 使用场景,安卓端选择 v2rayNG;桌面端在 v2rayN 中核对对应节点实际调用的 Xray 内核。

适合:服务端明确要求 Xray 扩展特性的节点。

V2Fly 内核环境

安卓端使用 v2flyNG,保留与现有 V2Fly 配置一致的工作方式。基础协议能否连接,仍取决于具体传输及参数是否匹配。

适合:已有可用的 V2Fly 配置,且不依赖 Vision 或 REALITY。

核对方案:桌面与安卓分别验证

桌面端:v2rayN
  • 导入后检查协议、传输、安全方式与 flow。
  • 启动连接,查看日志里的内核名称和版本。
  • 确认系统代理指向当前本地监听端口。
安卓端:按内核选择
  • REALITY 或 Vision 节点使用 v2rayNG。
  • V2Fly 配置在 v2flyNG 中核对导入结果。
  • 允许 VPN 连接后,再检查分应用代理范围。

同一订阅可用于两端,但显示出相同节点名称,不代表两端解析出的字段和支持能力完全一致。

五、切换内核后连不上:从端口到握手逐层检查

先区分“内核没有启动”与“内核已启动但远端连接失败”。前者应检查 JSON、字段支持、文件路径与本地端口占用;后者再检查服务端地址、安全层参数、网络连通性和系统时间。把所有失败都归因于内核速度,会绕过真正可修复的配置问题。

443
本文示例的远端 TLS 端口
10808
本地 SOCKS 检查示例端口
127.0.0.1
本机回环监听地址

上面的本地地址和端口用于说明检查方法,不代表所有客户端的默认值。请先查看当前客户端显示的 SOCKS 监听端口;若实际不是 10808,应修改下面命令。远端端口 443 与本地代理端口属于两段不同的连接,不能相互替换。

curl --proxy socks5h://127.0.0.1:10808 https://example.com/
  1. 检查本地监听:若立即提示无法连接本地代理,先确认内核启动成功、端口一致,并关闭占用同一端口的旧实例。
  2. 检查导入结果:对照原始节点参数,核对 UUID、服务器端口、flow、SNI 与 REALITY 参数。Base64 只是一种编码方式,不会补齐缺失字段。
  3. 检查远端握手:出现 TLS 或认证错误时,核对系统时间、域名和密钥材料,不要以关闭验证作为通用修复方法。
  4. 检查代理覆盖范围:命令能访问而浏览器不能时,再看系统代理、分应用代理、路由规则和 DNS;这时不宜先更换服务器协议。

测试内核差异时应保持同一节点、同一网络、同一目标和相近时段,先关闭 Mux 等额外变量,再观察日志与连接结果。节点负载、网络路径、服务器限速及目标站点响应都可能影响速度;支持更丰富的协议,不等于任何线路上都有更高吞吐。

六、内核选择常见问题

订阅里写着 VLESS,为什么在 v2flyNG 里不能用?

先展开节点详情,检查是否还有 REALITY 或 xtls-rprx-vision。这些扩展不是基础 VLESS 的同义词。若节点要求这些能力,改用 v2rayNG 导入原始链接,再核对字段是否完整。

v2rayN 已经换了内核文件,为什么还是启动报错?

先读启动日志,确认实际调用的文件和版本确实发生变化,再检查生成的配置。旧版客户端可能仍按旧字段生成 JSON;单独替换可执行文件,并不保证客户端生成器与新内核兼容。

REALITY 能连接端口,但打开网页一直超时怎么办?

端口可达只能说明基础网络连接成立。继续检查 SNI、shortId、密钥材料、指纹和 flow,再查看远端握手日志。若直接代理测试成功而应用失败,转查系统代理和分流规则。

原来的 VMess 节点正常,有必要迁移到 Xray 吗?

没有仅凭协议名称就必须迁移的理由。先保留可用配置;只有服务端提供新节点、现有客户端不支持所需功能,或排查出明确兼容问题时,再按单个节点测试迁移。

最终选择可以收束为一条检查链:先确认服务端要求,再确认客户端能生成哪些字段,最后确认实际启动的内核是否接受这些字段。把这三层分开,通常比按客户端名称猜测兼容性更可靠。

客户端下载v2rayN / v2rayNG