VLESS 是什么:把加密交给 TLS 或 REALITY 的协议

每个 VLESS 连接都以简短的头部开始,其中携带身份标识和目标地址。协议本身既不加密,也不伪装。这些工作由其下层的 TLS 或 REALITY 负责。因此,讨论 VLESS 时几乎总会提到两者之一。本文介绍头部、与 VMess 相比的改动、传输方式和 REALITY。文中还列出 VLESS 密钥包含的内容,并说明 Ben's VPN 如何使用这一协议。
VLESS 头部包含 UUID、指令和地址
VLESS 是客户端与代理服务器之间的连接协议。每个连接先发送请求头,数据紧随其后。请求头由以下字段组成。
- 协议版本。
- UUID,即在服务器上的身份标识,例如
8b71f62c-7736-4334-ab2f-032d2115d2fd。它同时充当密码,因为服务器只接受自己列表中的 UUID。 - 附加信息,即额外的设置,例如下文介绍的流控模式。
- 指令,用于请求 TCP 流、UDP 数据包或同一连接中的多个流(Mux)。
- 目标端口和地址,地址可以是 IPv4、IPv6 或域名。
VLESS 不会在头部之后的数据上附加任何内容。服务器回复的头部更短,只有版本和附加信息。请求头中没有时间戳,也没有加密方式字段。VLESS 也不加密头部本身。这就是 VLESS 和 VMess 的主要区别。
2020年夏天,VLESS 的第一个版本随 V2Ray 发布。从同年年底起,它主要在 V2Ray 的分支 Xray-core 中开发。sing-box 等其他内核也支持这一协议。严格来说,VLESS 本身是代理协议。应用把整台手机或电脑的流量都经由 VLESS 转发时,得到的就是 VPN。VPN 与代理有何不同一文详细比较了两者。
VLESS 去掉了 VMess 的加密和时钟校验
VMess 是 V2Ray 中较早的协议,用自带的 ChaCha20-Poly1305 或 AES-128-GCM 算法加密数据。VMess 验证连接时,会同时校验 UUID 和当前时间。按照 Xray 文档,客户端和服务器的时钟与准确时间的误差不能超过 2 分钟。这 2 项校验中,VLESS 只保留了 UUID 校验。在标准配置下,VLESS 不加密任何内容。服务器上的 decryption 字段和客户端上的 encryption 字段都设为 none。时钟快慢不影响 VLESS 连接。
下表列出 VMess 和 VLESS 在 3 种情况下的差别。前 2 种情况下,两者都在 TLS 内运行。
| 情况 | VMess | VLESS |
|---|---|---|
| 手机时钟快了 5 分钟 | 服务器拒绝连接 | 服务器接受连接 |
| 通过隧道打开 HTTPS 网站 | 3 层加密(网站、VMess 和外层 TLS) | 2 层加密(网站和外层 TLS) |
| 连接没有外层 TLS | VMess 仍用自带的算法加密数据 | 沿途的任何观察者都能看到 UUID 和目标地址 |
在 TLS 内部,VMess 的加密只会增加处理器负载和耗电,VLESS 没有这项开销。开启流控模式时,与网站的握手结束后,外层 TLS 不再重复加密数据。2025年,Xray 为 VLESS 加入了可选的内置加密 VLESS Encryption。这种加密用于没有外层 TLS 的配置。TLS 在服务器之前终止的配置也适合使用它,例如 TLS 终止于 CDN 的情况。REALITY 配置不需要 VLESS Encryption。
传输方式决定 VLESS 的流量特征
VLESS 由某种传输方式承载,网络上的观察者看到的是这种传输方式。Xray 为 VLESS 提供了多种传输方式,主要的 4 种如下。
- RAW,旧配置中称为 tcp。它是纯 TCP 连接。在其上叠加 TLS 或 REALITY 后,它看起来就像普通的 HTTPS 流量。
- XHTTP,前身为 SplitHTTP。它把数据流拆分到一系列常规的 HTTP 请求和响应中,经由 HTTP/1.1、HTTP/2 或 HTTP/3 传输。XHTTP 也可以经 CDN 转发。在观察者看来,它像不断向自己的服务器发送请求的 Web 应用。
- gRPC。流量以远程过程调用的形式经 HTTP/2 传输,许多应用与 API 交换数据也采用这种方式。
- WebSocket。网页聊天和网页游戏使用的那类长连接。它也可以经 CDN 转发。
REALITY 可与 RAW、XHTTP 和 gRPC 搭配,但不能与 WebSocket 搭配。
REALITY 服务器不需要域名和证书
普通 TLS 要求服务器拥有域名和与之匹配的证书。REALITY 两者都不需要。2023年春天,REALITY 随 Xray-core 1.8.0 推出。握手时,服务器使用真实第三方网站的身份,这个网站称为目标网站。下面的步骤说明服务器如何处理 2 类连接。
- 客户端按主流浏览器的方式发起 TLS 握手。第一条消息 ClientHello 中写明了目标网站。ClientHello 还带有一个标记,只有持有服务器私钥的一方才能核验。标记的一部分是短 ID,即 shortId。
- 服务器核验标记。标记有效时,服务器自己完成握手,随后传输 VLESS 数据。
- 扫描器或其他访问者发送不带标记的普通 ClientHello。服务器不直接回应,而是把连接转发给目标网站。目标网站返回自己真实的证书和页面。
目标网站必须支持 TLS 1.3 和 HTTP/2。REALITY 使用 X25519 密钥对。私钥留在服务器上,公钥交给客户端。
VLESS 密钥包含全部连接设置
服务商或服务器管理员提供的 VLESS 密钥是一长串字符。客户端连接所需的一切都在其中。
- 服务器地址和端口。
- UUID,同时充当密码。
- 传输方式和安全层(TLS 或 REALITY)。
- 客户端在握手中发送的网站名称(SNI)。
- 使用 REALITY 时,还有服务器公钥和 shortId。
- 客户端在 ClientHello 中模仿的浏览器指纹。
- 流控模式,通常是
xtls-rprx-vision。隧道内还有一个 TLS 连接时,它会隐藏该连接握手阶段典型的数据包大小。握手之后,它不再重复加密网站已经加密的内容。 - 名称,便于在列表中找到这个密钥。
这样的服务器也可以在租用的 VPS 上自己搭建。这时,配置和内核更新都要自己负责。旧地址遭到封锁后,还需要把服务器迁移到新地址。关于租用服务器和付费使用 VPN 的比较,详见 VPS 和 VPN 的区别一文。
服务器地址对网络运营商仍然可见
VLESS 配合 REALITY 隐藏的是连接中传输的内容,而不是另一端是哪台服务器。网络运营商仍能看到设备与这台服务器之间的连接。可见的信息包括服务器地址、连接活跃的时段,以及每个方向传输的字节数。这个地址遭到封锁后,任何协议设置都无法恢复连接。这时需要换一台地址不同的服务器。
有些网络只允许连接列表中经过批准的地址。列表之外的服务器无法连接,协议伪装得再好也一样。在这类网络中,流量必须改走其他路径。
Ben's VPN 应用自动选择协议,不需要密钥
Ben's VPN 应用有 4 种连接方式(VLESS + REALITY、XHTTP、Hysteria2 和 Shadowsocks)。应用自动在其中选择,设置中无法固定使用某一种。4 种方式的逐项对比见 VPN 协议指南。
应用不接受其他服务或自建服务器的 VLESS 密钥。应用也不需要这类密钥,所以无需输入 UUID 或密钥。在手机、平板电脑或电脑上安装应用,然后轻点连接。接着在购买 Ben's VPN 窗口中为订阅付款。如果已有订阅,就在同一窗口中登录。各平台的下载方式见本站的应用页面。
连接质量差时,应用可能显示连接不佳提示,提示中有解决问题按钮。这个按钮给出 2 个选项,即更换位置和查找可用服务器。在账户 → 设置中,这项查找对应查找可用服务器按钮。查找时会再次检测当前服务器,并为服务器分配新的 IP 地址。其他方法都无效时,查找会启用多跳。整个过程最多需要 2 分钟。
问题与解答
运行 VLESS 需要自己的域名吗?
使用 REALITY 时不需要。服务器使用第三方目标网站的身份,所以不需要自己的证书。如果 VLESS 在普通 TLS 内运行,或者位于 CDN 之后,就需要域名和证书。
VLESS 服务器为什么要用 443 端口?
443 是 HTTPS 的标准端口。在这个端口上,TLS 或 REALITY 连接看起来就像普通的网页浏览。换成不常见的端口,同样的连接就会显得与大多数流量不同。VLESS 协议本身可以使用任何端口。
VLESS 与 Hysteria2 相比如何?
VLESS 通常经 TCP 传输,外层是 TLS 或 REALITY。Hysteria2 基于 QUIC,所以运行在 UDP 上。从外部看,Hysteria2 流量像 HTTP/3。因此,影响这 2 种协议的网络限制并不相同。封锁 UDP 或对 UDP 限速的网络会影响 Hysteria2,但不影响经 TCP 传输的 VLESS。Ben's VPN 两种协议都有,应用会在两者之间选择。
REALITY 能隐藏服务器的 IP 地址吗?
不能。REALITY 伪装的是握手,不是服务器地址。网络上的观察者能看到设备连接的是哪台服务器。这个地址一旦遭到封锁,就需要换用新地址上的服务器。
能在 Ben's VPN 中添加自己的 VLESS 密钥吗?
不能。其他服务或自建服务器的 VLESS 密钥在应用中无法使用。应用连接的是 Ben's VPN 的服务器,并会自动选择协议。








