![OpenVPN 在 UDP 上速度很慢](https://linux22.com/image/720196/OpenVPN%20%E5%9C%A8%20UDP%20%E4%B8%8A%E9%80%9F%E5%BA%A6%E5%BE%88%E6%85%A2.png)
我正在尝试使用 OpenVPN 创建站点到站点的连接。设置总体上是可行的:我可以从每个网络中的每个节点访问所有服务器。网络内的带宽很高(>1Gbps),到互联网的链接带宽是可以接受的(通常在站点 1 上 >100 Mbit/s,在站点 2 上 >300Mbit/s,两者对称,根据 speedtest.net 测量)。
然而,当通过隧道写入数据时,数据速率急剧下降到大约 30 Mbit/s,导致站点之间的任何数据传输都非常繁琐。
这是我在测试中使用的基本调用:
openvpn --remote X.X.X.X \
--dev tun1 \
--ifconfig 10.218.4.2 10.218.4.1 \
--secret /root/secret.key \
--verb 3 \
--sndbuf 393216 \
--rcvbuf 393216 \
--route 10.216.0.0 255.255.0.0 10.218.4.1 \
--route 10.35.32.0 255.255.255.0 10.218.4.1 \
--route XXX.YYY.Z.88 255.255.255.255 10.218.4.1 \
--route XXX.YYY.A.88 255.255.255.255 10.218.4.1 \
--route XXX.YYY.Z.10 255.255.255.255 10.218.4.1 \
--compress lz4
我摆弄了不同的设置--sndbuf
,--rcvbuf
但带宽的变化可以忽略不计。
按照我找到的千兆链路的建议这里,结果--tun-mtu 60000 --fragment 0 --mssfix 0
导致隧道从一个端点到另一个端点的速度非常快(达到 700 Mbit/s 以上)。但是,通过隧道的各个网络内的服务器之间的带宽根本没有改善。这在某种程度上是可以预料到的,因为两个网络中的 MTU 仍为 1500,到达网关的数据包仍然“很小”。
从我读到的(和观察到的)来看,罪魁祸首主要是 OpenSSL 在处理较大数据块时表现明显更好。由于来自任一网络的数据块都受到整体 MTU 的限制,因此 OpenSSL 的性能导致了我观察到的瓶颈。据我了解,这与端点之间的速度改进一致,因为那里使用了 60000 的“网络”MTU。
诉诸(次优的)VPN-over-TCP 确实会稍微增加带宽。然而,考虑到(潜在的)链路稳定性缺陷和 TCP-over-TCP 的问题,这似乎太严重了,不值得考虑。
我无法找到任何关于如何规避此限制或如何提高 UDP 吞吐量的建议/解决方案,并且想知道这是我遇到的“硬”限制还是我遗漏了任何东西(显而易见)。