很多企业远程办公、跨区域站点互联场景下,用户使用VPN访问内网资源时经常遇到操作延迟高、文件传输中途中断、视频会议画面卡顿的问题,不少人第一反应是公网带宽不足,但实际排查后发现大量故障都和VPN隧道内的数据包丢失有关。普通的公网链路ping测试只能检测本地到公网节点的链路质量,无法区分丢包是发生在公网链路还是VPN加密隧道内部,只有采用针对性的VPN数据包丢失测量方法,才能精准定位故障环节,避免把排查精力浪费在无关的链路节点上。
基础场景下的分段ping测量法
这个方法的配置前提非常简单,不需要额外安装专业网络工具,Windows、macOS、Linux系统自带的命令行终端就能完成操作,适合没有专业网络运维经验的普通远程办公用户自行排查。
操作的第一步是不要连接VPN,先在本地终端ping日常需要访问的内网业务服务器的公网代理地址,或者直接ping本地局域网的网关地址,记录下没有走VPN隧道时的基础丢包情况,先排除本地WiFi信号干扰、家用路由器端口队列溢出这类本地局域网本身的丢包问题。
确认本地链路没有异常之后再连接VPN客户端,首先ping VPN服务端分配给客户端的虚拟网段网关地址,这类地址一般是10.x.x.x或者192.168.x.x的私网格式,对应VPN服务端的隧道虚拟网卡接口,这个步骤检测的是VPN客户端到VPN服务端隧道接口之间的加密链路质量。
接下来再用同样的包长和发送频率,ping最终要访问的内网业务服务器真实地址,把两次测试得到的丢包率做差值,就能大致算出VPN服务端到内网业务服务器这段内网链路的丢包情况。很多新手的常见误区是连上VPN之后直接ping业务服务器,发现丢包就直接判定是VPN隧道的问题,实际上有可能是内网业务服务器本身的网卡过载丢包,和VPN机制完全无关。
基于MTR的连续路径丢包测量法
普通分段ping的缺陷是单次发送的探测包数量有限,也没法展示路径中间每个节点的丢包状态,MTR工具把ping和路径追踪的功能结合起来,能持续对路径上的所有节点发送探测包,更适合定位VPN隧道里的丢包具体发生在哪一个转发节点。
操作的时候要注意路由优先级的问题,连接VPN之后再启动MTR工具,探测的目标地址不要选任意公网网站的地址,要直接填写你需要访问的内网业务服务器地址,这样MTR生成的探测路径才会完整走VPN隧道转发,不会走本地公网的默认路由,得到的结果才是VPN隧道内的真实路径数据。
读取MTR返回结果的时候要避开一个常见误区:路径中间某一个节点显示很高的丢包率,不一定代表这个节点就是故障点,很多运营商的中间路由会限制ICMP探测包的转发优先级,故意丢弃探测包但是正常转发用户的业务流量。你需要重点看路径最后一跳的丢包率,最后一跳的丢包率才是真实的端到端VPN数据包丢失情况,中间节点的异常丢包只作为参考,需要结合后续的业务测试交叉验证。
VPN服务端自带的隧道日志校验法
如果你是企业网络管理员,有权限登录企业部署的SSL VPN或者IPsec VPN服务端的管理后台,就可以直接查看VPN隧道的实时流量统计日志,不需要在客户端做额外的探测操作,得到的统计数据也更贴近隧道本身的运行状态。
大部分主流商用VPN设备的后台,都会对每一条在线隧道单独统计发送数据包总数、接收数据包总数、主动丢弃数据包计数,这里的丢弃计数一般特指VPN服务端解密失败、隧道分片重组超时的数据包,这类丢包是纯VPN隧道机制引发的,和公网链路的随机丢包性质完全不同。
你可以安排客户端在持续做日常业务访问的过程中,间隔一段时间刷新一次VPN服务端的隧道统计数据,计算单位时间内的丢包数量占总转发包数的比例,如果这个比例远高于客户端用MTR测试出来的结果,大概率是VPN服务端的加密配置和客户端不匹配,引发了大量解密丢包,调整两端的加密套件参数就可以解决这类问题。
测量后的结果验证与误判规避
不管用哪种VPN数据包丢失的测量方法,最后都要通过实际的业务流量做交叉验证,不能完全依赖ICMP探测包的返回结果。比如你平时用VPN的核心场景是传输大文件、接入内网视频会议系统,就可以在测量的同时开启对应业务流量,对比探测出来的丢包时段和业务卡顿的时段是否重合,排除探测包优先级低于业务包引发的结果偏差。
还要注意测量的时候不要在本地同时开启其他大量占用带宽的下载、直播类应用,这类应用会把本地出口带宽占满,引发路由器缓冲区溢出丢包,这类丢包不属于VPN隧道本身的问题,很容易干扰测量结果,导致后续的故障定位方向完全出错。单次测量得到的异常结果只能作为故障排查的参考方向,不能直接作为最终判定依据,需要更换不同的网络环境、不同的接入设备重复测试之后,才能定位真实的故障根源。
小牛加速器 
