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

安东·别洛夫

阅读时间 8 分钟技术

VLESS 内部结构

每个 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 内运行。

情况VMessVLESS
手机时钟快了 5 分钟服务器拒绝连接服务器接受连接
通过隧道打开 HTTPS 网站3 层加密(网站、VMess 和外层 TLS)2 层加密(网站和外层 TLS)
连接没有外层 TLSVMess 仍用自带的算法加密数据沿途的任何观察者都能看到 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 类连接。

  1. 客户端按主流浏览器的方式发起 TLS 握手。第一条消息 ClientHello 中写明了目标网站。ClientHello 还带有一个标记,只有持有服务器私钥的一方才能核验。标记的一部分是短 ID,即 shortId。
  2. 服务器核验标记。标记有效时,服务器自己完成握手,随后传输 VLESS 数据。
  3. 扫描器或其他访问者发送不带标记的普通 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 的服务器,并会自动选择协议。

先试用 3 天,再做决定

试用费用为 $0.50,包含全部 187 个国家和地区,所有应用都能使用。试用结束后按每月 $5 续订。续订可以随时在账户页面取消。

Mac App Store App Store Google Play