很多企业在部署跨站点IPsec VPN或者远程办公SSL VPN之后,经常遇到跨网业务系统加载卡顿、大文件传输中途中断的问题,登录VPN设备后台查看日志没有明显隧道断开记录,在终端抓包却能看到大量TCP重传报文。不少运维人员一开始就盲目修改VPN加密配置、重启隧道服务,反而无法定位根因,本文就把VPN与TCP重传故障定位思路拆解为可落地的实操步骤,结合真实企业网络场景说明验证方法。
第一步:区分重传发生的网络边界
很多运维人员上来就直接在VPN隧道两端同时抓包,没有先划定重传的触发范围,很容易混淆故障归属。正确的第一步是分别在VPN隧道的内网侧、公网侧两个独立位置做端口镜像抓包,比如在总部核心交换机接业务服务器的镜像口、总部VPN网关的公网出口镜像口同时开启抓包,之后从分支侧内网主机发起预设的业务访问测试。
如果内网侧抓到的原始TCP报文发出后,在对应的交互时间窗口内没有收到对端返回的ACK报文,但是公网侧能看到这个报文已经被封装成VPN加密报文正常发出去,说明重传的触发点不在源端内网,astrill vpn而是在VPN隧道的公网传输路径上。如果内网侧根本没看到完整的原始TCP报文发出来就已经触发重传,那问题其实出在源端服务器的TCP栈配置,和VPN本身没有直接关联。

运维人员分别在内网侧与VPN公网侧部署抓包点,区分TCP重传发生的网络边界
第二步:校验VPN设备的分片与MTU配置逻辑
这是VPN场景下TCP重传最常见的诱因,几乎所有的VPN封装都会给原始报文额外增加ESP头、外层IP头或者SSL协议头,导致整体报文长度超过两端公网链路的MTU阈值,如果VPN设备的DF位处理配置不当,大尺寸报文就会被中间公网路由器静默丢弃,触发源端TCP超时重传。
排查的时候不需要先改动现有配置,先在两端内网主机上执行不分片的长包ping测试,逐步调整报文长度,验证是否存在大报文不通的情况,网络加速器同时对照VPN设备的配置项,确认是否开启了TCP MSS钳制功能,部分老旧VPN设备默认没有开启这个功能,就会频繁触发大报文丢包引发重传。
这里的常见误区是很多运维直接把两端内网接口的MTU改小,没有同步调整VPN隧道接口的MTU,反而会出现封装后的报文还是超限,重传问题没有得到缓解,甚至新增更多分片重组失败的问题,反而扩大故障影响范围。
第三步:排查VPN隧道的流量调度与QoS策略影响
很多企业会在VPN网关上配置多线路负载、业务QoS限速,或者针对特定TCP端口的限流策略,这类策略如果配置不合理,很容易导致TCP的交互ACK小报文被优先丢弃,进而触发源端的重传机制,这类问题的隐蔽性很强,因为大尺寸业务报文反而会被QoS队列优先保障。
排查的时候可以临时把测试业务的源目IP地址加入VPN设备的QoS白名单,绕开所有限流、流量整形规则,然后再次发起相同的业务传输测试,观察抓包结果里的重传占比是否下降,如果重传现象消失,说明根因是QoS队列拥塞导致的报文丢弃,只需要调整对应业务的带宽保障权重即可。
第四步:验证对端VPN解密后的报文转发路径
很多运维排查的时候只会查看VPN本端的配置,忽略了对端VPN网关解密之后,报文往内网转发的路径上的丢包问题,比如分支VPN网关解密后的报文,经过分支内网的防火墙时,被会话超时策略提前老化,导致后续的TCP报文没有对应会话匹配被丢弃,触发源端持续重传。
验证方式是在对端VPN网关的内网侧同时开启抓包,对比本端公网侧发出的加密报文序列,确认所有加密报文都被正常解密后转发到内网,如果本端发了的加密报文,对端VPN内网侧没有对应的解密后明文报文,说明问题出在VPN设备本身的解密性能不足,或者VPN隧道的防重放窗口配置过小,导致合法报文被判定为重复报文丢弃。
整个VPN与TCP重传故障定位思路,核心是不要一开始就归因为VPN设备本身故障,而是通过分层抓包把整个传输路径拆成多个独立的节点逐一验证,排除非VPN相关的TCP栈问题、内网转发问题之后,再针对性调整VPN的对应配置,避免无意义的配置改动扩大故障影响范围。单次测试得出的结论只能指向可能原因,不能直接排除所有其他潜在故障点,需要多场景交叉验证才能最终锁定根因。

