不少企业运维人员在完成跨站点IPsec/SSL VPN对接后,经常遇到内网跨站点业务访问卡顿的问题,直接在业务服务器抓包能看到大量TCP重传报文,小火箭VPN但常规的公网链路排查手段完全找不到丢包根因,本文围绕VPN与TCP重传的故障定位思路,结合实际运维场景拆解可落地的排查步骤,避免排查过程中走不必要的弯路。

运维人员通过多节点同步抓包比对报文序列号,精准定位VPN场景下的TCP重传故障根因
先区分重传发生在VPN隧道内侧还是外侧
很多运维排查这类故障的第一反应是直接在业务源端抓包,很容易把VPN封装带来的特殊流量特征误判成普通公网链路丢包,正确的第一步是选取三个关键节点同时做端口镜像抓包,分别是业务发起端的内网网卡、本端VPN网关的公网WAN侧出口、对端VPN网关的内网LAN侧入口。
完成抓包后把三个节点捕获到的TCP报文序列号做时序比对,如果WAN侧抓包的结果已经出现对应序列号的报文缺失,说明重传触发在VPN隧道外部的公网传输链路,和VPN本身的配置逻辑无关;如果WAN侧已经收到完整的所有序列号报文,LAN侧抓包却出现对应报文缺失,说明重传异常完全发生在VPN隧道的封装、解封装处理环节。
核查VPN设备的TCP MSS配置匹配度
绝大多数IPsec VPN、SSL VPN的隧道报文都会在原有IP报文基础上增加ESP、SSL等封装头的额外开销,如果VPN网关的MSS钳制规则没有适配这部分额外开销,原本符合普通以太网MTU要求的TCP报文,小火箭封装后尺寸就会超出传输路径的最大承载限制。
这类场景下如果传输路径中间的防火墙拦截了ICMP分片不可达报文,TCP发送端就收不到路径MTU探测的回应,不会主动调整报文分段大小,最终只能反复触发超时重传,很多运维遇到这类问题时会误以为是公网链路质量不稳定,反复联系运营商排查链路却找不到问题。
实际排查时不要直接修改全局MSS配置,先在VPN网关的隧道接口下查看当前绑定的MSS钳制规则,确认规则有没有覆盖所有穿越隧道的TCP流量,不少运维只配置了IPv4流量的MSS规则,忘记给IPv6隧道配置对应规则,导致部分业务流量的分段大小超出隧道承载上限。
验证配置是否生效的方式也很简单,在两端VPN网关的内网侧分别发起不分段的长ping测试,逐步调整报文长度,观察报文在哪一个长度阈值下开始出现丢包,就能反推当前隧道实际可承载的最大TCP分段尺寸,不需要依赖第三方测速工具获取数据。
排查VPN隧道的流量调度策略冲突
现在不少多线路VPN网关会配置基于链路质量的动态选路策略,部分设备的选路探针在链路切换瞬间,会把正在传输的TCP流量直接切到新链路上,没有做原有会话的无缝续传处理的话,对端收到的TCP报文序列号会出现跳变,接收端直接判定为乱序报文做丢弃处理,发送端就会触发大量不必要的快速重传。
除此之外还要检查VPN网关的QoS队列拥塞丢弃策略,很多场景下运维为了保障语音视频等实时流量的优先级,给普通业务TCP流量分配的队列缓存空间过小,隧道带宽跑满的时候,后到的TCP报文直接被队列丢弃,上层业务抓包看到的就是大量重传,这类问题很容易被误判为公网链路随机丢包。
排除TCP协议栈与VPN加密模块的兼容问题
部分老旧版本的VPN网关加密卡驱动,小火箭VPN在处理携带TCP时间戳选项的报文时会出现异常丢包,这类问题的特征非常有迷惑性,只有开启TCP时间戳的服务器发起的流量才会出现大量重传,关闭时间戳的终端发起的同路径流量完全正常,很容易被运维忽略。
排查这类兼容问题时,可以先临时在VPN网关的加密策略里,把对应业务流的加密算法切换成通用的标准公开算法,排除小众自定义加密套件的适配问题,如果切换后重传现象消失,就可以定位是加密模块的处理逻辑存在缺陷,需要升级对应设备的固件版本解决。
整套VPN与TCP重传的故障定位思路,核心是不要跳过分段定位的步骤直接盲目调整TCP协议参数,很多时候运维盲目调大TCP超时重传时间,反而会掩盖VPN配置的底层问题,导致业务在带宽峰值时段反复出现卡顿,无法从根源解决故障。
小火箭加速器 
