OpenVPN 还是 WireGuard?从身份与传输方式做决定
密钥、登录流程和仅走 UDP 的传输方式,远在吞吐量之前就决定了选择。做四项检查,并让测量保持诚实。
只有比较你实际要运维的东西,比较这两种协议才有意义。WireGuard 用公钥标识对端,并让协议走 UDP; OpenVPN 而 OpenVPN 提供更丰富的认证方式,当服务器同时提供时也能走 UDP 或 TCP。这些差异在影响吞吐量之前,早就影响了部署方式和回退路径。请按顺序完成下面四项检查;前两项通常决定选择,后两项则说明这个决定是否正确。
从身份开始,而不是从加密套件列表开始
WireGuard 对端保存一把私钥,并列出它可以到达的公钥。服务商可以在外面包一层账户门户,但协议本身没有用户名和密码交换,因此账户的生命周期存在于分发密钥的那套机制里。OpenVPN 可以使用证书、对接现有目录的插件或校验脚本,所以已有身份体系的组织常常偏爱它。两种设计都没有消除一个问题:丢失的设备该如何移除。
| Decision | OpenVPN | WireGuard |
|---|---|---|
| Identity | Certificates, plugins or scripts against an existing directory | One private key per peer, public keys listed for the peers it may reach |
| Transport | UDP or TCP profiles when the server offers both | UDP only in the native protocol |
| Routing and DNS | Server pushes routes and DNS options | AllowedIPs maps ranges to peers, and tooling installs the routes |
| Where it usually breaks | Profile mismatch, expired certificate, failing plugin | Blocked 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 给出路径以及丢包出现在哪里,这是单一下载数字给不出的。下载数字也会漏掉通话能察觉的东西:增加的延迟、抖动,以及重连要花多久。把这些单独记录下来,因为在吞吐量上胜出的协议,仍可能在你实际执行的任务上落败。
对托管连接来说,兼容性、支持和续费成本可能比一点点基准差异更重。对个人出口来说,运营商的日志与司法管辖区比协议标签更重要。两种协议都能承载好的连接;决定你得到什么的是服务及其配置。
测试之前先把配置成对写下来
测量之前,每种协议各选一套配置,并写下各自应该做什么:只走私有子网,还是带指定出口的全部流量。拿分隧道配置和全隧道配置相比的测试,测的是配置,不是协议。把客户端名称、客户端版本和出口位置写在同一份记录里。
然后在同一网络、同一会话里,把同样的任务在两边都跑一遍。如果其中一边完全连不上,这个失败本身就是结果,并应连同原因一起记入记录。把记录和服务文档放在一起,下一个人就能比较同一对配置,而不必从头再来。