VPN 协议对比:什么实际被阻止
其他所有对比都根据速度和安全性对这些协议进行排名。这两个指标几乎已成定论——现代协议都足够快且在密码学上是可靠的——这就是为什么这些排名在各地都相同,并且无法告诉您为什么您的隧道停止工作。
两个问题,通常被合并为一个
有人能读懂这个吗? 是关于密码学的问题,除了一个过时的协议外,下面所有的协议都很好地回答了这个问题。有人能说出这是什么吗? 是关于流量分析的问题,答案则大相径庭。一个协议可能在第一点上表现卓越,而在第二点上却无能为力——WireGuard 是最明显的例子,也是目前最广泛推荐的协议。
审查者阻止您的 VPN 几乎从不破坏其加密。他们是在匹配一种模式:特定大小的数据包、特定位置的常量、端口、看起来不像浏览器的握手。因此,重要的列是每个协议暴露出的特征。
| 协议 | 暴露特征 | 阻止成本 |
|---|---|---|
| WireGuard | 单个 UDP 数据包。握手启动始终是 148 字节,并以消息类型 1 开头;响应始终是 92 字节。审查者需要一个规则,并且它永远不需要更新。 | 一个静态规则 |
| AmneziaWG | 如果配置正确,没有固定的东西。垃圾数据包先于握手,填充改变了大小,四个消息类型常量被替换——所以捕捉 WireGuard 的一个规则什么也捕捉不到。 | 流量分析 |
| OpenVPN | 除非启用了 tls-crypt——它会加密控制通道并消除泄露——否则其第一个数据包中的第一个字节的操作码就是泄露。在 TCP 端口 443 上运行本身并不会使其类似于 HTTPS;没有浏览器形状的 TLS 问候供检查员发现。 | 一个规则加上维护 |
| IKEv2/IPsec | 它的端口。IKEv2 使用 UDP 500 和 4500,这两个端口都是固定的且广为人知。关闭两个端口并不是真正的过滤;这只是维护。 | 一个静态规则 |
| Shadowsocks | 从历史上看,是因为根本没有握手:一个从第一个字节开始就是高熵的连接本身就是一种类别,审查者可以阻止它。当前的 AEAD 和 2022 年版本实现可以抵抗这种攻击;旧的流密码配置则不行。 | 流量分析 |
| VLESS + Reality (Xray) | 握手时没有任何信号。没有密钥的探测者被传递到被伪装的目标真实网站,并接收其真实证书,因此探测确认了掩护故事而不是破坏它。 | 需要附带损害 |
“阻止成本”是指审查者的努力,而不是您的努力。一个静态规则意味着一行永远不需要重新审视的配置。附带损害意味着唯一可靠的阻止也会破坏网络想要保留的东西。
WireGuard
现代的默认设置:快速、小巧,并且基于一组固定的加密技术,无需协商。
暴露特征
单个 UDP 数据包。握手启动始终是 148 字节,并以消息类型 1 开头;响应始终是 92 字节。审查者需要一个规则,并且它永远不需要更新。
在主动探测下
不需要。从它发送的第一个数据包就可以识别,因此没有人需要敲门服务器。
在以下情况下使用
网络没有过滤。在普通连接上,这是要使用的——没有其他东西能以这么少的复杂性为您提供这样的速度。
其设计理念是消除选择:不进行密码协商,因此没有降级攻击,也没有配置错误的可能性。同样的决定产生了固定的包形状,使其易于指纹识别,而且没有设置可以改变这一点,因为拥有设置正是它要避免的。阻止 WireGuard 的国家并没有击败其加密技术;他们是在匹配一个常量。出色的安全性和没有伪装是一个连贯的立场,而不是一个矛盾。
条款: wireguard · deep-packet-inspection · handshake
AmneziaWG
去除了指纹的 WireGuard:相同的加密技术,可配置的包形状。
暴露特征
如果配置正确,没有固定的东西。垃圾数据包先于握手,填充改变了大小,四个消息类型常量被替换——所以捕捉 WireGuard 的一个规则什么也捕捉不到。
在主动探测下
经得起考验。没有独特的回复供探测者识别,尽管仅回答这个而别无其他的服务器仍然是一个做了一件不寻常事情的服务器。
在以下情况下使用
WireGuard 被阻止,并且您控制两端。这是最低成本的升级,从一个正常工作的 WireGuard 设置开始。
重要的警告不是加密方面的。两个对等方必须就每个参数达成一致,而一个仅仅是错误而不是无效的配置连接并传递流量,同时仍然带有填充物旨在隐藏的模式。两个具体的陷阱:标头值 H1 至 H4 必须全部不同,并且 S1 + 56 不能等于 S2——握手启动是 148 字节,而响应是 92 字节,正好长 56 字节,因此这种组合将它们填充为彼此相同的大小。这两种错误都不会产生错误消息。
条款: amneziawg · junk-packets · header-magic
OpenVPN
长期存在的那个:速度较慢且可配置性更强,能够在 HTTPS 使用的端口上通过 TCP 运行。
暴露特征
除非启用了 tls-crypt——它会加密控制通道并消除泄露——否则其第一个数据包中的第一个字节的操作码就是泄露。在 TCP 端口 443 上运行本身并不会使其类似于 HTTPS;没有浏览器形状的 TLS 问候供检查员发现。
在主动探测下
取决于配置。使用 tls-auth 或 tls-crypt 时,服务器不会响应缺少密钥的探测请求;没有它们时,服务器会响应并暴露自己。
在以下情况下使用
你需要运行在永远不会支持 WireGuard 的设备或操作系统上,或者你需要使用 TCP,因为 UDP 被完全阻止了。
它之所以被认为容易被封锁,主要是因为默认配置部署。tls-crypt 大大改变了这种情况,并且只需一行配置,但大多数消费级设置并未使用它。这种灵活性有利有弊:同样的可配置性既允许强硬的部署,也允许更弱的部署,而从外部看两者是相同的。
条款: openvpn · sni-filtering · active-probing
IKEv2/IPsec
内置于手机和笔记本电脑中,也是隧道在从 Wi-Fi 切换到移动数据时依然存活的原因。
暴露特征
它的端口。IKEv2 使用 UDP 500 和 4500,这两个端口都是固定的且广为人知。关闭两个端口并不是真正的过滤;这只是维护。
在主动探测下
不是必需的,原因与 WireGuard 相同。
在以下情况下使用
没有任何阻碍,你想要一个无需安装客户端的隧道,并且设备需要在不同网络间移动。
在它设计的问题上确实表现良好。MOBIKE 可以在网络变更时保持会话活跃,这就是为什么它在企业部署中成为默认的安静选择。对于审查,它完全没有应对方案:没有混淆,没有值得一提的端口灵活性,而且握手与 WireGuard 一样容易被识别,还没有速度优势。
条款: ikev2 · ip-blocking
Shadowsocks
一种在中国为这个问题编写的加密代理——不是 VPN,区别很重要。
暴露特征
从历史上看,是因为根本没有握手:一个从第一个字节开始就是高熵的连接本身就是一种类别,审查者可以阻止它。当前的 AEAD 和 2022 年版本实现可以抵抗这种攻击;旧的流密码配置则不行。
在主动探测下
现代版本是有效的。2020 年对流密码的攻击是通过在可疑服务器上重放篡改的流量并读取其反应来实现的;认证加密关闭了这个漏洞。
在以下情况下使用
你想要一个轻量级的、按应用程序的隧道,并且你准备处理它不覆盖的一切。
因为它代理的是应用程序而不是设备本身,任何未配置使用它的应用都会正常传输——通常是包括 DNS 在内的,这通常会破坏代理的意义。它也不是单一的东西:命名实现和密码比命名协议更能说明问题。将 2022 年之前关于 Shadowsocks 的任何建议视为关于不同协议的。
条款: shadowsocks · proxy-vs-vpn · dns-leak
VLESS + Reality (Xray)
不是加密而是伪装:服务器呈现一个真实第三方网站的 TLS,因此检查时会看到访问该网站。
暴露特征
握手时没有任何信号。没有密钥的探测者被传递到被伪装的目标真实网站,并接收其真实证书,因此探测确认了掩护故事而不是破坏它。
在主动探测下
针对审查设计的。这是使 Reality 在过滤最严重的网络中成为默认推荐的特点。
在以下情况下使用
所有其他方式都被封锁了,包括 AmneziaWG,而你愿意运行和维护服务器。
其余的信号是行为上的而非密码学的,它们是真实的。掩护网站必须是你有合理理由访问的;持续数小时对无人浏览的网站的流量是一种模式,就像住宅连接以读者不会产生的流量与之通信一样。Reality 将问题从协议层转移到流量层,这是一个很大的改进,而不是解决方案。
条款: reality · vless · tls-fingerprinting · active-probing
选择协议
没有排名,因为正确答案取决于对您的连接所做的操作。在未过滤的网络上,使用 WireGuard 并停止思考。当 WireGuard 停止连接时,AmneziaWG 是最小的改变,因为它只是改变了形状的同一个隧道。当这也不起作用时,剩余的方法是完全不像隧道,这就是 Reality 所做的,也是为什么它运行成本更高。
向上而不是向下工作。每一步都增加了延迟、配置和被静默错误配置的方式,但没有增加安全性——密码学在梯子的底部已经很好。
我们使用的技术
Unblock Master 采用 AmneziaWG 和 Reality 技术,基于上述原因而非功能列表:我们的用户连接的国家/地区是那些普通 WireGuard 被一眼识别的国家/地区。我们在这里不是中立的一方,这就是为什么本页内容足够具体地描述检测机制,以便您可以对照其他人的文档核实这些说法。