写给身处会检查流量的网络中的人,也写给在配置文件里看到 vless:// 却不知道那是什么的人。
VLESS 是什么?
用大白话回答:VLESS 是什么、它总是和什么搭配、过滤系统为什么难以识别它,以及它不能给你什么。

- VLESS 是 V2Ray 与 Xray 家族的轻量传输协议,单独并不构成完整的 VPN
- 它有意不带自己的加密,所以永远运行在 TLS 之上
- 比 VMess 更轻,且因为去掉了时间戳认证,不会再有时钟偏差导致的连不上
- 套 CDN 让它混在普通网页流量里;REALITY 用一个真实站点回应主动探测
- 不是匿名,也不是 Tor:一跳、一个运营方,是信任的转移而非消除
- 在被审查的网络上没有任何协议可以被保证,VLESS 也一样
VLESS 是 V2Ray 与 Xray 家族中的一个传输协议。它只定义两件事:客户端如何用一个 UUID 证明自己是哪个账户,以及如何请求服务器代它连接到某个目的地。整份规范基本就这么多。它是有意做得很薄的。
让多数人意外的一点是:VLESS 自己不带加密。这不是疏漏,本身也不是缺陷。加密被从协议里拿走,交给了 TLS,也就是保护普通 HTTPS 的那一层,所以实际部署中你永远不会看到单独的 VLESS,只会看到 TLS 之上的 VLESS,以及越来越常见的、带 REALITY 握手的 VLESS。
本页的其余部分先把问题答完整:它与 VMess、Shadowsocks、Trojan 的区别,所谓「套 CDN」到底是什么意思,深度包检测为什么难对付它,以及它做不到的事情的诚实清单。我们卖的东西放在最后一节,你可以跳过。
VLESS 实际上做了什么
一次 VLESS 会话从客户端发送一个很小的头部开始:一个版本字节、标识账户的 UUID、一个可选的附加字段、命令(用 TCP 连接、用 UDP 连接),以及目标地址和端口。服务器把 UUID 与自己的名单比对,打开请求的连接,此后就只是在两个方向之间搬运字节。
没有逐条消息的封帧,没有混淆层,没有时间戳握手,协议内部也没有密钥交换。每条连接的额外开销只有几个字节,协议本身的处理器成本几乎为零。所有昂贵的运算都发生在下层的 TLS 上,而现代处理器对它都有硬件加速。
这就是为什么 VLESS 被称作传输,而不是 WireGuard 意义上的隧道。WireGuard 会建立一个网络接口并转发数据包。VLESS 代理的是数据流:应用请求一个目的地,客户端把这个请求包起来,服务器去建立连接。整台设备是否都走它,取决于你用的客户端软件,而不是协议本身。
为什么它不带自己的加密
这个家族里更早的协议都自带密码学实现。这带来两个问题。第一,在一个用于抗审查的协议里塞自制密码学是一场坏赌注:写的人少,审的人也少,一旦出错往往多年无人察觉。第二个问题对真正的用途更致命:自制加密会产出样子独特的流量,而在互联网上不像任何东西的流量,即使读不懂也很容易被挑出来。
VLESS 采取相反立场。它负责身份识别和寻址,然后让开,把机密性与完整性交给 TLS。TLS 是互联网上被分析得最多的协议,由成千上万人审计过的库来实现,而在这里最有用的一点是:你设备上几乎每一条其他连接看起来也是这个样子。
实际后果是:前面没有 TLS 的 VLESS 端点是真正不安全的,绝不应该使用。如果有人给你一条 security 参数为 none 的 vless:// 链接,那条链接会明文发送你的账户 UUID 和目标地址。我们签发的每一份配置都使用 TLS。
VLESS 与 VMess 的对比
VMess 出现得更早,来自同一个项目。它自带加密,并用账户 UUID 与当前时间生成的哈希来做认证。这种对时间的依赖正是 VMess 经典故障的来源:客户端时钟与服务器相差一两分钟,就是连不上,而且没有任何有用的报错来解释原因。
VMess 还有明显的形态特征。因为它自己做封帧、自己做密码学,产生的字节流具有过滤系统可以学习的性质。若干国家级过滤系统已经证实了这一点,于是 VMess 部署纷纷再裹一层 TLS 才能活下来,而到那一步,这个协议等于为加密付了两次费。
VLESS 本质上就是去掉这两样东西的 VMess:没有内建密码学,没有时间戳认证。结果是处理器负担更轻、不受时钟偏差影响,并且在 TLS 承担外层之后,指纹识别的难度大幅提高。如果今天做选择,已经没有站得住脚的理由继续选 VMess。
VLESS 与 Shadowsocks、Trojan 的对比
Shadowsocks 是一个加密的 SOCKS 代理。它的流量被设计成看起来像没有任何可识别头部的随机字节。这在很多年里都很有效,但「某个端口上出现一串高熵字节,前面又没有 TLS 握手」本身就是一种特征,现代过滤系统已经学会专门寻找这种模式,并对产生这种流量的服务器发起主动探测。
Trojan 走了另一条路:与其不像任何东西,不如像一种极其常见的东西。Trojan 服务器出示真实的 TLS 证书,如果探测者没有正确口令就连接过来,它会返回一个普通网页。在扫描器看来那就是一台 Web 服务器。它的弱点是需要真实的域名和证书,而它所假扮的站点通常是没人访问的低流量站点。
TLS 之上的 VLESS 与 Trojan 属于同一思路,REALITY 则把同一想法推得更远。区别在于 VLESS 是传输而不是一整套服务器设计,因此它可以跑在普通 TLS 上、跑在 CDN 背后的 WebSocket 上、跑在 gRPC 上,或者跑在 REALITY 上,你按所处网络挑一个。这种灵活性才是它在这个生态里成为默认选择的真正原因。
「套 CDN」和 REALITY 在实践中意味着什么
套 CDN 的意思是,你的 VLESS 连接不是连到一台独占某个 IP 的服务器,而是连到内容分发网络的边缘节点,通过普通 HTTPS 请求里的 WebSocket 或 gRPC 传输,再由 CDN 转发出去。在观察网络的人看来,你连接的是一个同时为成千上万个无关网站提供服务的 IP,用的是属于该 CDN 的主机名和证书。封掉这个地址,就意味着连带封掉普通互联网的一大片,这个代价多数网络不愿意付。
REALITY 则从证书这一侧解决问题。REALITY 服务器借用一个真实、热门且与你无关的网站的 TLS 握手。当审查系统对你的服务器发起主动探测(这如今是常规手段而非理论假设),探测得到的是那个真实网站真正的握手和真正的证书。探测者会认为自己找到了某个知名服务的镜像,因为从外面看到的确实就是这样。
这两种手法都不是魔法,也都不是永久的。它们都是针对某种特定检测方法的回应,而检测方法会变。它们给你换来的是:封锁你的连接需要网络运营方承受它未必愿意承受的连带损失,而不是一条对它零成本的规则。
深度包检测为什么难对付它
过滤系统是分层工作的。最便宜的一层是被封地址和主机名清单。下一层看流量的形态:握手字节、包长分布、时序。最昂贵的一层会直接连上你的服务器,试图让它暴露自己是什么。
TLS 之上的 VLESS 留给第一层的东西很少,因为 CDN 地址无法被廉价地加入封锁名单。留给第二层的也很少,因为线路上跑的是一个 TLS 会话,其握手指纹可以做得与常见浏览器一致,而 VLESS 头部要在会话建立之后才出现,并且是加密的。REALITY 则直接回应第三层:给探测者一个真实站点。
仍然能奏效的手段有:只允许白名单目的地的网络;只放行到自家解析器和代理、封掉其余一切 TLS 的网络;以及长期的流量分析,它不需要读懂任何内容,就能注意到某条连接长时间搬运了可疑数量的数据。VLESS 是对模式匹配的有力回应,但它不是对「只让你访问五个批准地址」这种网络的回应。
VLESS 不是什么
它不是匿名。VLESS 连接把你流量的可见端点从你自己的网络挪到了服务器。你的本地网络和接入商不再看到你去哪里,服务器则看得到。这是信任的转移,不是信任的消除。我们的网络不保存日志,也就是不存储源地址和连接时间戳,服务器从内存运行,重启后机器上不留任何东西;即便如此,也请你用衡量任何人做出同样声明时的标准来衡量它。
它不是 Tor。Tor 会经过由不同人运营的三个独立中继,使得没有任何一个中继同时知道你是谁和你要去哪里。VLESS 只有一跳,只有一个运营方。针对这一特定威胁,Tor 慢得多,也强得多。如果你的风险模型要求路径上没有任何人能把两端关联起来,那么任何协议的 VPN 都是错误的工具。
它也不是保证。网络可以封协议,国家可以封 CDN,昨天还能用的端点今天可能就不行。任何声称 VLESS 在某个指定国家永远可用的人,都是在猜。真正成立的说法要窄一些,但依然有用:VLESS 被设计成看起来像普通的加密网页流量,当更朴素的协议失效时,它就是应该先试的那一个。
我们的 VLESS 运行在四个位置:新加坡、东京、洛杉矶和柏林。套 CDN 的端点是逐个维护出来的,不是批量开出来的,一份被认真照看的短名单胜过一份无人打理的长名单。/vpn/ 上的每种方案都包含 VLESS,同时还有分布在数十个国家的服务器上的 WireGuard 和 OpenVPN;如果想在决定前先看看端点,/vpn/status/ 有一块实时状态板。
怎么读懂一条 vless:// 链接
- 1
@ 之前的部分是你的账户
链接的形式是 vless://UUID@主机:端口?参数#标签。@ 之前那串很长的十六进制字符就是标识你账户的 UUID。请把它当成密码:拿到它的人就能使用你的访问权限。
- 2
主机和端口是客户端实际连接的地方
这是连接真正建立到的地址。在套 CDN 的方案里,这往往是 CDN 的主机名而不是服务器本身,端口通常是 443,这样它就和所有正常 HTTPS 流量落在同一个端口上。
- 3
security 说明是什么在保护它
security=tls 表示普通 TLS;security=reality 表示借用真实站点的 REALITY 握手。security=none 表示没有任何东西在加密这个会话,这不安全,除了实验环境之外绝不应该使用。
- 4
type 是 VLESS 的承载方式
type=ws 是 WebSocket,套 CDN 通常用它,并会配合一个 path 参数以及常见的 host 参数。type=grpc 使用 gRPC 流,type=tcp 是裸传输。这些必须与服务器完全一致,否则根本连不上。
- 5
sni 和 fp 决定网络看到什么
sni 是 TLS 握手中发送的服务器名,也是 TLS 连接中唯一以明文出现的部分。fp 设定客户端模仿的握手指纹,通常是 chrome,好让这条连接看起来像浏览器而不像代理工具。
- 6
# 之后的文字只是标签
它只是给客户端列表里的这一条起个名字,对连接没有任何影响。你可以随意改成任何便于自己区分服务器的名称。
问答
VLESS 是什么的缩写?
它不是正式的缩写。这个名字来自同一个 V2Ray 项目里更早的协议 VMess:保留了 V,其余部分表示这个设计「更少」,更少的开销、协议内部更少的密码学、更少可供指纹识别的痕迹。把它理解成「更轻的 VMess」,很接近本意。
VLESS 安全吗?
TLS 之上的 VLESS 在通常意义上是安全的:保护这个会话的,就是保护 HTTPS 的同一套密码学。不带 TLS 的 VLESS 并不安全,因为协议本身不加密任何东西,会暴露你的账户 UUID 和目标地址。请确认你拿到的链接里 security 是 tls 或 reality,绝不能是 none。
VLESS 和 VMess 有什么区别?
VMess 自带加密并用时间戳做认证,所以时钟不对的设备连不上,流量也具有可被学习的形态。VLESS 把这两样都去掉了,加密交给 TLS,身份只靠 UUID。VLESS 更轻、更难被指纹识别,也不依赖时钟。
VLESS 比 Shadowsocks 更好吗?
在会主动搜寻代理流量的网络上通常更好,因为 TLS 之上的 VLESS 看起来就像一次正常的 HTTPS 会话,而 Shadowsocks 看起来像一串无从解释的随机字节。在完全不做过滤的网络上,Shadowsocks 部署更简单,两者的差别也就无关紧要。
VLESS 能让我匿名吗?
不能。它改变的是谁能看到你的流量,而不是是否有人能看到。你的本地网络和接入商不再看到你的目的地,VPN 服务器则开始看到。若要对抗能同时观察连接两端的观察者,合适的工具是 Tor,而不是任何 VPN 协议。
在封锁 VPN 的国家里 VLESS 能用吗?
没有人能承诺这一点。VLESS 被设计成看起来像普通加密网页流量,所以当 WireGuard 和 OpenVPN 被封时,通常应该先试它;但只允许白名单目的地的网络同样可以拦住它。任何为特定国家提供保证的服务商,都应当视为警示信号。
哪些客户端支持 VLESS?
Android 上有 v2rayNG 和 Hiddify。iOS 上有 Shadowrocket 和 Streisand。Windows 上有 v2rayN、Nekoray 或 Hiddify。macOS 与 Linux 上有 Hiddify,也可以直接用 Xray 内核。它们都支持粘贴 vless:// 链接或扫描二维码导入。
VLESS 需要域名吗?
普通 TLS 或套 CDN 的部署需要,因为 TLS 证书是签发给域名而不是 IP 的。REALITY 是例外:它为握手借用了别的站点名,因此可以跑在裸 IP 上。作为用户你不必操心这些,域名已经写在给你的链接里了。
