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


11

我们正在通过BGAN卫星链路运行OpenVPN VPN,其中ping时间约为3秒。我们在tun配置中使用它,并且我们在Linux(CentOS)上运行。主要是通过链接发送的电子邮件,但是一旦邮件包含大附件,VPN就会停滞。

“我可以通过隧道ping通,但任何实际工作导致其锁定。这是一个MTU的问题?” OpenVPN常见问题解答中的问题似乎准确地描述了我的问题,但使用mssfix并且fragment似乎并没有太多改善情况。

我的主要测试是使用scp通过VPN复制2MB的文件。它将复制大约192 KB,然后报告-停止-状态。如果我等了几秒钟,它将再次开始复制,然后又过几KB后再次停顿。

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

我在互联网上搜索了有关如何以及何时使用mssfixand的更多建议fragment,但是我只找到与FAQ相同的页面,而没有提供有关如何以及何时使用哪些参数的详细信息。

我的问题是:

  • 什么时候使用mssfixfragment
  • 我用mssfixfragment组合?
  • 如果mssfixfragment是解决方案,是什么tun-mtulink-mtu以及mtu-disc参数?

此外,我一直在使用iperf工具来测量带宽。如果没有VPN,它将不断以210Kbits / sec的速度进行测量。

在VPN()上使用iperf时$ iperf -c remoteserver -t60 -i5,它将以10Kbits / sec的速度开始,然后稳定上升直到报告为1.2Mbits / sec,然后似乎停滞不前,在此过程中它以0kbits / sec的速度进行多次迭代(I认为1.2Mbits / sec可能是由于某些OpenVPN缓冲等造成的)

的iperf测量带宽的最佳方式?

在这种情况下的任何帮助将不胜感激。


目前,openvpn使用的是TCP还是UDP?
pjc50

它当前正在使用UDP
iWerner,2009年

感谢您提供所有答案,但是由于BGAN单元的通话时间用完了,我不得不暂时停下来。我希望今天晚些时候继续。我应该提一下,我们宁愿使用UDP,因为使用TCP会使通过网络发送的数据增加一倍(因此成本,因为我们的客户端已经非常敏感了)
iWerner

Answers:


5

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错误。(受阻止的ICMP或黑洞路由器通常会损害MTU协商)。

我要做的第一件事是在发送端捕获网络数据包,然后按帧大小对显示进行排序(您可能需要在Wireshark中添加此列)。您应该确认没有发送任何过大的帧(如您期望的那样)。如果启用了诸如“大型发送卸载”或“巨型帧”之类的选项,现代网卡发送超大帧是很正常的。启用这些选项后,我已经看到30,000+字节的帧。


+1捕获数据包,然后再进行更改。即使您找不到任何巨大的帧,也可能会在某些地方看到“正常”数据包碎片。
哈维尔

1
默认情况下,OpenVPN将tun设备的MTU设置为1500(与我们计算机上的以太网设备上的MTU相同)。我仍然不确定VPN数据包的碎片是好事还是坏事。该线程中的答案似乎暗示它不好,而我在网络上找到的其他参考文献暗示它很好。
iWerner

2
@iwerner:您是否尝试使用ping确定MTU大小?如果未禁用ICMP,则可以在Windows上使用以下命令:ping -f -l 1372 <目标ip>。继续减少数量,直到成功为止。在Linux上,ping -s 1372 -M做<目标ip>。仅供参考,OpenVPN常见问题建议使用mssfix 1200,但这不能解决根本原因。使用VPN解决方案进行分段始终可能会导致性能下降。如果您有大型VPN设置,则将无法在中央集中器端(仅在远程办公室端)使用分段。
格雷格·阿斯克

2

出于好奇,您是否尝试过降低网络接口的MTU?也许卫星链路严重破坏了碎片。违反直觉的是,您可能希望尝试通过TCP的openvpn进行更改。我知道它会降低性能,但是如果您对沿线的碎片无法控制,则可能会有所帮助。


我将提出相反的建议:)-这种高延迟情况就是TCP-in-TCP问题出现的情况,而UDP将避免这种情况。
pjc50

我以为他使用的是openvpn的默认UDP端口,因此建议相反。是的,通常我会同意你的看法。但是,嘿,我们都知道sysadmin是反复试验的,通常是“尝试对面看看是否
可行

谢谢。目前,我们正在使用UDP,而尝试TCP从来没有发生过。(如果我有更多代表,我会投票赞成你的)
iWerner

@iWerner:谢谢:),也尝试在iface上逐渐减小MTU,并查看它何时停止(如果停止)。
lorenzog

2

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

自从我不得不玩这些东西已经有一段时间了,但这是google为我找到的一个链接

在我重新阅读了您的问题之后,我看到您正在运行BGAN-我会对此进行很好的了解(或者仅是Google的“ BGAN欺骗”)。

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


这很有趣-它提到TCP加速器可用于Redhat,而与我们交谈的inmarsat人士则说它仅适用于Windows和OS X(这确实是Inmarsat / BGAN网站所说的)
iWerner

他们现在可能没有了。我看到文档日期为07。您可能会找到一个带有旧副本的人。通常,当您打电话时,会获得第一级支持。我会尝试一些联系方式,但不能保证。
Eddy

我从我们的卫星提供商那里跑来跑去;很难找到知道他们在说什么的人。我将继续尝试,同时尝试以下操作:sourceforge.net/projects/pepsal从项目描述中,它几乎完成了Inmarsat软件的工作:PEPsal是一个集成的多层透明TCP性能增强代理将连接分为两部分,在发送数据时利用Linux TCP增强功能,并极大地提高了具有不同特征的链接的性能
Eddy 2009年

2

我认为您可能在错误的树上吠叫。每当我遇到错误的MTU问题时,流量就会在192KB之前停止。我认为它与“运行中的数据包”窗口中的某些(TCP窗口)或卫星上行链路本身中的某些缓冲区更相关。

当然做一些长数据包捕获(均为“内部”和VPN的“外部”),看看你得到所有ACK

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.