排查 NAT 网关的问题 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 NAT 网关的问题

以下主题可帮助您排查在创建或使用 NAT 网关时可能遇到的常见问题。

NAT 网关创建失败

问题

您创建一个 NAT 网关,但它进入的状态为 Failed

注意

出现故障的 NAT 网关会被自动删除,通常在大约一小时内。

原因

创建 NAT 网关时出错。返回的状态消息提供了出现此错误的原因。

解决方案

要查看错误消息,请打开 Amazon VPC 控制台,然后选择 NAT Gateways(NAT 网关)。选择 NAT 网关对应的单选按钮,然后在 Details(详细信息)选项卡上找到 State message(状态消息)。

下表列出 Amazon VPC 控制台中指示的可能的失败原因。执行所示任何纠正步骤之后,您可以再次尝试创建 NAT 网关。

显示的错误 原因 解决方案
子网没有足够的空闲地址来创建此 NAT 网关 指定的子网没有任何空闲的私有 IP 地址。NAT 网关需要从子网范围分配了私有 IP 地址的网络接口。 检查子网中可用的 IP 地址数,方法是在 Amazon VPC 控制台中前往 Subnets (子网) 页面。您可以在子网的详细信息创窗格中查看 Available IP。要在子网中创建空闲的 IP 地址,可以删除未使用的网络接口,或终止不需要的实例。
网络 vpc-xxxxxxxx 未连接任何互联网网关 必须在具有 Internet 网关的 VPC 中创建 NAT 网关。 创建 Internet 网关,并将其连接到您的 VPC。有关更多信息,请参阅 使用互联网网关
弹性 IP 地址 eipalloc-xxxxxxxx 已关联 指定的弹性 IP 地址已与其他资源关联,无法与 NAT 网关相关联。 检查哪个资源与弹性 IP 地址相关联。前往 Amazon VPC 控制台中的 Elastic IPs (弹性 IP) 页面,并查看为实例 ID 或网络接口 ID 指定的值。如果该资源不需要该弹性 IP 地址,则可以解除两者的关联。或者,也可以向您的账户分配新的弹性 IP 地址。有关更多信息,请参阅 使用弹性 IP 地址

NAT 网关配额

您在尝试创建 NAT 网关时收到以下错误。

Performing this operation would exceed the limit of 5 NAT gateways
原因

您已达到该可用区域的 NAT 网关数量的配额。

解决方案

如果您已达到此 NAT 网关在账户中的配额,则可以执行以下操作之一:

  • 使用 Service Quotas 控制台请求增加每个可用区域的 NAT 网关配额

  • 检查 NAT 网关的状态。PendingAvailableDeleting 状态的网关就占用限额。如果您最近删除了 NAT 网关,请等待几分钟,以便状态从 Deleting 变为 Deleted。然后尝试新建一个 NAT 网关。

  • 如果您在特定可用区中不需要 NAT 网关,请尝试在未达到配额的可用区中创建 NAT 网关。

有关更多信息,请参阅 Amazon VPC 配额

弹性 IP 地址配额

问题

您在尝试为公用 NAT 网关分配弹性 IP 地址时收到以下错误。

The maximum number of addresses has been reached.
原因

您已达到该区域账户的弹性 IP 地址数量的配额。

解决方案

如果您的弹性 IP 地址数已达到配额,则可以取消弹性 IP 地址与其他资源的关联,或者,您可以使用 Service Quotas 控制台请求增加弹性 IP 配额

不支持可用区

问题

您在尝试创建 NAT 网关时收到以下错误:NotAvailableInZone

原因

您可能会尝试在受约束的可用区(即我们的扩展能力受约束的区域)中创建 NAT 网关。

解决方案

我们无法在这些可用区中支持 NAT 网关。您可以在不同可用区中创建 NAT 网关并将它用于受约束区域中的私有子网。您还可以将资源移动到不受约束的可用区,以便您的资源和 NAT 网关处于同一区中。

NAT 网关不再可见

问题

您创建了一个 NAT 网关,但它在 Amazon VPC 控制台中不可见。

原因

创建 NAT 网关期间可能出错,创建失败。状态为 Failed 的 NAT 网关在 Amazon VPC 控制台中保持可见大约一小时。一个小时之后会被自动删除。

解决方案

查看 NAT 网关创建失败 中的信息,然后尝试创建新 NAT 网关。

NAT 网关不响应 Ping 命令

问题

如果您尝试从互联网(例如从家庭计算机)或从 VPC 中的任何实例对 NAT 网关的弹性 IP 地址或私有 IP 地址执行 ping 操作,则不会收到响应。

原因

NAT 网关仅从私有子网中的实例向 Internet 传输流量。

解决方案

要测试 NAT 网关是否正常运行,请参阅 测试公有 NAT 网关

实例无法访问 Internet

问题

您创建了一个公有 NAT 网关并按照步骤进行了测试,但 ping 命令失败,或者您私有子网中的实例无法访问互联网。

原因

出现此问题的原因可能是以下原因之一:

  • NAT 网关尚未准备好提供流量。

  • 您的路由表未得到正确配置。

  • 您的安全组或网络 ACL 阻止入站或出站流量。

  • 您使用的是不受支持的协议。

解决方案

检查以下信息:

  • 检查 NAT 网关是否处于 Available 状态。在 Amazon VPC 控制台中,转到 NAT Gateways (NAT 网关) 页面,然后在详细信息窗格中查看状态信息。如果 NAT 网关处于失败状态,则表示在创建它时可能发生了错误。有关更多信息,请参阅 NAT 网关创建失败

  • 检查您是否正确配置了路由表:

    • NAT 网关所处的公有子网必须具有将 Internet 流量路由到 Internet 网关的路由表。

    • 实例所处的私有子网必须具有将 Internet 流量路由到 NAT 网关的路由表。

    • 检查是否没有其他路由表条目将全部或部分 Internet 流量路由到其他设备而不是 NAT 网关。

  • 确保私有实例的安全组规则允许出站 Internet 流量。要使 ping 命令正常运行,这些规则还必须允许出站 ICMP 流量。

    NAT 网关本身允许所有出站流量以及响应出站请求时收到的流量 (因此它是有状态的)。

  • 确保与私有子网和公有子网关联的网络 ACL 没有阻止入站或出站 Internet 流量的规则。要使 ping 命令正常运行,这些规则还必须允许入站和出站 ICMP 流量。

    可以启用流日志以帮助诊断由于网络 ACL 或安全组规则而中断的连接。有关更多信息,请参阅 使用 VPC 流日志记录 IP 流量

  • 如果使用 ping 命令,请确保在对启用了 ICMP 的主机执行 ping 操作。如果未启用 ICMP,您不会收到应答数据包。要对此进行测试,请从您自己计算机上的命令行终端执行相同的 ping 命令。

  • 检查实例是否能够对其他资源成功执行 ping 操作,例如私有子网中的其他实例 (假设安全组规则允许这样做)。

  • 确保您的连接仅使用 TCP、UDP 或 ICMP 协议。

到目标的 TCP 连接失败

问题

在通过 NAT 网关从私有子网中的实例连接到特定目标时,有些 TCP 连接会成功,但也有些连接会失败或超时。

原因

出现此问题的原因可能是以下原因之一:

  • 目标终端节点正在使用分段 TCP 数据包进行响应。NAT 网关不支持 TCP 或 ICMP 的 IP 碎片。有关更多信息,请参阅 比较 NAT 网关和 NAT 实例

  • 远程服务器上启用了 tcp_tw_recycle 选项,当 NAT 设备后有多个连接时,启用该选项会导致问题。

解决方案

通过执行以下操作,验证您尝试连接的终端节点是否正在使用分段 TCP 数据包进行响应:

  1. 使用具有公共 IP 地址的公有子网中的实例来触发足够大的响应,以产生来自特定终端节点的分段。

  2. 使用 tcpdump 实用工具验证终端节点是否将发送分段数据包。

    重要

    您必须使用公有子网中的实例来执行这些检查。您不能使用原始连接失败的实例,或者 NAT 网关或 NAT 实例后面的私有子网中的实例。

    发送或接收大型 ICMP 数据包的诊断工具将报告数据包丢失。例如,命令 ping -s 10000 example.com 将不会在 NAT 网关后面工作。

  3. 如果终端节点发送分段 TCP 数据包,则可使用 NAT 实例代替 NAT 网关。

如果您有权访问远程服务器,则可以通过执行以下操作来验证是否已启用 tcp_tw_recycle 选项:

  1. 在服务器上运行以下命令:

    cat /proc/sys/net/ipv4/tcp_tw_recycle

    如果输出为 1,则表明已启用 tcp_tw_recycle 选项。

  2. 如果已启用 tcp_tw_recycle 选项,建议将其禁用。如果您需要重用连接,则 tcp_tw_reuse 是一个较为安全的选项。

如果您无权访问远程服务器,则可以通过临时禁用私有子网中的实例上的 tcp_timestamps 选项来进行测试。然后重新连接到远程服务器。如果连接成功,则上次连接失败的原因很可能是在远程服务器上启用了 tcp_tw_recycle 选项。如果可能,请与远程服务器的拥有者联系,以验证是否已启用此选项,如已启用,则请求将其禁用。

追踪路由输出未显示 NAT 网关私有 IP 地址

问题

您的实例可以访问 Internet,但是当您执行 traceroute 命令时,输出未显示 NAT 网关的私有 IP 地址。

原因

您的实例在使用其他网关(例如互联网网关)访问互联网。

解决方案

在实例所处的子网的路由表中,检查以下信息:

  • 确保存在将 Internet 流量发送到 NAT 网关的路由。

  • 确保没有其他特定路由将 Internet 流量发送到其他设备 (如虚拟私有网关或 Internet 网关)。

Internet 连接在 350 秒后中断

问题

您的实例可以访问互联网,但连接在 350 秒后断开。

原因

如果使用 NAT 网关的连接空闲 350 秒或更长时间,则连接会超时。

如果连接超时,NAT 网关向 NAT 网关后方的任何资源返回 RST 数据包,尝试继续进行连接 (它不发送 FIN 数据包)。

解决方案

要防止连接中断,您可以通过该连接发起更多流量。或者,您也可以在实例上启用值小于 350 秒的 TCP keepalive。

无法建立 IPsec 连接

问题

您无法与目标建立 IPsec 连接。

原因

NAT 网关当前不支持 IPsec 协议。

解决方案

您可以使用 NAT 遍历 (NAT-T) 将 IPsec 流量封装在 UDP(NAT 网关的支持协议)中。请确保您已测试您的 NAT-T 和 IPsec 配置,以验证您没有丢弃 IPsec 流量。

无法发起更多连接

问题

您有通过 NAT 网关与目标建立的现有连接,但您无法建立更多连接。

原因

您可能已达到单个 NAT 网关的并发连接数限制。有关更多信息,请参阅 NAT 网关基础知识。如果私有子网中的实例创建了大量连接,则您可能会达到该限制。

解决方案

请执行以下操作之一:

  • 对每个可用区创建一个 NAT 网关,并在这些区域间分布客户端。

  • 在公有子网中创建更多 NAT 网关并将客户端拆分到多个私有子网中 (各自具有指向不同 NAT 网关的路由)。

  • 限制客户端可对目的地创建的连接数。

  • 使用 CloudWatch 中的 IdleTimeoutCount 指标可监控空闲连接的增加。关闭空闲连接以释放容量。

  • 创建具有多个 IP 地址的 NAT 网关或向现有的 NAT 网关添加辅助 IP 地址。每个新的 IPv4 地址最多可以支持 55,000 个并发连接。有关更多信息,请参阅创建 NAT 网关编辑辅助 IP 地址关联