我的 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 终端节点不产生数据处理或小时收费。
相关信息
示例查询
使用 Amazon CloudWatch 监控 NAT 网关