OpenVPN 在 UDP 上速度很慢

OpenVPN 在 UDP 上速度很慢

我正在尝试使用 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 吞吐量的建议/解决方案,并且想知道这是我遇到的“硬”限制还是我遗漏了任何东西(显而易见)。

相关内容