我如何解决 NAT 网关上的 ErrorPortAllocation 错误?

上次更新日期:2022 年 4 月 4 日

我的 NAT 网关上总是出现 ErrorPortAllocation 错误,到我的目标主机的几个并发连接也持续失败。我如何解决此端口分配错误?

简短描述

NAT 网关最高支持 55,000 个到各目标的同时连接。如果超出此阈值,则到该目标的新连接将失败,Amazon CloudWatch 中 NAT 网关的 ErrorPortAllocation 指标将增加。

要解决此问题,请查找导致这些错误的源客户端和目标。然后,按照解决端口分配错误解决方案部分中的步骤进行操作。

先决条件:

  • 确保已在 VPC 级别或在使用 NAT 网关的子网中激活 VPC 流日志。
  • 确保将 VPC 流日志配置为传送到 CloudWatch。

解决方法

查找源客户端及其连接目标

1.    打开 CloudWatch 控制台

2.    在导航窗格中,选择详情

3.    对于日志组,选择记录流日志的日志组。

4.    查找流量的去向:

filter (srcAddr like 'NAT gateway Private IP' and dstAddr not like 'xxx.xxx.')
| stats count(*) as numaccept by dstAddr
| sort numaccept desc
| limit 10

结果会显示收到端口分配错误的时间段内,具有最大数量的响应的目标 IP。

注意:将 xxx.xxx. 替换为您 VPC CIDR 的前两个八位字节。此外,将 NAT 网关私有 IP 替换为 NAT 网关的私有 IP 地址。

5.    查找将流量发送到目标的源客户端:

filter (dstAddr like 'Public IP from above filter' and srcAddr like 'xxx.xxx.') 
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10

注意:将 xxx.xxx. 替换为您 VPC CIDR 的前两个八位字节。还要将上述筛选器的公有 IP 替换为您从前面的查询获知的目标 IP。

解决端口分配错误

  • 在每个可用区中创建一个 NAT 网关,然后跨可用区分发您的客户端。将同一可用区作为您的客户端,使用 NAT 网关路由流向 Internet 的流量,以减少跨可用区的数据费用。
  • 如果您注意到 CloudWatch 中的 IdleTimeoutCount 指标有所增加,请将您的应用程序或私有实例配置为关闭空闲连接。这允许 NAT 网关将源端口分配给新连接。
  • 限制客户端到单个目标的可连接数量。
  • 如果流量流向同一 AWS 区域的 Amazon Simple Storage Service (Amazon S3) 或 Amazon DynamoDB 公有 IP 地址,请使用网关 VPC 终端节点。使用网关 VPC 终端节点不产生数据处理或小时收费。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?