VPN 协议对比:WireGuard、OpenVPN、IKEv2 与 VLESS
多数协议对比按吞吐量排名,然后就到此为止。对不受过滤的网络来说这是正确答案,对受过滤的网络来说则是错误答案——在那里,最快的协议是那个没有被丢弃的协议。
简要结论
| 协议 | 速度 | 耗电 / CPU | 能否挺过过滤 | 适用场景 |
|---|---|---|---|---|
| WireGuard | 极佳 | 极佳 | 差——指纹极易提取 | 网络不做过滤,而你想要现有的最佳性能。 |
| OpenVPN (UDP) | 良好 | 中等 | 差 | 广泛的兼容性比速度更重要。 |
| OpenVPN (TCP/443) | 中等 | 中等 | 较弱——尽管用了那个端口仍可辨识 | 有限制但不做检测的网络,比如只放行 80 和 443 的酒店。 |
| IKEv2 / IPsec | 很好 | 很好 | 差——固定端口加特征鲜明的交换 | 在网络之间漫游的移动设备;重连是它最强的一点。 |
| Shadowsocks | 很好 | 良好 | 中等 | 按协议特征过滤,但不做主动探测。 |
| TLS 之上的 VLESS | 很好 | 良好 | 若 TLS 逼真则良好 | 会检测握手、并期待 HTTPS 看起来像 HTTPS 的网络。 |
| VLESS + REALITY | 很好 | 良好 | 对主动探测防御力强 | 除检测流量外还会主动探测端点的网络。 |
WireGuard
WireGuard 是一个小巧、现代、刻意固执己见的协议。它固定而非协商自己的密码学方案,这消除了一整类降级问题,也让实现小到足以被认真审计。在多数平台上它运行于内核空间,而且确实很快——在一个不去干预它的网络上,它通常是最快的选项。
- 优点:出色的吞吐量、极低的 CPU 与电量开销、网络切换后几乎瞬时的重连,以及小到足以被认真审阅的代码库。
- 在受过滤网络中的缺点:第一个握手消息大小固定,且在已知偏移处带有固定的类型字节。识别它只需一次比较。此外它只走 UDP,而有些网络默认限制 UDP。
- 隐私方面的一点:朴素的 WireGuard peer 配置会把客户端公钥静态地保存在服务器上,有些部署仅因为这一点就会把它再包一层。
这些都不是对 WireGuard 设计的批评。其作者明确表示,躲避审查者从来不是目标。既需要它的性能又需要抗过滤能力的部署,会把它包进另一种传输里,并以额外开销为此付费。
OpenVPN
OpenVPN 是历史悠久的多面手:成熟、可移植、到处都有支持,可配置到近乎繁琐。它运行于用户空间,相对 WireGuard 会损失性能,但也让它在无法使用内核模块的平台上依然可用。
它在 443 端口上的 TCP 模式常被推荐为穿过限制性网络的办法。在只按端口过滤的网络上它确实有用,在会做检测的网络上则完全无用。它的控制通道有可辨识的操作码结构,而在 TCP 之上再跑 TCP 会产生众所周知的「熔断」效应——在有丢包的链路上,两个重传计时器会互相打架。
- 优点:几乎到处都能用,被研究得非常透彻,灵活到足以满足不寻常的需求。
- 缺点:在相同硬件上比 WireGuard 慢,配置更繁重,而且无论选哪个端口都能被检测识别出来。
IKEv2 / IPsec
IKEv2 内建于 iOS、Android、Windows 和 macOS,也就是说不需要第三方客户端。它对网络切换的处理在这里所有协议中最好:从 Wi-Fi 走到移动数据,隧道会通过 MOBIKE 存活下来,用户察觉不到中断。
面对过滤,它是这一组里最弱的。它生活在 UDP 500 和 4500 上,而 IKE 交换一望即知。任何打算封锁 VPN 的网络都会先封它,没有任何配置能改变这一点。
Shadowsocks
Shadowsocks 从一开始就是针对另一种威胁模型设计的:一个加密代理,其流量不携带任何可辨识的握手,尽可能地像随机字节。很长一段时间里这就够了。
它的历史很好地说明了这场角力是如何推进的。早期版本可以通过主动探测被确认——服务器面对刻意构造的畸形输入会给出特征性的回应——而 AEAD 密码以及后来的 AEAD-2022 修订,正是对此的回应。当前的设计比最初的版本稳健得多。
它残留的局限是结构性的:看起来随机的流量并不是看起来像 HTTPS 的流量。在一个会丢弃任何无法确认之物的网络上,「无法被分类」本身就是问题,而不是解法。
VLESS
VLESS 是一个与传输层无关的隧道协议,其决定性的选择在于它省略了什么。它不做自己的加密,也几乎不添加任何封装:安全性完全来自承载它的那一层,通常是 TLS。它的前身 VMess 自带加密和一套基于时间戳的认证机制,这既增加了开销,就时间戳而言也留下了一处可供识别的特征。
正因为该协议自身贡献的结构如此之少,除了包裹它的 TLS 之外,分类器几乎无处着手。这把全部负担都压在了「TLS 要足够逼真」上——这正是其用意所在,同时也是 VLESS 单靠自己并不构成完整答案的原因。
- 优点:开销极小,线路上没有任何协议特有的东西,对下层传输的选择很灵活。
- 缺点:它自身不提供任何机密性——必须承载于 TLS 或同等机制之上,而遗漏这一点的配置是严重错误,不是性能取舍。
如何在它们之间取舍
先用能跑通的最快选项
在不加干预的网络上,WireGuard 或 IKEv2 会胜过任何被包进 TLS 的方案,而且没有理由为你并不需要的保护付费。
如果失败,先弄清是怎么失败的
从来建立不了的连接、建立后随即死掉的连接、以及能用但慢如龟爬的连接,是三个不同的问题,对应三种不同的解法。排障指南会讲怎么区分它们。
让伪装与网络相匹配
面对特征匹配,任何没有固定握手的方案都有帮助。面对期待 HTTPS 看起来像 HTTPS 的网络,只有逼真的 TLS 模仿才有帮助。面对主动探测,只有像普通 Web 服务器那样回应陌生人的服务器才有帮助。
定期重新评估,而不是一成不变
过滤策略会变,绕过它所需的手段也会变。半年前必需的配置,现在可能只是在白白消耗吞吐量。
常见问题
哪种 VPN 协议最快?
在不加干预的网络上,通常 WireGuard 最快,IKEv2 紧随其后。在受过滤的网络上,在你找到一个不被丢弃的协议之前,这个问题没有意义——被封锁的协议,有效速度为零。
WireGuard 比 OpenVPN 更好吗?
就吞吐量、电池续航和代码简洁性而言,显然是的。至于穿过一个正在主动封锁 VPN 的网络,两者都不行,尽管 OpenVPN 的 TCP/443 模式在只按端口过滤的网络上有帮助。
VLESS 和 VMess 有什么区别?
VMess 自带加密和基于时间戳的认证机制;VLESS 把两者都去掉,转而依赖其下的 TLS 层。这让 VLESS 更轻量,也消除了使 VMess 更容易被指纹识别的那些协议特有的特征。
我是不是应该始终使用混淆程度最高的协议?
不是。混淆会消耗吞吐量、增加复杂度,而在不做过滤的网络上它什么也换不来。更好的做法是默认使用朴素而快速的选项,在需要时再切换。