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

上次更新日期:2021 年 5 月 19 日

我的 AWS 虚拟专用网络 (AWS VPN) 连接遇到持续或间歇性数据包丢失和高延迟问题。我可以运行哪些测试以确保问题不在我的 Amazon Virtual Private Cloud (Amazon VPC) 中发生?

简短描述

数据包丢失问题因本地网络和 Amazon VPC 之间的 AWS VPN 互联网流量跳变而异。最佳实践是隔离并确认数据包丢失的来源。

解决方法

检查源主机和目标主机是否存在资源利用率问题,例如 CPUUtilization、NetworkIn/NetworkOut、NetworkPacketsIn/NetworkPacketsOut,以验证您是否未达到网络限制。

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

MTR 可以提供持续更新的输出,使您可以分析一段时间的网络性能。它将 traceroute 和 ping 的功能合并到单一网络诊断工具中。

在 VPC 中的 EC2 实例上安装 MTR 网络工具,以检查 ICMP 或 TCP 数据包丢失和延迟。

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr

Windows:

下载并安装 WinMTR

注意:对于 Windows 操作系统,WinMTR 不支持基于 TCP 的 MTR。

在 EC2 实例和本地主机的私有与公有 IP 地址之间双向运行以下测试。当方向反转时,TCP/IP 网络上的节点之间的路径可能会发生变化。双向获取 MTR 结果是最佳实践。

注意:

  • 确保安全组和 NACL 规则允许来自源实例的 ICMP 流量。
  • 确保目标实例上的测试端口已打开,并且安全组和 NACL 规则允许来自协议和端口上源的流量。

基于 TCP 的结果可确定连接上是否存在基于应用程序的数据包丢失或延迟。MTR 版本 0.85 及更高版本具有 TCP 选项。

私有 IP EC2 实例本地主机报告:

mtr -n -c 200

私有 IP EC2 实例本地主机报告:

mtr -n -T -c 200 -P 443 -m 60

公有 IP EC2 实例本地主机报告:

mtr -n -c 200

公有 IP EC2 实例本地主机报告:

mtr -n -T -c 200 -P 443 -m 60

使用 traceroute 确定延迟或路由问题

Linux traceroute 实用程序会识别从客户机节点到目标节点的路径。该实用程序会记录每个路由器响应请求的时间(以毫秒为单位)。traceroute 实用程序还会计算每个跃点到达目标之前所需的时间。

要安装 traceroute,请运行以下命令:

Amazon Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get install traceroute

EC2 实例和本地主机测试的私有 IP 地址:

Amazon Linux:

sudo traceroute
sudo traceroute -T -p 80

Windows:

tracert
tracetcp

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

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

注意:最佳实践是从客户端到服务器,然后从服务器返回客户端双向运行 traceroute 命令。

使用 hping3 确定端到端 TCP 数据包丢失和延迟问题

Hping3是一种面向命令行的 TCP/IP 数据包汇编器和分析器,用于测量 TCP 连接上的端到端数据包丢失和延迟。除了针对 ICMP echo 请求外,hping3 还支持 TCP、UDP 和 RAW-IP 协议。Hping3 还包括可以在覆盖的频道之间发送文件的 traceroute 模式。Hping3 设计用于扫描主机、协助渗透测试、测试入侵检测系统以及在主机之间发送文件。

MTR 和 traceroute 会捕获每跃点延迟。但是,除了数据包丢失之外,hping3 还会生成更多结果,显示 TCP 上的端到端最小/平均/最大延迟。要安装 hping3,请运行以下命令:

Amazon Linux:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get 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 或 Wireshark 的数据包捕获示例

在重现问题时,在 VPC 中的测试 EC2 实例和本地主机之间执行同步数据包捕获,这有助于确定 VPN 连接上是否存在任何应用程序或网络层问题。您可以在 Linux 实例上安装 tcpdump,或在 Windows 实例上安装 Wireshark,以执行数据包捕获。

在 Amazon Linux 上安装 tcpdump:

sudo yum install tcpdump

在 Ubuntu 上安装 tcpdump:

sudo apt-get install tcpdump

在 Windows 操作系统上安装 Wireshark:

安装 Wireshark 并进行抓包。

显式拥塞通知 (ECN)

连接到 Windows 实例时,启用 ECN 可能会导致数据包丢失或性能问题。禁用 ECN 以提高性能。

运行以下命令以确定是否启用了 ECN 功能:

netsh interface tcp show global

如果已启用 ECN 功能,请运行以下命令禁用它:

netsh interface tcp set global ecncapability=disabled