如何提高高延迟链路上的 OpenVPN 可靠性?

如何提高高延迟链路上的 OpenVPN 可靠性?

我们通过 BGAN 卫星链路运行 OpenVPN VPN,ping 时间约为 3 秒。我们在配置,我们在 Linux(CentOS)上运行。主要通过链接发送的是电子邮件,但只要邮件包含大型附件,VPN 似乎就会停滞。

“我可以 ping 通隧道,但任何实际工作都会导致它锁定。这是 MTU 问题吗?”OpenVPN FAQ 中的问题似乎准确地描述了我的问题,但使用mssfix似乎fragment仍然没有对改善情况起到太大作用。

我的主要测试是通过 VPN 复制一个 2MB 的文件SCP它将复制大约 192kbytes,然后报告- 停滞 -状态。如果我等待几秒钟,它将再次开始复制,然后在复制几千字节后再次停止。

无论我是否在 OpenVPN 配置中设置了fragment或选项,都会发生这种停顿(尽管设置似乎确实减少了停顿,但并没有消除它)。OpenVPN报告的 MTU 大小为 1542。mssfixfragment 1000mtu-test

我已在互联网上搜索有关如何以及何时使用mssfix和的更多建议fragment,但我只找到与常见问题解答相同的页面,而没有提供有关如何以及何时使用哪些参数的详细信息。

我的问题是:

  • 什么时候使用mssfixand fragment
  • 我是否应该结合使用mssfix和?fragment
  • 如果mssfixfragment是解,那么tun-mtulink-mtumtu-disc参数是什么?

此外,我一直在使用该工具防火墙测量带宽。如果没有 VPN,测量结果始终保持在 210Kbits/sec 左右。

使用时防火墙通过 VPN($ iperf -c remoteserver -t60 -i5),它会以 10Kbits/sec 开始,然后稳步上升,直到报告 1.2Mbits/sec,然后它似乎会停滞,并在多次迭代中报告 0kbits/sec(我认为 1.2Mbits/sec 可能是由于一些 OpenVPN 缓冲等原因)

防火墙测量带宽的最佳方法是什么?

任何对此情况的帮助都将不胜感激。

答案1

1542 是 MTU?从未听说过 WAN 链路有这个。通常,MTU 是最大有效负载,即 IP 数据包大小减去 IP(20 字节)和 ICMP(8 字节)的标头。这意味着传统以太网 LAN 的 MTU=1500。此外,大多数 VPN 都会为其数据包封装引入开销。典型的 VPN MTU 为 1400。

在现代网络中,很难确定 MTU 在任何时候应该是多少,因为入口和出口路径可能不同,并且它们也可能由于自动路径重新路由而发生变化。对于这样的网络,将 VPN 链路两侧的主机上的 MTU 设置为较低值(例如 576)可能更有效。

MSS(最大段大小)等于 MTU 减去 IP+TCP 报头(40 字节)。这通常由网络堆栈协商,并且通常不会出现与 MTU 相同的协商问题,除非 MTU 错误。(MTU 协商通常会因 ICMP 阻塞或黑洞路由器而受到影响)。

我要做的第一件事是在您的发送端进行网络数据包捕获,并按帧大小对显示进行排序(您可能需要在 Wireshark 中添加此列)。您应该验证您没有发送任何超大的帧,它们的大小与您预期的一样。如果启用了诸如 Large Send Offload 或 Jumbo Frames 之类的选项,现代网卡发送超大帧并不罕见。当启用这些选项时,我见过 30,000 字节以上的帧。

答案2

出于好奇,您是否尝试过降低网络接口的 MTU?也许卫星链路严重破坏了碎片。作为反直觉的提示,您可能想尝试通过 TCP 进行 openvpn 更改。我知道这应该会降低性能,但如果您无法控制碎片,它可能会帮助您。

答案3

当您使用 TCP 时,增加 TCP 的窗口大小;这将有助于“空中数据包的数量”。

我已经有一段时间没玩过这些东西了,但这里有一个关联谷歌帮我找到了。

在我重新阅读你的问题后,我发现你正在运行 BGAN - 我会好好看看(或者直接谷歌搜索:“BGAN 欺骗”)。

至于带宽测量,我发现只要您使用合理的数据包大小,iperf 就相当不错。

答案4

我认为你可能问错了方向。每当我遇到错误的 MTU 问题时,流量在 192KB 之前就停止了。我认为这与“飞行中数据包”窗口(TCP 窗口或卫星上行链路本身的一些缓冲区)更相关。

一定要进行一些长数据包捕获(VPN 内部和外部),看看是否能获取ACK所有

相关内容