跳至内容

如何解决在私有 Amazon VPC 上使用 NAT 网关时出现的连接问题?

2 分钟阅读
0

我想解决在我的私有 Amazon Virtual Private Cloud (Amazon VPC) 上使用 NAT 网关时遇到的连接问题。

简短描述

出于以下原因,私有子网资源可能会出现连接超时、连接突然中断或连接速度变慢的情况:

  • 临时端口范围的网络访问控制列表 (网络 ACL) 规则限制
  • NAT 网关出现 ErrorPortAllocation 错误
  • 客户端实例端口耗尽
  • 空闲连接导致 IdleTimeoutCount 错误
  • NAT 网关带宽限制

解决方法

对临时端口范围的网络 ACL 规则限制

验证与 NAT 网关的公有子网关联的网络 ACL 是否允许来自临时端口范围 (1024-65535) 的流量。

如果网络 ACL 仅允许范围的子集,并且客户端使用范围之外的端口,则流量会下降。有关详细信息,请参阅示例: 具有 NAT 且服务器位于私有子网中的 VPC

NAT 网关出现 ErrorPortAllocation 错误

对于每个目标,每个 NAT 网关最多支持 55,000 个同时连接。如果连接超出此阈值,则与目标的新连接将失败,并且 Amazon CloudWatch 中 NAT 网关的 ErrorPortAllocation 指标会增加。

要解决此问题,请执行以下操作:

  • 将一个主 IPv4 地址和最多七个辅助 IPv4 地址关联到您的 NAT 网关。
  • 添加辅助 IPv4 地址以增加可用端口的数量并扩展并发连接的数量。

**注意:**辅助 IPv4 地址增加了可用端口的数量,因此工作负载可以使用的与 NAT 网关的并发连接数量也会增加。

有关详细信息,请参阅如何解决 Amazon VPC 中我的 NAT 网关上的“ErrorPortAllocation”错误?

客户端实例端口耗尽

私有子网中的客户端实例可能已达到其操作系统 (OS) 连接配额。

要检查活动连接的数量,请运行以下命令:

Linux:

netstat -ano | grep ESTABLISHED | wc --l

netstat -ano | grep TIME_WAIT | wc --l

Windows:

netstat -ano | find /i "estab" /c

netstat -ano | find /i "TIME_WAIT" /c

如果输出接近允许的本地端口范围,则可能是端口耗尽的原因。

要减少端口耗尽,请执行以下操作:

  • 解决所有会耗尽可用连接的应用程序级别问题。
  • 运行以下命令以增加操作系统临时端口范围:
    net.ipv4.ip_local_port_range = 1025 61000

**注意:**由于静默的连接关闭,更广泛的端口范围可能无法解决端口分配问题。

空闲连接导致 IdleTimeoutCount 错误

NAT 网关会使空闲时间达到 350 秒或更长时间的连接超时,并导致 IdleTimeoutCount 指标激增。然后,NAT 网关向尝试恢复超时连接的客户端发送 TCP 重置 (RST) 数据包,而不是 TCP 完成 (FIN) 数据包。

要解决 IdleTimeoutCount 错误,请执行以下操作:

  • 查看 Amazon CloudWatch 中的 IdleTimeoutCount 指标以确定空闲连接。
  • 使用 CloudWatch Contributor Insights 查看导致客户端保持 Idle(空闲)状态的原因。
  • 关闭来自客户端的空闲连接以释放容量。
  • 通过长时间运行的连接启动更频繁的流量。
  • 在值小于 350 秒的客户端实例上启用 TCP keepalive。

NAT 网关带宽限制

NAT 网关的起始带宽为 5 Gbps,可纵向扩展至 100 Gbps。如果使用 NAT 网关的所有实例的总网络吞吐量达到 100 Gbps,则流量会减慢。有关详细信息,请参阅 NAT 网关指标和维度

要解决来自 NAT 网关的带宽限制,请在不同子网中的多个 NAT 网关之间分配流量。

有关详细信息,请参阅如何使用 Amazon CloudWatch 指标来确定 NAT 网关带宽问题?

相关信息

如何解决在使用 NAT 实例时出现的间歇性连接问题?

排查 NAT 网关存在的问题

AWS 官方已更新 1 年前