我们在客户处安装了数十种嵌入式设备,所有这些设备都是我们的OpenVPN服务的所在地。总体而言,这可以正常工作,但是我们的一些客户在路径MTU方面存在严重问题。我们对客户修复网络的影响是有限的,因此我们需要OpenVPN对其进行处理。简而言之,我的问题是:
我如何减轻每个客户端基于某些客户端的低路径MTU,即不使用全局设置来适应所有客户端的最坏情况
请注意,我们的最坏情况非常糟糕:路径MTU 576会丢弃所有片段,不会自身进行片段化,也不会使用DF位。您会明白为什么我不想在全球范围内解决此问题。
该OpenVPN的联机帮助提供了许多MTU的相关选项,最显着的--link-mtu, --tun-mtu, --fragment and --mssfix
。但这也说
--link-mtu [...]除非您知道自己在做什么,否则最好不要设置此参数。
--tun-mtu [...]最好使用--fragment和/或--mssfix选项来处理MTU尺寸调整问题。
于是我开始尝试用--fragment
和--mssfix
,但很快就意识到,至少前者必须设置不仅客户端,但也服务器端。然后,我通过看到服务器端的每个客户端的配置--client-config-dir
,但它说
以下选项在特定于客户端的上下文中合法:--push,--push-reset,--iroute,--ifconfig-push和--config。
没有提及MTU选项!
所以这是我更具体的问题:
- 到底为什么是
link-mtu
和tun-mtu
沮丧?这些选项潜在的问题是什么?请注意,我对低级IP标头处理非常满意。 link-mtu tun-mtu fragment mssfix
为了工作,必须在服务器端镜像哪个选项?link-mtu tun-mtu fragment mssfix
可以在哪个选项中使用client-config-dir
?- 如果所有四个选项都必须在服务器端进行镜像,并且不能在内部使用
client-config-dir
:是否有其他方法可以解决每个客户端的低路径MTU?
笔记:
- 我的部分问题已经在5年前在这里提出过,但是那时还没有真正得到回答,因此我敢于重复它们。
- OpenVPN服务器当前在Ubuntu 12.04上为2.2.1。我们正在准备在Ubuntu 14.04上升级到2.3.2
- OpenVPN客户端在Debian 7.6上为2.2.1
- 我很高兴自己亲自确定客户的路径MTU
- 目前,我们无法测试太多服务器端。但是我们正在建立一个完整的独立测试台,应该尽快准备就绪。
感谢您提供任何有用的建议。
iptables
规则以减少往返于该客户端IP地址的所有SYN数据包中的MSS。