很多企业分支站点通过IPsec、SSL VPN接入总部内网的场景中,经常会遇到小数据包访问完全正常、火烧云VPN无线网络排查大网页加载不全、大文件传输中途中断的诡异故障,运维人员逐一排查出口防火墙规则、VPN隧道协商状态、内网路由配置都找不到问题根源,最后才定位到是MTU设置不匹配引发的隐性故障。本文围绕VPN与MTU设置:故障定位思路,结合一线运维的实际操作场景,给出可落地的排查路径,避免无意义的反复试错。
先理清VPN隧道封装带来的MTU额外开销
常规以太网链路的默认MTU值为1500,这个数值统计的是三层IP报文的最大长度,不包含二层帧头的额外开销。但所有类型的VPN隧道都会在原始的内网IP报文外侧,新增一层甚至多层封装头,比如IPsec VPN的ESP协议封装、SSL VPN的TCP外层封装,都会额外占用报文的长度配额。
不少运维人员初期配置VPN网关时,会直接把VPN隧道接口的MTU值和物理出口网卡的MTU设为完全相等,完全没有预留VPN封装的开销空间,这种配置下如果内网主机发出刚好1500字节的原始报文,经过VPN封装之后总长度就会超过物理链路的MTU阈值。如果路径中间的运营商设备不支持PMTU发现机制,这类超长报文会被直接静默丢弃,上层业务完全收不到任何回包,就会表现出小请求能通、大请求直接中断的典型特征。
第一阶段基础连通性预校验步骤
正式调整任何配置之前,不要直接套用网上流传的通用经验值修改MTU,先在VPN隧道两端的内网主机上,开启不分片标识,用指定自定义长度的ping包做连通性测试,从较小的报文长度开始逐步往上递增,观察什么长度的报文开始出现丢包。

一线运维人员正在定位VPN场景下MTU设置不匹配引发的隐性网络故障
这里要避开最常见的排查误区,不要直接用操作系统默认的小长度ping包做测试,这类默认测试的报文长度远小于VPN封装后的MTU阈值,哪怕链路存在MTU不匹配问题也会显示全通,完全没有参考价值,很多运维人员就是跳过了这一步,白白浪费数小时排查其他无关配置。
测试完成之后,记录下刚好能100%连通的最大报文长度,加上标准IP头、传输层头的固定长度,再减去对应VPN类型的封装开销,就能得到当前链路适配的合理MTU参考值,这个数值是后续调整所有节点配置的核心依据,不能直接照搬其他场景的通用配置直接套用。
逐节点配置项交叉核对方法
拿到参考MTU值之后,要依次核对VPN隧道两端的全链路节点配置,首先检查VPN网关物理出接口的MTU设置,确认没有被之前的运维人员修改过非默认值,部分运营商的专线、家庭宽带接入侧会主动调整链路MTU,这个数值要和运营商提供的官方参数做对齐。
接下来专门核对VPN隧道接口的专属MTU配置,多数主流厂商的VPN隧道接口默认不会自动根据物理口MTU减去封装开销,需要运维人员手动指定隧道内的MTU值,这里要注意IPsec和SSL VPN的封装开销完全不同,对应的隧道MTU设置值也要做区分,不能直接给两类VPN设置完全相同的MTU参数。
最后还要核对两端内网终端、服务器的网卡MTU配置,火烧云不少运维人员为了优化局域网内部的大文件传输,会手动把内网网卡的MTU改成巨帧数值,这类超大报文进入VPN隧道之后,哪怕封装开销不大也很容易超过链路阈值,这类终端侧的配置问题隐蔽性极强,很容易被排查过程直接漏掉。
常见定位误区避坑提示
不少运维遇到MTU相关故障之后,第一反应是直接在VPN网关上开启TCP MSS钳制功能,完全不核对底层全链路的MTU配置,这种操作只能缓解TCP类业务的异常,UDP类的VPN承载业务比如语音视频传输、工业控制报文还是会出现随机丢包,无法从根源上解决故障。
还有部分运维为了图省事,直接把全链路所有节点的MTU都改成远小于合理阈值的数值,虽然能快速解决连通性问题,但会导致大量正常长度的报文被强制分片,VPN网关的CPU占用率会异常上升,大流量传输场景下反而会引入新的性能瓶颈。
所有配置调整完成之后,要重新用之前的大长度不分片ping测试方法做二次验证,同时跑几轮不同大小的文件传输测试,确认小网页访问、中等大小的业务请求、大文件传输都没有异常,才算完成整个VPN与MTU设置:故障定位的完整闭环。


