如何排查 VPN 连接上的数据包丢失问题?

上次更新日期:2022 年 7 月 18 日

我的 VPN 连接上存在连续或间歇性的数据包丢失和高延迟问题。我可以运行哪些测试以确保问题不在我的 Amazon Virtual Private Cloud (Amazon VPC) 中发生?

解决方法

在开始性能测试之前,请启动并配置您的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例:

  1. 按照启动实例中的步骤操作,在同一 VPC 下的至少两个不同可用区中启动 Linux 实例。您可以从实例运行网络性能测试。
  2. 为了获得可能的最佳网络性能,请确保这些实例支持 Linux 上的增强联网,并且在相同 VPC 中启动实例。
  3. 如果要对并非共存于相同置放群组或不支持极大帧的两个实例执行网络测试,请按照在您的 Linux 实例上检查并设置 MTU 中的步骤操作。
  4. 完成连接到您的 Linux 实例中的步骤以验证您可以访问这些实例。

使用 mtr 检查 ICMP 或 TCP 数据包丢失和延迟

在两个实例上安装 mtr 网络工具,以检查 ICMP 或 TCP 数据包丢失和延迟。mtr 可以提供持续更新的输出,使您可以分析一段时间的网络性能。 它将 traceroute 和 ping 的功能合并到单一网络诊断工具中。

在 Amazon Linux 上安装 mtr

sudo yum install mtr

在 Ubuntu 上安装 mtr

sudo apt-get install mtr

在 EC2 实例和本地主机的私有与公有 IP 地址之间双向运行以下测试。当方向反转时,TCP/IP 网络上的节点之间的路径可能会发生变化。注意:获得两个方向的 mtr 结果非常重要。

第一个 mtr 测试基于 ICMP,但第二个测试具有 -T 选项,该选项为您提供基于 TCP 的结果。基于 TCP 的结果可帮助您确定连接上是否存在任何基于应用程序的数据包丢失或延迟。MTR 版本 0.85 及更高版本具有 TCP 选项。

私有 IP 测试:

mtr -n -c 200 <Private IP EC2 instance/on-premises host> --report
mtr -n -T -c 200 <Private IP EC2 instance/on-premises host> --report

公有 IP 测试:

mtr -n -c 200 <Public IP EC2 instance/on-premises host> --report
mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> --report

使用 Linux traceroute 实用程序确定延迟或路由问题

Linux traceroute 实用程序会识别从客户机节点到指定目标节点的路径。它还显示路径中标识的每个路由器响应请求的时间(以毫秒为单位)。此实用程序还计算并显示每个跃点到达目标之前所需的时间长度。如果未安装 traceroute,则务必在您的实例上安装它。

在 Amazon Linux 上安装 traceroute

sudo yum install traceroute

在 Ubuntu 上安装 traceroute

sudo apt-get install traceroute
在 EC2 实例和本地主机的私有与公有 IP 地址之间双向运行以下测试。当方向反转时,TCP/IP 网络上的节点之间的路径可能会发生变化。获得两个方向的跟踪路由结果非常重要。

私有 IP 测试:

sudo traceroute <private IP of EC2 instance/on-premises host>
sudo traceroute -T -p 80 <private IP of EC2 instance/on-premises host>

公有 IP 测试:

sudo traceroute <public IP of EC2 instance/on-premises host>
sudo traceroute -T -p 80 <public IP of EC2 instance/on-premises host>

注意:参数 -T -p 80 -n 在端口 80 上执行基于 TCP 的跟踪。确保您在两个方向上都打开了端口 80 或正在测试的端口。

指定基于 TCP 的跟踪而非 ICMP 的 Linux traceroute 选项很有帮助,因为大部分 Internet 设备会忽略基于 ICMP 的跟踪请求。一些超时请求很常见,因此应关注发送到目标的数据包丢失或路由的最后一个跃点中的数据包丢失情况。几个跃点处累积的数据包丢失也可能表示出现了问题。

注意:在使用 traceroute 排查网络连接问题时,在两个方向上运行命令会非常有用。

使用 hping3 确定延迟或 TCP 数据包丢失问题

hping 是一个面向命令行的 TCP/IP 数据包汇编器/分析器。除了针对 ICMP echo 请求外,它还支持 TCP、UDP 和 RAW-IP 协议。它还具有 traceroute 模式、在覆盖的通道之间发送文件的能力以及许多其他功能。

如果未安装 hping3,则在 Amazon Linux 上运行以下命令:

sudo yum --enablerepo=epel install hping3

然后运行以下命令:

hping3 -S -c 50 -V <Public IP of EC2 instance or on-premises host>
hping3 -S -c 50 -V <Private IP of EC2 instance or on-premises host>

注意:默认情况下,hping3 将 TCP 标头发送到目标主机的端口 0,其 winsize 为 64 而没有启用任何 tcp 标记。

使用 tcpdump 的数据包捕获示例

重复问题时,您可以在 EC2 实例(存在于多个可用区中)和本地主机上执行数据包捕获。这些数据包捕获示例有助于确定 VPN 连接上是否存在任何网络层问题。在您的实例上安装 tcpdump 以执行数据包捕获。

在 Amazon Linux 上安装 tcpdump

sudo yum install tcpdump

在 Ubuntu 上安装 tcpdump

sudo apt-get install tcpdump

注意:有关如何检查网络设备以进行分析和故障排除的说明,请参阅特定供应商文档。