V2Ray 客户端不会替你选择协议。选择由你导入的配置决定,而配置来自你的服务商或你自己的服务器。所以实际的问题是:该向服务商要什么,或者自己该搭什么。本文解释真正重要的差异,最后给出一条简短的建议。
三层,而不是一个选择
“VLESS 还是 VMess”听起来像一个决定,其实是三个:
- 协议:客户端如何认证,以及载荷是什么样子(VMess、VLESS、Trojan、Shadowsocks)。
- 传输:字节如何传送(纯 TCP、WebSocket、gRPC 等)。
- 安全:连接外面包了什么(无、TLS 或 REALITY)。
同一个协议,取决于另外两层,可能几乎看不出来,也可能很容易被发现。审查方看到什么,主要由传输和安全这两层决定。
审查方能看到什么
- 看起来像随机的字节。 纯 TCP 上的 Shadowsocks 和 VMess 没有可识别的报头。这本身就是一个信号:自 2021 年底起,防火长城会封锁第一个数据包看起来像完全加密数据的连接。详见中国篇。
- TLS 握手。 Trojan,以及基于 TLS 的 VLESS 或 VMess,看起来像 HTTPS。审查方仍然可以检查服务器名称、IP 地址、证书,以及连接的行为方式。
- 借来的握手。 REALITY 模仿你所选的某个真实网站的 TLS 握手。没有密钥的探测会被转发到那个真实网站,看到的是它真实的页面。你不需要自己的域名或证书。
四种协议对比
| VMess | VLESS | Trojan | Shadowsocks | |
|---|---|---|---|---|
| 自身加密载荷 | 是 | 否,依赖 TLS 或 REALITY | 否,依赖 TLS | 是 |
| 默认看起来像 | 纯 TCP 上的随机字节 | 取决于安全层:随机字节、TLS 或 REALITY | HTTPS | 随机字节 |
| 需要自己的域名和证书 | 仅在使用 TLS 时 | 仅在使用 TLS 时,REALITY 不需要 | 需要 | 不需要 |
| 时钟不准会失败 | 会 | 不会 | 不会 | 不会 |
| 可导入 v2rc | 是 | 是 | 是 | 是 |
- VMess 是最初的 V2Ray 协议。它用 UUID 和时间戳认证,所以手机或服务器的时钟差了几分钟,就会在没有任何错误提示的情况下失败。请使用 alterId 0(AEAD 模式);非零的 alterId 属于旧版做法。
- VLESS 是更轻量的继任者。它自己不做加密,因此隐私程度只取决于它下面那一层。请搭配 TLS 或 REALITY 使用,不要在公开互联网上使用安全为
none的配置。 - Trojan 模仿 HTTPS:在普通 TLS 连接里放一个密码。不知道密码的客户端看到的是一个正常的网页。它需要为真实域名申请真实证书,而域名可能被封。
- Shadowsocks 是历史悠久的加密代理,也是最容易搭建的。请使用 AEAD 加密方式;
rc4-md5、aes-256-cfb等旧的流加密方式很弱。没有插件或封装时,它的流量就是前面说的完全加密那一类。
REALITY 和 Vision 带来什么
在 REALITY 配置中,你会看到 security=reality、服务器名称(sni)、公钥(pbk)和 Short ID(sid)。服务器名称必须是支持 TLS 1.3 和 HTTP/2 的真实网站;REALITY 文档正是这样要求的。
flow=xtls-rprx-vision 是 Vision flow。一个 TLS 连接装在另一个 TLS 连接里,会留下可识别的特征;研究文献称之为 TLS-in-TLS,Xue et al. (USENIX Security 2024) 证明这类特征可以暴露经过混淆的代理。Vision 的设计目的,是针对本身就是 HTTPS 的流量,减弱这种特征。
两者都不是魔法。服务器的 IP 地址和托管网络依然重要,REALITY 也不会隐藏“这条连接指向的是境外数据中心地址”这一事实。
该要什么
- 在受限网络上(俄罗斯、伊朗、中国及类似地区):TCP 上的 VLESS 加 REALITY 和 Vision,使用 443 端口。
- 再要一个不同类型的配置: Trojan,或基于 TLS 加 WebSocket 或 gRPC 的 VLESS,可选择放在 CDN 之后。CDN 会隐藏服务器的 IP 地址,但这要求 CDN 本身在你所在的地方可以访问,且没有被限速。
- 在开放的网络上: 四种都行。用你的服务商已经支持的即可。
- 如果你的服务商给你的是订阅: 你无需选择,但可以读一读其中的链接,了解自己拿到的是什么。见如何解读配置链接。
- 至少保留两个来自不同主机的配置。 一个失效时,你需要的是另一个 IP 地址,最好还是另一种协议,而不是同一台服务器上的另一个配置。
v2rc 能导入什么,不能导入什么
v2rc 可以从链接、V2Ray JSON 文件、剪贴板或订阅地址导入 VMess、VLESS(包括 REALITY)、Shadowsocks 和 Trojan。它不能导入 Hysteria 2、TUIC、WireGuard、AmneziaWG 和 NaiveProxy。前四个基于 UDP 运行,而许多受限网络会丢弃 UDP;NaiveProxy 基于 HTTPS 运行,但需要它自己的客户端。要用这些,你需要另一个应用。
v2rc 不内置服务器:配置由你自己提供。Smart Connect 会选出最快的配置,并在切换前确认隧道确实能通流量。
来源
- REALITY documentation 和 Xray configuration examples
- Trojan protocol description
- Shadowsocks AEAD specification
- Xue, Kallitsis, Houmansadr, Ensafi:Fingerprinting Obfuscated Proxy Traffic with Encapsulated TLS Handshakes,USENIX Security 2024
- Wu et al.:How the Great Firewall of China Detects and Blocks Fully Encrypted Traffic,USENIX Security 2023