只有比较你实际要运维的东西,比较这两种协议才有意义。WireGuard 用公钥标识对端,并让协议走 UDP; OpenVPN 而 OpenVPN 提供更丰富的认证方式,当服务器同时提供时也能走 UDP 或 TCP。这些差异在影响吞吐量之前,早就影响了部署方式和回退路径。请按顺序完成下面四项检查;前两项通常决定选择,后两项则说明这个决定是否正确。

从身份开始,而不是从加密套件列表开始

WireGuard 对端保存一把私钥,并列出它可以到达的公钥。服务商可以在外面包一层账户门户,但协议本身没有用户名和密码交换,因此账户的生命周期存在于分发密钥的那套机制里。OpenVPN 可以使用证书、对接现有目录的插件或校验脚本,所以已有身份体系的组织常常偏爱它。两种设计都没有消除一个问题:丢失的设备该如何移除。

DecisionOpenVPNWireGuard
IdentityCertificates, plugins or scripts against an existing directoryOne private key per peer, public keys listed for the peers it may reach
TransportUDP or TCP profiles when the server offers bothUDP only in the native protocol
Routing and DNSServer pushes routes and DNS optionsAllowedIPs maps ranges to peers, and tooling installs the routes
Where it usually breaksProfile mismatch, expired certificate, failing pluginBlocked UDP, wrong AllowedIPs, key not installed

配置短不等于部署简单。把一把私钥交给多人,会让日后的移除变得含糊,因为一旦吊销,所有人会同时失去访问。选择之前先把人与密钥或证书的对应关系写下来,协议层面的决定就会轻松得多。

再看传输方式允许什么

WireGuard 的协议使用 UDP。OpenVPN 服务可以同时提供 UDP 和 TCP 配置,在封锁或劣化 UDP 的网络里,第二种选择是实际可用的回退路径,而不是理论上的。服务器必须支持你选定的配置,改一个端口号既不会把隧道变成 HTTPS,也说服不了防火墙放行。

在 TCP 里再套一层 TCP,也会改变丢包时的表现,因为两层各自重传、各自重排。在受限网络里能用的 TCP 配置,在有丢包的网络里依然可能表现很差,这正是要同时保留两套配置、而不是宣布某一种更优的理由。

然后检查路由与名称解析

WireGuard 的 AllowedIPs 把地址段映射到对端,并在协议内部充当路由决策;周边工具在安装路由时用的就是这些地址段。OpenVPN 则由服务器下发路由和 DNS 选项。两种情况下,客户端都可能已经连上,而预期的策略只落实了一半。

ip route show
ip -6 route show
resolvectl status
wg show

在相信“已连接”指示之前,先读输出。ip route show 会列出客户端为 IPv4 安装了哪些路由,IPv6 版本则能抓出只承载一个地址族的隧道。resolvectl status 显示客户端实际会询问哪个解析器,wg show 打印 WireGuard 认为自己拥有的 AllowedIPs。如果路由声称覆盖全部,而解析器仍指向本地网络,DNS 就跑到隧道外面去了。

然后测量你真正关心的任务

把设备、网络和目的地保持不变,并记录你用过的客户端和端点。如果两个服务从不同城市出口,或跑在不同的硬件上,就说明这一点,因为那时结果描述的是这些服务,而不是协议。

iperf3 -c 203.0.113.20 -t 30
mtr -rwzbc 50 203.0.113.20

两条命令各跑两遍,每一对配置跑一次,在同一网络、同一设备上。iperf3 给出吞吐量数字,mtr 给出路径以及丢包出现在哪里,这是单一下载数字给不出的。下载数字也会漏掉通话能察觉的东西:增加的延迟、抖动,以及重连要花多久。把这些单独记录下来,因为在吞吐量上胜出的协议,仍可能在你实际执行的任务上落败。

对托管连接来说,兼容性、支持和续费成本可能比一点点基准差异更重。对个人出口来说,运营商的日志与司法管辖区比协议标签更重要。两种协议都能承载好的连接;决定你得到什么的是服务及其配置。

测试之前先把配置成对写下来

测量之前,每种协议各选一套配置,并写下各自应该做什么:只走私有子网,还是带指定出口的全部流量。拿分隧道配置和全隧道配置相比的测试,测的是配置,不是协议。把客户端名称、客户端版本和出口位置写在同一份记录里。

然后在同一网络、同一会话里,把同样的任务在两边都跑一遍。如果其中一边完全连不上,这个失败本身就是结果,并应连同原因一起记入记录。把记录和服务文档放在一起,下一个人就能比较同一对配置,而不必从头再来。

相关文章