VPN 基础

VPN场景下MTU设置相关故障的定位排查实用思路

VPN场景下MTU设置相关故障的定位排查实用思路

很多使用VPN接入内部办公资源或者跨网访问的用户都遇到过这类诡异的半连通故障:小体积的网页可以正常加载,但是上传大附件、打开高清视频会议、同步大体积文件时就会莫名卡住断开,排查了防火墙规则、账号权限之后还是找不到原因,这类故障里有相当高的比例和VPN场景下的MTU配置不匹配直接相关,梳理清晰可落地的VPN与MTU设置:故障定位思路,能大幅减少这类无明确报错的网络问题的排查耗时。

先明确故障现象的边界范围

故障排查的第一步不要上来就直接修改MTU参数,首先要做的是复现并圈定问题的触发条件,先测试不启用VPN的状态下,所有相同的网络访问操作是否完全正常,确认本地网络、公网链路、目标服务本身都不存在连通性问题,排除其他变量的干扰。

网络设备:VPN与MTU设置:故障定位思

运维人员正逐步排查VPN场景下由MTU配置不匹配引发的半连通网络故障

之后再开启VPN逐步测试,雷霆确认故障是不是只在VPN隧道建立之后才会触发,同时记录故障的触发场景:是所有大流量操作都会断,还是只有访问特定网段的资源才会出问题,这类边界信息可以直接帮你把故障范围缩小到VPN隧道相关的配置范畴里,避免后续排查走偏。

逐层校验全链路的MTU基准值

常规以太网场景下默认的MTU也就是最大传输单元数值是1500,这个数值是没有任何额外封装的纯IP数据包的最大承载长度,但是VPN传输过程中会在原始IP包外面再叠加一层VPN协议的封装头,不同类型的VPN协议封装占用的字节长度各有区别,如果直接沿用默认1500的MTU给VPN隧道接口使用,封装之后的整体包长就会超过链路的最大承载能力。

你可以用操作系统自带的ping命令完成路径最大传输单元的测试,给ping命令开启不分片的参数,逐步调整发送的数据包长度,测试从本地设备到VPN网关的整条公网路径上,能正常传输不被丢包的最大包长,再叠加IP头和传输层头的固定长度,就能得到这条链路真实可用的MTU基准值。

这个测试的预期结果通常是,当数据包长度超过某个阈值之后,ping请求就再也收不到任何回应,把包长调低一个小范围的数值之后就能恢复正常返回,这就说明当前公网路径本身的可用MTU就低于标准1500,叠加VPN的封装开销之后,雷霆加速器连接设置就会出现大包被中间路由器静默丢弃的问题。

核对VPN两端的配套配置项

完成路径MTU的测试之后,首先登录VPN网关设备,检查对应VPN隧道接口的MTU配置,很多默认配置下网关不会给VPN隧道单独设置MTU,直接继承物理出口网卡的1500数值,没有预留VPN封装需要的额外开销空间,这种情况下哪怕客户端侧调整了参数,网关向外发送的大包还是会被链路丢弃。

之后再检查VPN客户端侧生成的虚拟网卡的MTU参数,部分操作系统自带的VPN客户端支持自动同步网关下发的MTU适配参数,但很多第三方开源或者商用VPN客户端默认没有开启自动适配逻辑,需要手动把虚拟网卡的MTU调整到和网关侧匹配的数值。

最后还要同步检查VPN两端的MSS钳制配置,很多管理员调整完MTU之后就以为配置完成,忽略了TCP协议在三次握手阶段会协商MSS也就是最大分段大小,如果这个数值没有跟着MTU同步调低,TCP生成的数据包还是会按照原始1500MTU的标准来切割,最终生成的数据包依然会超出VPN隧道的承载上限。

排查常见的配置误区

很多用户遇到VPN半连通故障的时候,第一反应是自己的VPN流量被运营商拦截,反复更换VPN协议、调整监听端口折腾数小时,最后才发现只是MTU不匹配的问题,这类故障的典型特征就是小体积的数据包传输完全正常,只有超过特定大小的数据包才会被无提示丢弃,不会出现明确的连接拒绝、认证失败类的报错。

还有不少运维人员为了省事,直接把所有VPN隧道的MTU值设置成远低于标准值的固定数字,虽然这种方式可以大概率规避MTU不匹配的连通性问题,但也会导致大量原本可以正常传输的小包被不必要的拆分,浪费链路的传输带宽,实际调整的时候应该按照之前路径测试得到的真实最大包长来设置,不需要过度调低MTU数值。

整套VPN与MTU设置:故障定位思路的核心是顺着数据包的转发逻辑逐层缩小排查范围,先排除非VPN场景下的连通性干扰,再从公网传输路径到VPN两端的隧道配置逐一校验,不需要依赖昂贵的专业测试设备,就能快速定位这类无明确报错的半连通故障,避免不必要的无效排错操作。

连接排障编辑组
连接排障编辑组
内容编辑

按设备、网络、客户端和服务端逐层检查,让故障定位更有条理。

查看更多文章
配置入门

找到适合当前设备的指南

遇到测速目标负载过高相关问题,可从“在相近条件下使用受信的多个目标比较”开始阅读。不能只挑最高值忽略其他失败结果,需要结合具体环境判断。