我想解决在我的私有 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
如果输出接近允许的本地端口范围,则可能是端口耗尽的原因。
要减少端口耗尽,请执行以下操作:
**注意:**由于静默的连接关闭,更广泛的端口范围可能无法解决端口分配问题。
空闲连接导致 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 网关存在的问题