很多企业远程办公、跨站点组网场景下,用户明明已经完成VPN拨号连接,却频繁出现网页加载不全、大文件传输中断、部分内网服务无法访问的问题,排查常规的账号权限、端口连通性都找不到原因,大概率是VPN与MTU设置不匹配引发的隐性故障。本文梳理可落地的故障定位思路,帮运维人员快速跳过无效排查环节,精准锁定配置冲突点。
先明确VPN与MTU设置的配置前提边界
很多运维人员刚接触这类故障时,会直接上来就改设备MTU数值,反而把原本正常的业务链路弄出更多问题,首先要理清两者的适配逻辑前提。普通公网链路的MTU默认值是标准以太网的1500,而VPN传输会额外封装加密包头、隧道协议头,这些额外占用的字节会让原本符合MTU要求的数据包,经过VPN封装后超过链路最大传输阈值。
配置调整的前提是你已经确认VPN隧道本身的基础连通性正常,没有拨号失败、密钥协商报错、路由指向错误这类底层问题,否则先处理基础连接故障,再排查MTU适配问题,不要把两类故障混在一起处理,否则很容易出现反复调整配置也看不到效果的情况。
第一阶段:快速复现故障缩小排查范围
故障定位的第一步不要直接登核心设备改配置,先在终端侧做场景复现测试,先断开VPN的状态下访问相同的公网、内网资源,确认所有访问行为完全正常,排除本地终端网卡、本地局域网的MTU配置异常的可能性。
之后重新拨号连上VPN,分别测试小体积网页、大体积文件传输、内网小指令交互、大体积视频流传输几类场景的表现,如果所有小体积数据包的访问都完全正常,只有超过一定大小的数据包会出现丢包、超时、加载中断的情况,就可以初步指向MTU不匹配的方向,排除应用层权限、服务端限制的其他可能。
第二阶段:分段验证链路MTU实际阈值
接下来不需要直接去查VPN设备的配置参数,先在终端侧执行不分片的ping测试,指定不同大小的数据包,验证从终端到VPN远端网关之间,整条隧道链路允许通过的最大报文尺寸。这里要注意测试的时候需要关闭ping报文默认的分片允许标记,才能测出真实的隧道MTU阈值。
得到实际链路的MTU数值之后,再分别核对三个位置的配置:本地终端网卡的MTU、VPN隧道接口配置的MTU值、VPN出口公网链路的上下行设备MTU限制,很多故障点就出在运维人员只改了VPN隧道的MTU,却忘了前端的家庭宽带网关、企业边界防火墙也设置了更低的MTU阈值,导致调整之后依然出现丢包。
这里要注意一个常见误区,很多人会直接把所有设备的MTU都改成远低于1500的数值,反而会导致小包传输的效率不必要的下降,正确的做法是取整条链路里最小的那个MTU值,倒推VPN封装需要占用的包头字节数,再对应调整隧道接口的MSS值,让TCP协议在三次握手的时候就自动协商出不会超过阈值的报文分段大小。
第三阶段:验证适配效果并规避后续同类隐患
调整完配置之后,不要立刻把所有用户的流量都切到新的VPN隧道上,先在测试终端上复现之前的故障场景,确认之前加载不全的大网页、传输中断的大文件都可以正常跑通,同时小流量的交互场景也没有出现额外的延迟升高问题。
排查完成之后要整理对应VPN组网场景下的MTU适配基线,比如IPsec VPN、OpenVPN、SSL VPN不同协议的封装开销都不一样,不要直接套用其他场景的配置参数,后续新增VPN节点、扩容边界网络设备的时候,提前核对MTU配置的一致性,避免同类故障重复出现。
还要注意部分移动网络、运营商专线会在中间链路强制设置更低的MTU阈值,这类场景下没有办法通过调整两端设备配置完全规避,就需要在VPN网关上开启PMTUd探测功能,让链路自动协商适配不同路径的报文最大尺寸,不需要手动硬写固定数值,适配更复杂的公网传输场景。
蓝快加速器 
