选择内核先看节点要求,而不是只看客户端名称。本文区分客户端、协议、传输与安全层,解释 VLESS 不等于 REALITY、XTLS Vision 不等于普通 TLS,并给出安卓端选择、桌面端核对配置以及迁移失败时的检查顺序。已有 VMess 节点的用户也可以据此判断是否需要更换内核。
一、Xray 与 V2Fly:共同来源,不同配置边界
Project V 是理解这套生态的起点,V2Ray 是其中的核心代理工具,V2Fly 社区维护 V2Ray 的发展。Xray-core 从 V2Ray 项目分支而来,随后形成独立演进的功能与配置体系。因此,两者有相近的入站、出站、路由概念,却不能据此认为任何 JSON 文件都能直接互换。
客户端负责节点列表、订阅更新、界面设置和启动管理;内核负责实际处理连接、协议握手与路由。v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核。桌面端 v2rayN 的可用内核及调用方式取决于发行包和配置类型,排查时应以启动日志显示的可执行程序与版本为准。
- 客户端名称:表示操作入口,不能单独证明正在运行哪一个内核。
- 节点协议:例如 VMess 或 VLESS,规定代理连接的协议结构。
- 传输方式:例如 TCP 或 WebSocket,决定代理数据如何承载。
- 安全与流控:TLS、REALITY 和 Vision 分属不同配置维度,需要分别核对。
二、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 内,写错层级可能导致报错或未按预期生效。
- 改用 REALITY:不能只把
tls改成reality。还要使用对应的realitySettings,并填写服务端提供的参数。 - 密钥字段:分享链接常以
pbk携带服务端公钥材料。Xray 不同版本的 JSON 中可能见到publicKey或password命名,应按实际内核版本的配置定义生成,不能只照抄旧截图。 - 其他映射:分享链接中的
sni、sid、fp通常对应界面里的 serverName、shortId 与指纹选项,导入后仍应逐项核对。 - 旧配置迁移:旧式 XTLS 配置不能通过全文替换字段名迁移到 Vision;传输、流控和服务端支持需要一起检查。
四、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、字段支持、文件路径与本地端口占用;后者再检查服务端地址、安全层参数、网络连通性和系统时间。把所有失败都归因于内核速度,会绕过真正可修复的配置问题。
上面的本地地址和端口用于说明检查方法,不代表所有客户端的默认值。请先查看当前客户端显示的 SOCKS 监听端口;若实际不是 10808,应修改下面命令。远端端口 443 与本地代理端口属于两段不同的连接,不能相互替换。
curl --proxy socks5h://127.0.0.1:10808 https://example.com/
- 检查本地监听:若立即提示无法连接本地代理,先确认内核启动成功、端口一致,并关闭占用同一端口的旧实例。
- 检查导入结果:对照原始节点参数,核对 UUID、服务器端口、flow、SNI 与 REALITY 参数。Base64 只是一种编码方式,不会补齐缺失字段。
- 检查远端握手:出现 TLS 或认证错误时,核对系统时间、域名和密钥材料,不要以关闭验证作为通用修复方法。
- 检查代理覆盖范围:命令能访问而浏览器不能时,再看系统代理、分应用代理、路由规则和 DNS;这时不宜先更换服务器协议。
测试内核差异时应保持同一节点、同一网络、同一目标和相近时段,先关闭 Mux 等额外变量,再观察日志与连接结果。节点负载、网络路径、服务器限速及目标站点响应都可能影响速度;支持更丰富的协议,不等于任何线路上都有更高吞吐。
六、内核选择常见问题
订阅里写着 VLESS,为什么在 v2flyNG 里不能用?
先展开节点详情,检查是否还有 REALITY 或 xtls-rprx-vision。这些扩展不是基础 VLESS 的同义词。若节点要求这些能力,改用 v2rayNG 导入原始链接,再核对字段是否完整。
v2rayN 已经换了内核文件,为什么还是启动报错?
先读启动日志,确认实际调用的文件和版本确实发生变化,再检查生成的配置。旧版客户端可能仍按旧字段生成 JSON;单独替换可执行文件,并不保证客户端生成器与新内核兼容。
REALITY 能连接端口,但打开网页一直超时怎么办?
端口可达只能说明基础网络连接成立。继续检查 SNI、shortId、密钥材料、指纹和 flow,再查看远端握手日志。若直接代理测试成功而应用失败,转查系统代理和分流规则。
原来的 VMess 节点正常,有必要迁移到 Xray 吗?
没有仅凭协议名称就必须迁移的理由。先保留可用配置;只有服务端提供新节点、现有客户端不支持所需功能,或排查出明确兼容问题时,再按单个节点测试迁移。
最终选择可以收束为一条检查链:先确认服务端要求,再确认客户端能生成哪些字段,最后确认实际启动的内核是否接受这些字段。把这三层分开,通常比按客户端名称猜测兼容性更可靠。