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

上次更新时间:2018 年 7 月 27 日

我的 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,其窗口大小为 64,且没有任何 TCP 标志。

使用 tcpdump 的数据包捕获示例

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

在 Amazon Linux 上安装 tcpdump

sudo yum install tcpdump

在 Ubuntu 上安装 tcpdump

sudo apt-get install tcpdump

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


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?