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

3 分钟阅读
0

我发现我的 AWS 虚拟专用网络(AWS VPN)连接存在持续或间歇性丢包和高延迟问题。我想知道应该运行哪些测试来确认 Amazon Virtual Private Cloud(Amazon VPC)中是否出现问题。

简短描述

随着 AWS VPN 互联网流量在本地网络和 Amazon VPC 之间移动,丢包原因可能发生变化。最佳做法是隔离并确认丢包的来源。

解决方法

要确定是否已达到网络限制,应检查源主机和目标主机是否存在资源利用率问题。您可以通过 CPUUtilizationNetworkInNetworkOutNetworkPacketsInNetworkPacketsOut 等值找到资源利用率问题。

使用 MTR 检查是否存在 ICMP 或 TCP 丢包和延迟

MTR 会提供持续更新的输出,使您可以分析一段时间内的网络性能。它将 traceroute 和 ping 的功能整合到单个网络诊断工具中。要检查 ICMP 或 TCP 丢包和延迟,应在 VPC 中的 Amazon Elastic Compute Cloud(Amazon EC2)实例上安装 MTR 网络工具。

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr

Windows:

安装 WinMTR,请访问 SourceForge 网站。

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

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

在运行测试之前,请检查以下配置:

  • 确保安全组和网络访问控制列表(网络 ACL)规则允许来自源实例的 ICMP 流量。
  • 确保测试端口在目标实例上已打开。确认安全组和网络 ACL 规则在协议和端口上允许来自源的流量。

基于 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 命令。然后,再反向运行此命令。

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

Amazon Linux:

sudo yum install traceroute

Ubuntu

sudo apt-get install traceroute

要测试 EC2 实例和本地实例的私有 IP 地址,请运行以下命令:

Amazon Linux:

sudo traceroutesudo traceroute -T -p 80

Windows

tracerttracetcp

注意: 这些命令在端口 80 执行基于 TCP 的跟踪。请确认您已双向打开端口 80 或正在测试的端口。

如果您使用 Linux,则使用 traceroute 选项指定基于 TCP 的跟踪,而不是 ICMP。这是因为大多数互联网设备会降低基于 ICMP 的跟踪请求的优先级。

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

die.net 网站上的 Hping3 是一种命令行 TCP/IP 包汇编器和分析器,用于测量 TCP 连接上的端到端丢包和延迟。

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,请访问 Wireshark 网站。然后,进行包捕获。

关闭 ECN

如果您开启了显式拥塞通知(ECN),在您连接 Windows 实例时,可能会导致丢包或性能问题。要提高性能,应关闭 ECN。

要确定 ECN 是否开启,请运行以下命令:

netsh interface tcp show global

如果 ECN 功能已开启,请运行以下命令将其关闭:

netsh interface tcp set global ecncapability=disabled

相关信息

如何通过互联网网关排查 VPC 和本地主机中的 Amazon EC2 Linux 实例之间的网络性能问题?

如何确定我对 Amazon 提供的 DNS 服务器的 DNS 查询是否由于 VPC DNS 限制而失败?

AWS 官方
AWS 官方已更新 10 个月前