

# NAT 网关
<a name="vpc-nat-gateway"></a>

NAT 网关是一种网络地址转换 (NATI) 服务。您可以使用 NAT 网关，以便私有子网中的实例可以连接到 VPC 外部的服务，但外部服务无法启动与这些实例的连接。

在创建 NAT 网关时，您指定以下连接类型之一：
+ **公开**：（默认）私有子网中的实例可以通过公共 NAT 网关连接到互联网，但这些实例不能接收来自互联网的、未经请求的入站连接。您在公有子网中创建公有 NAT 网关，并且必须在创建时将弹性 IP 地址与 NAT 网关相关联。您可以将流量从 NAT 网关路由到 VPC 的互联网网关。或者，您可以使用公有 NAT 网关连接到其他 VPC 或本地部署网络。在这种情况下，您可以借助中转网关或虚拟私有网关路由来自 NAT 网关的流量。
+ **私有**：私有子网中的实例可以通过私有 NAT 网关连接到其他 VPC 或您的本地网络，但这些实例无法接收来自其他 VPC 或本地网络的、未经请求的入站连接。您可以借助中转网关或虚拟私有网关路由来自 NAT 网关的流量。您不能将弹性 IP 地址与私有 NAT 网关相关联。您可以将互联网网关连接到具有私有 NAT 网关的 VPC，但如果您将流量从私有 NAT 网关路由到互联网网关，则互联网网关会丢弃流量。

NAT 网关适用于 IPv4 或 IPv6 流量（使用 [DNS64 和 NAT64](nat-gateway-nat64-dns64.md)）。通过 IPv6 实现仅出站互联网通信的另一种选择是使用[仅出口互联网网关](egress-only-internet-gateway.md)。

私有和公有 NAT 网关都会将实例的源私有 IPv4 地址映射到 NAT 网关的私有 IPv4 地址，但是对于公有 NAT 网关，互联网网关随后会将公有 NAT 网关的私有 IPv4 地址映射到与 NAT 网关关联的弹性 IP 地址。将响应流量发送到实例时，无论是使用公有还是私有 NAT 网关，NAT 网关都会将地址转换回原始源 IP 地址。

**注意事项**
+ 必须始终从包含 NAT 网关的 VPC 内启动连接。
+ 您可以使用公有或私有 NAT 网关将流量路由到传输网关和虚拟私有网关。
+ 如果您使用私有 NAT 网关连接到传输网关或虚拟私有网关，则到达目的地的流量将来自私有 NAT 网关的私有 IP 地址。
+ 如果您使用公有 NAT 网关连接到传输网关或虚拟私有网关，则到达目的地的流量将来自公有 NAT 网关的私有 IP 地址。仅当与同一 VPC 中的互联网网关结合使用时，公有 NAT 网关才会使用其弹性 IP 地址作为源 IP 地址。

**Topics**
+ [NAT 网关基础知识](nat-gateway-basics.md)
+ [使用 NAT 网关](nat-gateway-working-with.md)
+ [使用区域 NAT 网关实现自动多可用区扩展](nat-gateways-regional.md)
+ [使用案例](nat-gateway-scenarios.md)
+ [DNS64 和 NAT64](nat-gateway-nat64-dns64.md)
+ [检查来自 NAT 网关的流量](nat-gateway-inspect-traffic.md)
+ [CloudWatch 指标](vpc-nat-gateway-cloudwatch.md)
+ [问题排查](nat-gateway-troubleshooting.md)
+ [定价](nat-gateway-pricing.md)

# NAT 网关基础知识
<a name="nat-gateway-basics"></a>

每个 NAT 网关都在特定可用区中创建，并在该可用区进行冗余实施。您可以在每个可用区中创建的 NAT 网关存在数量配额。有关更多信息，请参阅 [网关](amazon-vpc-limits.md#vpc-limits-gateways)。

如果您在多个可用区中拥有资源并且它们共享一个 NAT 网关，如果该 NAT 网关的可用区不可用，其他可用区中的资源将无法访问 Internet。为提高故障恢复能力，请在每个可用区中创建一个 NAT 网关，并配置路由以确保这些资源使用自身可用区中的 NAT 网关。

以下特征和规则适用于 NAT 网关：
+ NAT 网关支持以下协议：TCP、UDP 和 ICMP。
+ IPv4 或 IPv6 流量支持 NAT 网关。对于 IPv6 流量，NAT 网关将执行 NAT64。通过与 DNS64 结合使用（在 Route 53 Resolver 上可用），Amazon VPC 子网中的 IPv6 工作负载可以与 IPv4 资源进行通信。这些 IPv4 服务可能存在于同一 VPC（在单独子网中）或其他 VPC、本地环境或互联网上。
+ NAT 网关支持 5 Gbps 带宽并会自动扩展到 100 Gbps。如果您需要更大的带宽，您可以将资源拆分到多个子网中，并在每个子网中创建 NAT 网关。
+ 一个 NAT 网关每秒能处理 1 百万个数据包，还能自动扩展到每秒 1 千万个数据包。超出此限制后，NAT 网关将丢弃数据包。为防止数据包丢失，请将资源拆分到多个子网中，并为每个子网中创建单独的 NAT 网关。
+ 对于每个唯一目标，每个 IPv4 地址最多可以支持 55,000 个并发连接。唯一目标由目标 IP 地址、目标端口和协议（TCP/UDP/ICMP）的唯一组合标识。您可以通过将最多 8 个 IPv4 地址（1 个主要 IPv4 地址和 7 个辅助 IPv4 地址）关联到 NAT 网关来提高此限制。默认情况下，公有 NAT 网关只能关联 2 个弹性 IP 地址。您可以通过请求调整限额来提高此限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。
+ 创建 NAT 网关时，可以选择要分配给 NAT 网关的主私有 IPv4 地址。否则，我们将代表您从子网的 IPv4 地址范围内选择一个地址。您无法更改或删除主私有 IPv4 地址。可以根据需要添加辅助私有 IPv4 地址。
+ 您不能将安全组与 NAT 网关关联。您可以将安全组与实例相关联，以控制入站和出站流量。
+ 我们会为您的 NAT 网关创建一个请求者托管式网络接口。您可以使用 Amazon EC2 控制台查看此网络接口。在描述中搜索 NAT 网关的 ID。您可以向网络接口添加标签，但不能修改此网络接口的其他属性。
+ 您可以使用网络 ACL 控制进出 NAT 网关所在子网的流量。NAT 网关使用端口 1024–65535。有关更多信息，请参阅 [网络 ACL](vpc-network-acls.md)。
+ 无法通过 VPC 对等连接将流量路由到 NAT 网关。但是，从 NAT 网关通过 VPC 对等连接到对等 VPC 中的目标的流量支持“返回到发送方”行为 - 即使在目标 VPC 中没有配置返回路由，返回流量也会自动路由回源 NAT 网关。此行为仅适用于 NAT 网关，不适用于标准 EC2 实例。为防止这种情况，请使用 NACL 来阻止返回流量。

  不支持：

  ```
  Client → Peering → NAT → Internet
  ```

  支持：

  ```
  Client → NAT → Peering → Destination
  ```
+ 您无法使用虚拟专用网关将流量从 Site-to-Site VPN 或 Direct Connect 路由到 NAT 网关。如果您使用中转网关而不是虚拟专用网关，则可以将流量从 Site-to-Site VPN 或 Direct Connect 路由到 NAT 网关。
+ NAT 网关支持最大传输单位（MTU）为 8500 的流量，但请务必注意以下几点：
  + 网络连接的 MTU 是能够通过该连接传递的最大可允许数据包的大小（以字节为单位）。连接的 MTU 越大，可在单个数据包中传递的数据越多。
  + 将丢弃到达 NAT 网关的大小超过 8500 字节的数据包（如果适用，则将被分段）。
  + 为防止在使用公有 NAT 网关通过互联网与资源通信时可能发生的数据包丢失，EC2 实例的 MTU 设置不应超过 1500 字节。有关检查和设置实例 MTU 的更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2 实例的网络 MTU](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html#set_mtu)。
  + NAT 网关通过 FRAG\$1NEEDED ICMPv4 数据包和 Packet Too Big（PTB）ICMPv6 数据包支持路径 MTU 发现（PMTUD）。
  + NAT 网关会对所有数据包强制执行最大分段大小（MSS）固定。有关更多信息，请参阅 [RFC879](https://datatracker.ietf.org/doc/html/rfc879)。

# 使用 NAT 网关
<a name="nat-gateway-working-with"></a>

您可以使用 Amazon VPC 控制台创建和管理 NAT 网关。

**Topics**
+ [控制 NAT 网关的使用](#nat-gateway-iam)
+ [创建 NAT 网关](#nat-gateway-creating)
+ [编辑辅助 IP 地址关联](#nat-gateway-edit-secondary)
+ [标记 NAT 网关](#nat-gateway-tagging)
+ [删除 NAT 网关](#nat-gateway-deleting)
+ [命令行概述](#nat-gateway-api-cli)

## 控制 NAT 网关的使用
<a name="nat-gateway-iam"></a>

默认情况下，用户无权使用 NAT 网关。您可以创建一个 IAM 角色，并向该角色附加一个向用户授予 NAT 网关创建、描述和删除权限的策略。有关更多信息，请参阅 [适用于 Amazon VPC 的 Identity and Access Management](security-iam.md)。

## 创建 NAT 网关
<a name="nat-gateway-creating"></a>

请按照以下过程创建 NAT 网关。

**相关限额**
+ 如果您已耗尽分配给账户的弹性 IP 地址数量，则将无法创建公有 NAT 网关。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。
+ 私有 NAT 网关最多可以分配 8 个私有 IPv4 地址。此限制不可调整。
+ 默认情况下，公有 NAT 网关只能关联 2 个弹性 IP 地址。您可以通过请求调整限额来提高此限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。

**创建 NAT 网关**

1. 通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择**创建 NAT 网关**。

1. （可选）指定 NAT 网关的名称。这将创建一个标签，其中键为 **Name**，值是您指定的名称。

1. 选择要在其中创建 NAT 网关的子网。

1. 对于**连接类型**，保持默认的**公有**选择不变，以创建公有 NAT 网关，或者选择**私有**，以创建私有 NAT 网关。有关公有和私有 NAT 网关之间差异的更多信息，请参阅 [NAT 网关](vpc-nat-gateway.md)。

1. 如果您选择**公有**，请执行以下操作；否则，请跳至第 8 步：

   1. 选择**弹性 IP 分配 ID**为 NAT 网关分配弹性 IP 地址，或者选择**分配弹性 IP** 为公有 NAT 网关自动分配。默认情况下，公有 NAT 网关只能关联 2 个弹性 IP 地址。您可以通过请求调整限额来提高此限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。
**重要**  
当您为公有 NAT 网关分配弹性 IP 地址时，EIP 的网络边界组必须与您启动公有 NAT 网关的可用区（AZ）的网络边界组相匹配。如果不匹配，NAT 网关将无法启动。可以通过查看子网的详细信息来了解子网可用区的网络边界组。同样，可以通过查看 EIP 地址的详细信息来了解 EIP 的网络边界组。有关更多信息，请参阅 [1. 分配弹性 IP 地址](WorkWithEIPs.md#allocate-eip)。

   1. （可选）选择**其他设置**，然后在**私有 IP 地址 – 可选**下，为 NAT 网关输入私有 IPv4 地址。如果不输入地址，AWS 会自动从 NAT 网关所在的子网中为 NAT 网关随机分配一个私有 IPv4 地址。

   1. 跳至步骤 11。

1. 如果您选择**私有**，请选择**其他设置**，然后在**私有 IP 地址分配方法**下，选择下列选项中的一种：
   + **自动分配**：AWS 将为 NAT 网关选择主私有 IPv4 地址。对于**自动分配的私有 IPv4 地址数量**，您可以选择为 NAT 网关指定辅助私有 IPv4 地址的数量。AWS 将从 NAT 网关的子网中随机选择这些 IP 地址。
   + **自定义**：对于**主私有 IPv4 地址**，选择 NAT 网关的主私有 IPv4 地址。对于**辅助私有 IPv4 地址**，您可以选择为 NAT 网关指定最多 7 个辅助私有 IPv4 地址。

1. 如果您在步骤 8 中选择了**自定义**，请跳过此步骤。如果您选择了**自动分配**，请在**自动分配的私有 IP 地址数量**下，选择您希望 AWS 分配给该私有 NAT 网关的辅助 IPv4 地址数量。最多可以选择 7 个 IPv4 地址。
**注意**  
辅助 IPv4 地址是可选的，如果使用 NAT 网关的工作负载与单个目标的并发连接超过 55,000 个（相同的目标 IP、目标端口和协议），则应当分配辅助 IPv4 地址。辅助 IPv4 地址增加了可用的端口数量，从而提高了工作负载使用 NAT 网关建立连接的并发连接数限制。

1. 如果您在步骤 9 中选择了**自动分配**，请跳过此步骤。如果您选择了**自定义**，请执行以下操作：

   1. 在**主要私有 IPv4 地址**下，输入私有 IPv4 地址。

   1. 在**辅助私有 IPv4 地址**下，输入辅助私有 IPv4 地址，不超过 7 个。

1. （可选）若要向 NAT 网关添加标签，请选择 **Add new tag**（添加新标签），然后输入该标签的键和值。最多可以添加 50 个标签。

1. 选择**创建 NAT 网关**。

1. NAT 网关的初始状态为 `Pending`。状态更改为 `Available` 后，NAT 网关即可供您使用。请务必按需新路由表。有关示例，请参阅 [NAT 网关使用案例](nat-gateway-scenarios.md)。

如果 NAT 网关的状态变成 `Failed`，则表示在创建过程中发生了错误。有关更多信息，请参阅 [NAT 网关创建失败](nat-gateway-troubleshooting.md#nat-gateway-troubleshooting-failed)。

## 编辑辅助 IP 地址关联
<a name="nat-gateway-edit-secondary"></a>

对于每个唯一目标，每个 IPv4 地址最多可以支持 55,000 个并发连接。唯一目标由目标 IP 地址、目标端口和协议（TCP/UDP/ICMP）的唯一组合标识。您可以通过将最多 8 个 IPv4 地址（1 个主要 IPv4 地址和 7 个辅助 IPv4 地址）关联到 NAT 网关来提高此限制。默认情况下，公有 NAT 网关只能关联 2 个弹性 IP 地址。您可以通过请求调整限额来提高此限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。

您可以使用 [NAT 网关 CloudWatch 指标](metrics-dimensions-nat-gateway.md) *ErrorPortAllocation* 和 *PacketsDropCount* 来确定 NAT 网关是否正在生成端口分配错误或丢弃数据包。要解决此问题，请将辅助 IPv4 地址添加到 NAT 网关。

**注意事项**
+ 您可以在创建私有 NAT 网关时或在使用本部分中的步骤创建 NAT 网关后添加辅助私有 IPv4 地址。只有在使用本部分中的过程创建 NAT 网关后，才能将弹性 IP 地址添加到公有 NAT 网关。
+ NAT 网关最多可以关联 8 个 IPv4 地址（1 个主要 IPv4 地址和 7 个辅助 IPv4 地址）。私有 NAT 网关最多可以分配 8 个私有 IPv4 地址。默认情况下，公有 NAT 网关只能关联 2 个弹性 IP 地址。您可以通过请求调整限额来提高此限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。

**编辑辅助 IPv4 地址关联**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择要编辑其辅助 IPv4 地址关联的 NAT 网关。

1. 选择**操作**，然后选择**编辑辅助 IP 地址关联**。

1. 如果要编辑私有 NAT 网关的辅助 IPv4 地址关联，请在**操作**下，选择**分配新 IPv4 地址**或**取消分配现有 IPv4 地址**。如果要编辑公有 NAT 网关的辅助 IPv4 地址关联，请在**操作**下，选择**关联新 IPv4 地址**或**取消关联现有 IPv4 地址**。

1. 请执行以下操作之一：
   + 如果您选择分配或关联新 IPv4 地址，请执行以下操作：

     1. 这个步骤为必填项。您必须选择一个私有 IPv4 地址。选择**私有 IPv4 地址分配方法**：
        + **自动分配**：AWS 会自动选择主要私有 IPv4 地址。如果您希望 AWS 将最多 7 个辅助私有 IPv4 地址分配给 NAT 网关，则可以选择该选项。AWS 会自动从 NAT 网关所在的子网中随机选择并进行分配。
        + **自定义**：选择要分配给 NAT 网关的主要私有 IPv4 地址和最多 7 个辅助私有 IPv4 地址。

     1. 在**弹性 IP 分配 ID** 下，选择要添加为辅助 IPv4 地址的弹性 IP 地址。这个步骤为必填项。您必须选择一个弹性 IP 地址以及一个私有 IPv4 地址。如果您为**私有 IP 地址分配方法**选择了**自定义**，则还必须为您添加的每个弹性 IP 地址输入一个私有 IPv4 地址。
**重要**  
当您为公有 NAT 网关分配辅助 EIP 时，该 EIP 的网络边界组必须与公有 NAT 网关所在可用区（AZ）的网络边界组匹配。如果不匹配，EIP 将无法分配。可以通过查看子网的详细信息来了解子网可用区的网络边界组。同样，可以通过查看 EIP 地址的详细信息来了解 EIP 的网络边界组。有关更多信息，请参阅 [1. 分配弹性 IP 地址](WorkWithEIPs.md#allocate-eip)。

     NAT 网关最多可以关联 8 个 IP 地址。如果这是公有 NAT 网关，则每个区域的弹性 IP 地址都有默认限额限制。有关更多信息，请参阅 [弹性 IP 地址](amazon-vpc-limits.md#vpc-limits-eips)。
   + 如果您选择取消分配或取消关联新 IPv4 地址，请完成以下操作：

     1. 在**要取消分配的现有辅助 IP 地址**下，选择要取消分配的辅助 IP 地址。

     1. （可选）在**连接耗尽持续时间**下，输入连接仍在进行时强制释放 IP 地址之前的最长等待时间（以秒为单位）。如果不输入值，则默认值为 350 秒。

1. 选择**保存更改**。

如果 NAT 网关的状态变成 `Failed`，则表示在创建过程中发生了错误。有关更多信息，请参阅 [NAT 网关创建失败](nat-gateway-troubleshooting.md#nat-gateway-troubleshooting-failed)。

## 标记 NAT 网关
<a name="nat-gateway-tagging"></a>

您可以对 NAT 网关进行标记，以帮助您识别它或根据组织的需要对其进行分类。有关使用标签的信息，请参阅《*Amazon EC2 用户指南*》中的[标记您的 Amazon EC2 资源](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。

对于 NAT 网关支持成本分配标签。因此，您还可以使用标签来整理 AWS 账单并反映您自己的成本结构。有关更多信息，请参阅 *AWS Billing 用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。有关设置包含标签的成本分配报告的更多信息，请参阅*关于 AWS 账户账单*中的[月度成本分配报告](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html)。

**标记 NAT 网关**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择要标记的 NAT 网关，然后选择**操作**。然后选择**管理标签**。

1. 选择**添加新标签**，并定义标签的**键**和**值**。最多可以添加 50 个标签。

1. 选择**保存**。

## 删除 NAT 网关
<a name="nat-gateway-deleting"></a>

您可以删除不再需要的 NAT 网关。删除 NAT 网关之后，其条目在一小时左右在 Amazon VPC 控制台中保持可见，在此之后自动删除。您无法自己删除此条目。

删除 NAT 网关会解除其弹性 IP 地址关联，但不会从您的账户释放该地址。如果删除 NAT 网关，则 NAT 网关路由会保留为 `blackhole` 状态，直到您删除或更新这些路由。

**删除 NAT 网关**

1. 通过以下网址打开 Amazon VPC 控制台：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择 NAT 网关对应的单选按钮，然后选择 **Actions**（操作）、**Delete NAT gateway**（删除 NAT 网关）。

1. 提示进行确认时，输入 **delete**，然后选择 **Delete**（删除）。

1. 如果您不再需要与公有 NAT 网关关联的弹性 IP 地址，建议您释放该地址。有关更多信息，请参阅 [5. 释放弹性 IP 地址](WorkWithEIPs.md#release-eip)。

## 命令行概述
<a name="nat-gateway-api-cli"></a>

您可以使用命令行执行此页面上介绍的任务。

**将私有 IPv4 地址分配给私有 NAT 网关**
+ [assign-private-nat-gateway-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/assign-private-nat-gateway-address.html)（AWS CLI）
+ [Register-EC2PrivateNatGatewayAddress](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2PrivateNatGatewayAddress.html)（AWS Tools for Windows PowerShell）

**将弹性 IP 地址和私有 IPv4 地址与公有 NAT 网关相关联**
+ [associate-nat-gateway-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-nat-gateway-address.html)（AWS CLI）
+ [Register-EC2NatGatewayAddress](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2NatGatewayAddress.html)（AWS Tools for Windows PowerShell）

**创建 NAT 网关**
+ [create-nat-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-nat-gateway.html) (AWS CLI)
+ [New-EC2NatGateway](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NatGateway.html) (AWS Tools for Windows PowerShell)

**删除 NAT 网关**
+ [delete-nat-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-nat-gateway.html) (AWS CLI)
+ [Remove-EC2NatGateway](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2NatGateway.html) (AWS Tools for Windows PowerShell)

**描述 NAT 网关**
+ [describe-nat-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-nat-gateways.html) (AWS CLI)
+ [Get-EC2NatGateway](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2NatGateway.html) (AWS Tools for Windows PowerShell)

**将辅助弹性 IP 地址与公有 NAT 网关取消关联**
+ [disassociate-nat-gateway-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/disassociate-nat-gateway-address.html)（AWS CLI）
+ [Unregister-EC2NatGatewayAddress](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2NatGatewayAddress.html)（AWS Tools for Windows PowerShell）

**标记 NAT 网关**
+ [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)（AWS CLI）
+ [New-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Tag.html)（AWS Tools for Windows PowerShell）

**从私有 NAT 网关取消分配辅助 IPv4 地址**
+ [unassign-private-nat-gateway-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/unassign-private-nat-gateway-address.html)（AWS CLI）
+ [Unregister-EC2PrivateNatGatewayAddress](https://docs.aws.amazon.com/powershell/latest/reference/items/Unregister-EC2PrivateNatGatewayAddress.html)（AWS Tools for Windows PowerShell）

# 使用区域 NAT 网关实现自动多可用区扩展
<a name="nat-gateways-regional"></a>

使用区域 NAT 网关可以简化网络架构、改善安全状况和默认配置高可用性。区域 NAT 网关会根据工作负载的情况自动跨可用区扩展。与在单个可用区中运行的标准 NAT 网关（称为可用区 NAT 网关）不同，区域 NAT 网关会根据您的工作负载自动提供高可用性。

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/rnat.drawio.png)


左图 A 展示了可用区 NAT 网关的当前设置。首先要为每个可用区创建可用区 NAT 网关，并将您的 NAT 托管到公有子网中。然后为每个可用区配置从您的私有子网到该可用区中 NAT 的单独路由。每次将工作负载扩展到新的可用区时，都需要重复此步骤，以实现高可用性。此外还需要在每个可用区的 NAT 子网路由表中添加互联网网关的路由。

而使用区域 NAT 网关时，无需创建公有子网来托管该网关。此外也不必在每次将工作负载扩展到新的可用区时创建和删除 NAT 网关以及编辑路由表。只需创建一个具有区域模式的 NAT 网关，选择您的 VPC，然后该网关就会根据您的工作负载在所有可用区之间自动扩展和缩减，从而实现高可用性。如图 B 所示，您可以跨所有可用区将来自某个私有子网中资源的流量路由到此单一区域 NAT 网关 ID，也可使用同一路由表跨可用区中的子网执行网络地址转换。创建区域 NAT 网关后，AWS 会自动为其创建一个路由表，其中包含通往互联网网关的预配置路由。您可以使用此路由表添加到中间设备的回程路由。



## 优势
<a name="benefits"></a>

区域 NAT 网关具有以下优点：
+ **简化设置**：跨具有网络接口的所有可用区使用单个 NAT ID，从而可以将同一路由条目用于不同可用区中的子网。
+ **增强安全性**：无需使用公有子网。区域 NAT 网关是一种独立的资源，具有自己的路由表，无需使用 VPC 中的公有子网来托管区域 NAT 网关，从而减少错误将私有资源配置到具有公共连接的子网中的可能性。
+ **自动实现高可用性**：可自动根据工作负载的空间占用情况扩展和缩减，以保持可用区亲和性，默认提供高可用性。
+ **提高端口和 IP 数上限**：区域 NAT 网关支持每个可用区使用最多 32 个 IP 地址（而可用区 NAT 网关仅支持 8 个）。每个 IP 地址的热点目标（由目标 IP、目标端口和协议的唯一组合来标识）并发连接数上限增加了 55,000 个。

## 区域 NAT 网关的使用场景
<a name="when-to-use-regional-nat-gateways"></a>

所有使用案例都可考虑使用区域 NAT 网关，但需要私有连接的场景除外。区域 NAT 网关不提供私有连接；对于私有 NAT 使用案例，我们建议在可用区可用性模式下使用 NAT 网关。

## 区域 NAT 网关的工作原理
<a name="how-regional-nat-gateways-work"></a>

当您在新的可用区中启动资源时，区域 NAT 网关会检测该可用区中是否存在网络接口（ENI），然后自动扩展到该可用区。同样，NAT 网关将缩减没有活动工作负载的可用区。

区域 NAT 网关完成资源实例化后，最长可能需要 60 分钟才能扩展到新可用区。在完成此扩展之前，来自该资源的相关流量将由您的区域 NAT 网关在现有可用区之一中跨可用区处理。

区域 NAT 网关支持两种模式：
+ **自动模式**：在此模式下，AWS 会自动管理 IP 地址和可用区扩展（推荐）。如果需要在此模式下使用自己的 IP 地址并使用 Amazon VPC IPAM，请参阅《Amazon VPC IPAM 用户指南》中的[使用 IPAM 策略定义公有 IPv4 分配策略](https://docs.aws.amazon.com/ipam/define-public-ipv4-allocation-strategy-with-ipam-policies.xml)**。
+ **手动模式**：在此模式下，您可以手动管理 IP 地址并控制每个可用区的网络地址转换。在手动模式下，您负责跨可用区扩展和缩减自己的 NAT 网关。

## 定价
<a name="pricing"></a>

有关定价信息，请参阅 [Amazon VPC 定价](https://aws.amazon.com/vpc/pricing/)。

## 创建区域 NAT 网关
<a name="create-a-regional-nat-gateway"></a>

### 使用控制台
<a name="using-the-console"></a>

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **NAT 网关**。

1. 选择**创建 NAT 网关**。

1. 对于**可用性模式**，请选择**区域**。选择区域可用性后，您无需指定任何子网

1. 选择 VPC。

1. 完成其余的配置，然后选择**创建 NAT 网关**。

### 使用 AWS CLI
<a name="using-the-aws-cli"></a>

创建区域 NAT 网关

```
aws ec2 create-nat-gateway --vpc-id vpc-12345678 --availability-mode regional
```

查看 NAT 网关详细信息

```
aws ec2 describe-nat-gateways --nat-gateway-ids nat-12345678
```

添加 IP 地址（手动模式）

```
aws ec2 associate-nat-gateway-address --nat-gateway-id nat-12345678 --availability-zone us-east-1b --allocation-ids eipalloc-12345678
```

移除 IP 地址

```
aws ec2 disassociate-nat-gateway-address --nat-gateway-id nat-12345678 --association-ids eipassoc-12345678
```

删除区域 NAT 网关

```
aws ec2 delete-nat-gateway --nat-gateway-id nat-12345678
```

## 从可用区 NAT 网关转换为区域 NAT 网关
<a name="convert-from-zonal-to-regional-nat-gateways"></a>

**重要**  
这将重置现有的连接。建议在维护时段完成这些步骤。

您可以使用以下两种方法之一将现有的可用区 NAT 网关转换为区域 NAT 网关：

**如果使用具有新 IP 地址的区域 NAT 网关，请执行以下操作：**

1. 创建一个新的区域 NAT 网关

1. 更新路由表以指向该区域 NAT 网关

1. 删除原可用区 NAT 网关

此方法会使用新的 IP 地址，并在更新路由时重置现有连接。

**如果要在区域 NAT 网关中继续使用现有 IP 地址：**

1. 删除现有的可用区 NAT 网关以释放其 IP 地址

1. 使用释放的 IP 地址创建一个区域 NAT 网关

1. 更新路由表以指向该区域 NAT 网关

这种方法可以保留 IP 地址，但由于在转换期间会中断流量，因此需要在维护时段执行。

# NAT 网关使用案例
<a name="nat-gateway-scenarios"></a>

以下是公有和私有 NAT 网关的使用案例示例。

**Topics**
+ [从私有子网访问互联网](#public-nat-internet-access)
+ [从允许列出的 IP 地址访问您的网络](#private-nat-allowed-range)
+ [实现重叠网络之间的通信](#private-nat-overlapping-networks)

## 从私有子网访问互联网
<a name="public-nat-internet-access"></a>

您可以使用公有 NAT 网关，以启用私有子网中的实例，将出站流量发送到互联网，同时防止互联网与这些实例建立连接。

**Topics**
+ [概述](#public-nat-gateway-overview)
+ [路由](#public-nat-gateway-routing)
+ [测试公有 NAT 网关](#public-nat-gateway-testing)

### 概述
<a name="public-nat-gateway-overview"></a>

下图阐明了此使用案例。有两个可用区，每个可用区都有两个子网。每个子网的路由表都决定了流量的路由方式。在可用区 A 中，公有子网中的实例可以通过到互联网网关的路由访问互联网，而私有子网中的实例没有到互联网的路由。在可用区 B 中，公有子网包含一个 NAT 网关，私有子网中的实例可以通过到公有子网中的 NAT 网关的路由来访问互联网。私有和公有 NAT 网关都会将实例的源私有 IPv4 地址映射到私有 NAT 网关的私有 IPv4 地址，但是对于公有 NAT 网关，互联网网关随后会将公有 NAT 网关的私有 IPv4 地址映射到与 NAT 网关关联的弹性 IP 地址。将响应流量发送到实例时，无论是使用公有还是私有 NAT 网关，NAT 网关都会将地址转换回原始源 IP 地址。

![\[具有公有和私有子网、NAT 网关和互联网网关的 VPC。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/public-nat-gateway-diagram.png)


请注意，如果可用区 A 中私有子网内的实例也需要访问互联网，您可以创建从该子网到可用区 B 中 NAT 网关的路由。或者，您也可以在包含需要访问互联网的资源的每个可用区创建一个 NAT 网关来提高故障恢复能力。有关示例图，请参见 [示例：在私有子网中部署服务器并且具有 NAT 中的 VPC](vpc-example-private-subnets-nat.md)。

### 路由
<a name="public-nat-gateway-routing"></a>

以下是可用区 A 中与公有子网关联的路由表。第一个条目是本地路由；它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到互联网网关，从而使子网中的实例能够访问互联网。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 
| 0.0.0.0/0 | internet-gateway-id | 

以下是可用区 A 中与私有子网关联的路由表。该条目是本地路由，它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。此子网中的实例无法访问互联网。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 

以下是可用区 B 中与公有子网关联的路由表。第一个条目是本地路由，它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到互联网网关，从而使子网中的 NAT 网关能够访问互联网。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 
| 0.0.0.0/0 | internet-gateway-id | 

以下是可用区 B 中与私有子网关联的路由表。第一个条目是本地路由；它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到 NAT 网关。


| 目标位置 | Target | 
| --- | --- | 
| VPC CIDR | 本地 | 
| 0.0.0.0/0 | nat-gateway-id | 

有关更多信息，请参阅 [管理子网路由表](WorkWithRouteTables.md)。

### 测试公有 NAT 网关
<a name="public-nat-gateway-testing"></a>

创建 NAT 网关并更新路由表之后，您可以从私有子网中的实例对互联网 ping 一些远程地址以测试它是否可以连接到互联网。有关如何执行此操作的示例，请参阅 [测试互联网连接](#nat-gateway-testing-example)。

如果能够连接到互联网，还可以测试互联网流量是否通过 NAT 网关进行路由：
+ 跟踪来自私有子网中实例的流量的路由情况。为此，请从私有子网中的 Linux 实例运行 `traceroute` 命令。在输出中，应在一个跃点（通常是第一个跃点）中看到 NAT 网关的私有 IP 地址。
+ 从私有子网中的实例连接第三方网站或工具时，查看该网站或工具显示的源 IP 地址。源 IP 地址应是 NAT 网关的弹性 IP 地址。

如果这些测试失败，请参阅 [排查 NAT 网关的问题](nat-gateway-troubleshooting.md)。

#### 测试互联网连接
<a name="nat-gateway-testing-example"></a>

以下示例演示如何测试私有子网中的实例是否可以连接到互联网。

1. 在公有子网中启动实例（您使用此实例作为堡垒主机）。在启动向导中，确保选择一个 Amazon Linux AMI，并为实例分配公有 IP 地址。确保安全组规则允许来自本地网络的 IP 地址范围的入站 SSH 流量，以及发送到私有子网的 IP 地址范围的出站 SSH 流量（您也可以同时对入站和出站 SSH 流量使用 `0.0.0.0/0` 进行测试）。

1. 在您的私有子网中启动实例。在启动向导中，确保选择一个 Amazon Linux AMI。请勿向实例分配公有 IP 地址。应确保安全组规则允许来自在公有子网中启动的实例的私有 IP 地址的入站 SSH 流量以及所有出站 ICMP 流量。必须选择用于在公有子网中启动实例的相同密钥对。

1. 在本地计算机上配置 SSH 代理转发，并连接到公有子网中的堡垒主机。有关更多信息，请参阅 [为 Linux 或 macOS 配置 SSH 代理转发](#ssh-forwarding-linux) 或 [针对 Windows 配置 SSH 代理转发](#ssh-forwarding-windows)。

1. 在堡垒主机中，连接到私有子网中的实例，然后从私有子网中的实例测试 Internet 连接。有关更多信息，请参阅 [测试 Internet 连接](#test-internet-connection)。<a name="ssh-forwarding-linux"></a>

**为 Linux 或 macOS 配置 SSH 代理转发**

1. 在您的本地计算机上，将私有秘钥添加到身份验证代理。

   对于 Linux，请使用以下命令。

   ```
   ssh-add -c mykeypair.pem
   ```

   对于 macOS，请使用以下命令。

   ```
   ssh-add -K mykeypair.pem
   ```

1. 通过使用 `-A` 选项启用 SSH 代理转发来连接到公有子网中的实例，并使用该实例的公有地址，如以下示例所示。

   ```
   ssh -A ec2-user@54.0.0.123
   ```<a name="ssh-forwarding-windows"></a>

**针对 Windows 配置 SSH 代理转发**  
您可以使用 Windows 中提供的 OpenSSH 客户端，也可以安装您的首选 SSH 客户端（例如 PuTTY）。

------
#### [ OpenSSH ]

按照 [Getting started with OpenSSH for Windows](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse) 一文中的说明，安装适用于 Windows 的 OpenSSH。然后将密钥添加到身份验证代理。有关更多信息，请参阅 [Key-based authentication in OpenSSH for Windows](https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement)。

------
#### [ PuTTY ]

1. 如果尚未安装 Pageant，请从 [PuTTY 下载页面](https://www.chiark.greenend.org.uk/~sgtatham/putty/)下载并安装 Pageant。

1. 将您的私有密钥转换为 .ppk 格式。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[使用 PuTTYgen 转换私有密钥](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-from-windows.html#putty-private-key)。

1. 启动 Pageant，右键单击任务栏上的 Pageant 图标（可能已隐藏），并选择 **Add Key**（添加）。选择您创建的 .ppk 文件，输入密码（如果需要），然后选择 **Open**（打开）。

1. 启动 PuTTY 会话，并使用公有 IP 地址连接到公有子网中的实例。有关更多信息，请参阅[使用 PuTTY 连接到 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-from-windows.html)。在 **Auth** 类别中，确保选中 **Allow agent forwarding**（允许代理转发）选项，并将 **Private key file for authentication**（用于验证的私有密钥文件）框留空。

------<a name="test-internet-connection"></a>

**测试 Internet 连接**

1. 从公有子网中的实例，使用私有 IP 地址连接到私有子网中的实例，如以下示例所示。

   ```
   ssh ec2-user@10.0.1.123
   ```

1. 从私有实例，通过对启用了 ICMP 的网站运行 `ping` 命令来测试是否可以连接到 Internet。

   ```
   ping ietf.org
   ```

   ```
   PING ietf.org (4.31.198.44) 56(84) bytes of data.
   64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=47 time=86.0 ms
   64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=47 time=75.6 ms
   ...
   ```

   按键盘上的 **Ctrl\$1C** 以取消 `ping` 命令。如果 `ping` 命令失败，请参阅 [实例无法访问 Internet](nat-gateway-troubleshooting.md#nat-gateway-troubleshooting-no-internet-connection)。

1. （可选）如果您不再需要实例，请将其终止。有关更多信息，请参阅《Amazon EC2 用户指南》中的 [终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)**。

## 从允许列出的 IP 地址访问您的网络
<a name="private-nat-allowed-range"></a>

您可以通过私有 NAT 网关，使用允许列出的地址池来实现 VPC 与本地网络的通信。您可以通过私有 NAT 网关（具有来自允许列出的 IP 地址范围的 IP 地址）来路由发往本地网络的子网中的流量，而不是为每个实例分配一个来自允许列出的 IP 地址范围的单独 IP 地址。

**Topics**
+ [概述](#private-nat-allowed-range-overview)
+ [资源](#private-nat-allowed-range-resources)
+ [路由](#private-nat-allowed-range-routing)

### 概述
<a name="private-nat-allowed-range-overview"></a>

下图显示了实例如何通过 Site-to-Site VPN 访问本地资源。来自实例的流量通过 VPN 连接路由到虚拟私有网关，到达客户网关，然后到达本地网络中的目标。但是，假设目标仅允许来自特定 IP 地址范围（例如 100.64.1.0/28）的流量。这可防止来自这些实例的流量到达本地网络。

![\[使用 Site-to-Site VPN 连接访问本地网络。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/allowed-range.png)


下表展示了此场景配置的主要组成部分。VPC 具有原始 IP 地址范围和允许的 IP 地址范围。VPC 有一个来自允许的 IP 地址范围的子网和一个私有 NAT 网关。来自实例的发往本地网络的流量会先发送到 NAT 网关，然后再路由到 VPN 连接。本地网络接收来自具有 NAT 网关源 IP 地址的实例的流量，该地址来自允许的 IP 地址范围。

![\[使用私有 NAT 网关路由的 VPC 子网流量\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/private-nat-allowed-range.png)


### 资源
<a name="private-nat-allowed-range-resources"></a>

按如下方式创建或更新资源：
+ 将允许的 IP 地址范围与 VPC 关联。
+ 在 VPC 中从允许的 IP 地址范围创建子网。
+ 在新子网中创建私有 NAT 网关。
+ 使用实例更新子网的路由表，以将发往本地网络的流量发送到 NAT 网关。将路由添加到具有私有 NAT 网关的子网的路由表，该网关会将发往本地网络的流量发送到虚拟私有网关。

### 路由
<a name="private-nat-allowed-range-routing"></a>

以下是与第一个子网关联的路由表。每个 VPC CIDR 都有一个本地路由。本地路由使子网中的资源能够使用私有 IP 地址与 VPC 中的其他资源进行通信。第三个条目会将发往本地网络的流量发送到私有 NAT 网关。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.1.0/24 | 本地 | 
| 192.168.0.0/16 | nat-gateway-id | 

以下是与第二个子网关联的路由表。每个 VPC CIDR 都有一个本地路由。本地路由使子网中的资源能够使用私有 IP 地址与 VPC 中的其他资源进行通信。第三个条目会将发往本地网络的流量发送到虚拟私有网关。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.1.0/24 | 本地 | 
| 192.168.0.0/16 | vgw-id | 

## 实现重叠网络之间的通信
<a name="private-nat-overlapping-networks"></a>

即使网络具有重叠的 CIDR 范围，也可以使用私有 NAT 网关来启用网络之间的通信。例如，假设 VPC A 中的实例需要访问 VPC B 中的实例提供的服务。

![\[具有重叠 CIDR 范围的两个 VPC。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/overlapping-networks.png)


**Topics**
+ [概述](#private-nat-overlapping-networks-overview)
+ [资源](#private-nat-overlapping-networks-resources)
+ [路由](#private-nat-overlapping-networks-routing)

### 概述
<a name="private-nat-overlapping-networks-overview"></a>

下表展示了此场景配置的主要组成部分。首先，您的 IP 管理团队需要确定哪些地址范围可以重叠（不可路由的地址范围），哪些地址范围不能重叠（可路由的地址范围）。IP 管理团队根据请求将可路由地址范围池中的地址范围分配给项目。

每个 VPC 都有其原始 IP 地址范围（不可路由）以及由 IP 管理团队分配给它的可路由 IP 地址范围。VPC A 有一个来自可路由范围的子网和一个私有 NAT 网关。私有 NAT 网关从其子网获取其 IP 地址。VPC B 有一个来自可路由范围的子网和一个应用程序负载均衡器。应用程序负载均衡器从其子网获取 IP 地址。

来自 VPC A 的不可路由子网中的实例的流量（将发往 VPC B 的不可路由子网中的实例）通过私有 NAT 网关发送，然后路由到中转网关。中转网关将流量发送到应用程序负载均衡器，后者将流量路由到 VPC B 的不可路由子网中的其中一个目标实例。从中转网关到应用程序负载均衡器的流量具有私有 NAT 网关的源 IP 地址。因此，来自负载均衡器的响应流量使用私有 NAT 网关的地址作为其目的。响应流量将发送到中转网关，然后路由到私有 NAT 网关，该网关会将目标转换为 VPC A 的不可路由子网中的实例。

![\[具有私有 NAT 网关和中转网关的 VPC，用于实现具有重叠 CIDR 的 VPC 间通信\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/private-nat-overlapping-networks.png)


### 资源
<a name="private-nat-overlapping-networks-resources"></a>

按如下方式创建或更新资源：
+ 将分配的可路由 IP 地址范围与各自的 VPC 关联。
+ 在 VPC A 中从可路由的 IP 地址范围创建子网，然后在此新子网中创建私有 NAT 网关。
+ 在 VPC B 中从可路由的 IP 地址范围创建子网，然后在此新子网中创建应用程序负载均衡器。将不可路由子网中的实例注册到负载均衡器的目标组。
+ 创建中转网关以连接 VPC。确保禁用路由传播。将每个 VPC 连接到中转网关时，请使用 VPC 的可路由地址范围。
+ 更新 VPC A 中不可路由子网的路由表，以将发往 VPC B 的可路由地址范围的所有流量发送到私有 NAT 网关。更新 VPC A 中可路由子网的路由表，以将发往 VPC B 的可路由地址范围的所有流量发送到中转网关。
+ 更新 VPC B 中可路由子网的路由表，以将发往 VPC A 的可路由地址范围的所有流量发送到中转网关。

### 路由
<a name="private-nat-overlapping-networks-routing"></a>

以下是 VPC A 中不可路由子网的路由表。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.1.0/24 | 本地 | 
| 100.64.2.0/24 | nat-gateway-id | 

以下是 VPC A 中可路由子网的路由表。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.1.0/24 | 本地 | 
| 100.64.2.0/24 | transit-gateway-id | 

以下是 VPC B 中不可路由子网的路由表。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.2.0/24 | 本地 | 

以下是 VPC B 中可路由子网的路由表。


| 目标位置 | 目标 | 
| --- | --- | 
| 10.0.0.0/16 | 本地 | 
| 100.64.2.0/24 | 本地 | 
| 100.64.1.0/24 | transit-gateway-id | 

以下是中转网关路由表。


| CIDR | 附件 | 路由类型 | 
| --- | --- | --- | 
| 100.64.1.0/24 | VPC A 的连接 | 静态 | 
| 100.64.2.0/24 | VPC B 的连接 | 静态 | 

# DNS64 和 NAT64
<a name="nat-gateway-nat64-dns64"></a>

NAT 网关支持从 IPv6 到 IPv4 的网络地址转换，这通常称为 NAT64。NAT64 可以帮助您的 IPv6 AWS 资源与同一 VPC 或其他 VPC、本地网络或互联网中的 IPv4 资源进行通信。您可以在 Amazon Route 53 Resolver 上结合使用 NAT64 和 DNS64，也可以使用自己的 DNS64 服务器。

**Topics**
+ [什么是 DNS64？](#nat-gateway-dns64-what-is)
+ [什么是 NAT64？](#nat-gateway-nat64-what-is)
+ [配置 DNS64 和 NAT64](#nat-gateway-nat64-dns64-walkthrough)

## 什么是 DNS64？
<a name="nat-gateway-dns64-what-is"></a>

在 VPC 中运行的仅 IPv6 工作负载只能发送和接收 IPv6 网络数据包。如果没有 DNS64，则对仅 IPv4 服务的 DNS 查询将生成 IPv4 目标地址作为响应，而且仅 IPv6 服务无法与其进行通信。为了弥合这一通信缺口，您可以为子网启用 DNS64，它适用于该子网中的所有 AWS 资源。使用 DNS64，Amazon Route 53 Resolver 将查找所查询的服务的 DNS 记录，然后执行以下操作之一：
+ 如果记录包含 IPv6 地址，则它将返回原始记录并建立连接，而不会通过 IPv6 进行任何转换。
+ 如果 DNS 记录中没有与目标关联的 IPv6 地址，则 Route 53 Resolver 会在记录中的 IPv4 地址前面添加 RFC6052 (`64:ff9b::/96`) 中定义的已知 `/96` 前缀，以便合成一个地址。仅 IPv6 服务会将网络数据包发送到合成的 IPv6 地址。然后，您需要通过 NAT 网关路由此流量，该网关将对流量执行所需的转换，以允许子网中的 IPv6 服务访问该子网外部的 IPv4 服务。

您可以通过 AWS CLI 使用 [modify-subnet-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-subnet-attribute.html) 来启用或禁用子网上的 DNS64，也可以使用 VPC 控制台执行此操作，方法是选择子网，然后选择 **Actions**（操作）> **Edit subnet settings**（编辑子网设置）。

## 什么是 NAT64？
<a name="nat-gateway-nat64-what-is"></a>

通过使用 NAT64，Amazon VPC 中的仅 IPv6 服务能够与同一 VPC（不同子网中）或已连接的 VPC、本地网络或互联网中的仅 IPv4 服务进行通信。

NAT64 将在现有的 NAT 网关或您创建的任何新 NAT 网关上自动可用。您无法启用或禁用此功能。NAT 网关所在的子网不需要是双堆栈子网即可使 NAT64 正常工作。

在您启用 DNS64 后，如果仅使用 IPv6 的服务通过 NAT 网关将网络数据包发送到合成的 IPv6 地址后，将发生以下情况：
+ NAT 网关可通过 `64:ff9b::/96` 前缀识别出原始目标是 IPv4，并且会将 IPv6 数据包转换为 IPv4，方法是：
  + 将源 IPv6 替换为自己的私有 IP，该 IP 将被互联网网关转换为弹性 IP 地址。
  + 通过截断 `64:ff9b::/96` 前缀将目标 IPv6 转换为 IPv4。
+ NAT 网关通过互联网网关、虚拟私有网关或转换网关将转换后的 IPv4 数据包发送到目标，然后启动连接。
+ 仅 IPv4 主机将发回 IPv4 响应数据包。建立连接后，NAT 网关将接受来自外部主机的响应 IPv4 数据包。
+ 响应 IPv4 数据包的目标是 NAT 网关，该网关将接收数据包，并通过将其 IP（目标 IP）替换为主机的 IPv6 地址并将 `64:ff9b::/96` 添加回源 IPv4 地址来取消 NAT。然后，数据包将按照本地路由流向主机。

通过这种方式，NAT 网关使子网中仅使用IPv6 的工作负载能够与子网外部的仅使用 IPv4 的服务进行通信。

## 配置 DNS64 和 NAT64
<a name="nat-gateway-nat64-dns64-walkthrough"></a>

按照本节中的步骤配置 DNS64 和 NAT64，以便与仅 IPv4 服务进行通信。

**Topics**
+ [通过 AWS CLI 与互联网上的仅 IPv4 服务进行通信](#nat-gateway-nat64-dns64-walkthrough-internet)
+ [在您的本地环境中启用与仅 IPv4 服务的通信](#nat-gateway-nat64-dns64-walkthrough-on-prem)

### 通过 AWS CLI 与互联网上的仅 IPv4 服务进行通信
<a name="nat-gateway-nat64-dns64-walkthrough-internet"></a>

如果您有一个包含仅 IPv6 工作负载的子网，它需要与其外部的仅 IPv4 服务进行通信，本示例将向您展示如何让这些仅 IPv6 服务与互联网上的仅 IPv4 服务进行通信。

您应该首先在公有子网（与包含仅 IPv6 工作负载的子网分开）中配置 NAT 网关。例如，包含 NAT 网关的子网应该具有指向互联网网关的 `0.0.0.0/0` 路由。

完成以下步骤以使这些仅 IPv6 的服务能够与互联网上的仅 IPv4 服务建立连接：

1. 将以下三个路由添加到包含仅 IPv6 工作负载的子网的路由表中：
   + 指向 NAT 网关的 IPv4 路由（如果有）。
   + 指向 NAT 网关的 `64:ff9b::/96` 路由。这将允许通过 NAT 网关路由发往仅 IPv4 服务的仅 IPv6 的工作负载中的流量。
   + 指向仅出口互联网网关（或互联网网关）的 IPv6 `::/0` 路由。

   请注意，将 `::/0` 指向互联网网关将允许外部 IPv6 主机（VPC 外）通过 IPv6 发起连接。

   

   ```
   aws ec2 create-route --route-table-id rtb-34056078 --destination-cidr-block
   0.0.0.0/0 --nat-gateway-id nat-05dba92075d71c408
   ```

   

   ```
   aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block
   64:ff9b::/96 --nat-gateway-id nat-05dba92075d71c408
   ```

   

   ```
   aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block
   ::/0 --egress-only-internet-gateway-id eigw-c0a643a9
   ```

1. 在包含仅 IPv6 工作负载的子网中启用 DNS64 功能。

   ```
   aws ec2 modify-subnet-attribute --subnet-id subnet-1a2b3c4d --enable-dns64
   ```

现在，私有子网中的资源可以通过互联网与 IPv4 和 IPv6 服务建立有状态的连接。正确配置安全组和 NACL，以允许至 `64:ff9b::/96` 流量的出口和入口流量。

### 在您的本地环境中启用与仅 IPv4 服务的通信
<a name="nat-gateway-nat64-dns64-walkthrough-on-prem"></a>

Amazon Route 53 Resolver 使您能够将 DNS 查询从 VPC 转发到本地网络，反之亦然。您可以通过以下步骤实现上述目的：
+ 您可以在 VPC 中创建一个 Route 53 Resolver 出站端点，并为其分配您希望 Route 53 Resolver 通过其转发查询的 IPv4 地址。对于本地 DNS 解析程序，这些是 DNS 查询源自的 IP 地址，因此，应为 IPv4 地址。
+ 您可以创建一个或多个规则，用于指定您希望 Route 53 Resolver 转发到本地解析程序的 DNS 查询的域名。此外，您还可以指定本地解析程序的 IPv4 地址。
+ 既然您已设置 Route 53 Resolver 出站端点，那么，您需要在包含仅 IPv6 工作负载的子网上启用 DNS64，然后通过 NAT 网关路由发往本地网络的任何数据。

DNS64 如何适用于本地网络中的仅 IPv4 目标：

1. 将 IPv4 地址分配给 VPC 中的 Route 53 Resolver 出站端点。

1. 来自 IPv6 服务的 DNS 查询通过 IPv6 转至 Route 53 Resolver。Route 53 Resolver 将根据转发规则匹配查询，并获取本地解析程序的 IPv4 地址。

1. Route 53 Resolver 会将查询数据包从 IPv6 转换为 IPv4，并将其转发到出站端点。端点的每个 IP 地址代表一个 ENI，用于将请求转发到 DNS 解析程序的本地 IPv4 地址。

1. 本地解析程序通过 IPv4 将响应数据包从出站端点返回 Route 53 Resolver。

1. 假设查询是来自支持 DNS64 的子网进，则 Route 53 Resolver 将会执行以下两项操作：

   1. 检查响应数据包的内容。如果记录中有 IPv6 地址，则它会将保持内容原样，但如果它只包含 IPv4 记录。它还会通过向 IPv4 地址追加 `64:ff9b::/96` 来合成 IPv6 记录。

   1. 重新打包内容，并通过 IPv6 将其发送到 VPC 中的服务。

# 检查来自 NAT 网关的流量
<a name="nat-gateway-inspect-traffic"></a>

您可以将 Network Firewall 代理挂载到 NAT 网关，来检查和筛选 NAT 网关上的流量。此安全控制有助您防止数据泄露到可信边界之外，以及阻止任何不需要的入站响应。

## 工作原理
<a name="nat-gateway-proxy-how-it-works"></a>

创建 Network Firewall 代理时，您需要选择要挂载该代理的现有 NAT 网关。创建该代理后：
+ 该代理将具有一个完全限定域名，并且您需要将应用程序设置为将 http 和 https 连接请求发送到该代理。该代理会首先根据客户输入的规则筛选连接请求中的域名。如果客户允许，该代理随后会进行 DNS 查询以获取该域的 IP 地址。然后，该代理将与最终目标建立 TCP 连接。代理随后会根据是否启用了 TLS 解密，按 IP 地址和标头属性筛选 TLS 连接，并且仅在策略允许 IP 和标头属性（包括标头操作和 url 路径）的情况下，才与目标建立 TLS 连接。
+ 设备会检查和筛选流量。
+ 允许的流量会继续到达目标（在互联网、本地环境或其他 VPC 中）。

## 挂载设备
<a name="nat-gateway-attaching-appliances"></a>

设备通过 AWS Network Firewall 挂载到 NAT 网关。有关创建和挂载设备的步骤，请参阅 [Network Firewall 代理开发人员指南](https://docs.aws.amazon.com/network-firewall/latest/developerguide/network-firewall-proxy-developer-guide.html)。

## 查看挂载的设备
<a name="nat-gateway-viewing-attached-appliances"></a>

要查看挂载到 NAT 网关的设备，请使用 [describe-nat-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-nat-gateways.html) 命令：

```
aws ec2 describe-nat-gateways --nat-gateway-ids nat-1234567890abcdef0
```

响应将包括 `AttachedAppliances` 字段，其中会显示下列信息：
+ **Type**：设备类型（例如 `network-firewall-proxy`）
+ **ApplianceArn**：所挂载设备的 ARN
+ **AttachmentState**：当前挂载状态（`attached`、`detaching`、`detached`、`attach_failed`、`detach_failed`）
+ **ModificationState**：当前修改状态（`modifying`、`completed`、`failed`）
+ **VpcEndpointId**：用于将流量从应用程序 VPC 路由到该代理以进行检查和筛选的 VPC 端点 ID
+ **FailureCode**：设备挂载或修改操作失败时的故障代码
+ **FailureMessage**：解释设备挂载或修改操作失败时所发生故障的解释性消息

# 使用 Amazon CloudWatch 监控 NAT 网关
<a name="vpc-nat-gateway-cloudwatch"></a>

您可以使用 CloudWatch 监控 NAT 网关，该工具可从 NAT 网关中收集信息并创建可读的、近乎实时的指标。您可以使用该信息监控 NAT 网关并进行问题排查。这些指标让您可以了解 NAT 网关的运行状况和性能，从而能够密切监视网关的运行状况并快速排查任何问题。

CloudWatch 收集的 NAT 网关指标包含数据点，例如已处理的字节、数据包计数、连接计数和错误率。这使您能够全面了解流经自己 NAT 网关的流量，识别任何异常或瓶颈。CloudWatch 以 1 分钟为间隔传输此指标数据，可提供精确到分钟的 NAT 网关行为精细视图。

此外，CloudWatch 会将此 NAT 网关指标数据保留 15 个月，便于您分析一段时间内的趋势和模式。您可以使用这些历史数据来规划容量、优化性能以及了解 NAT 网关使用情况的长期演变。

要利用这些强大的监控功能，您可以针对自身特定需求创建自定义 CloudWatch 控制面板和警报。例如，可以设置警报，在 NAT 网关的出站数据传输超过特定阈值时发出通知，便于您主动解决潜在的带宽限制问题。

有关定价的更多信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

**Topics**
+ [NAT 网关指标与维度](metrics-dimensions-nat-gateway.md)
+ [查看 NAT 网关 CloudWatch 指标](viewing-metrics.md)
+ [创建 CloudWatch 警报以监控 NAT 指标](creating-alarms-nat-gateway.md)

# NAT 网关指标与维度
<a name="metrics-dimensions-nat-gateway"></a>

以下指标可用于 NAT 网关。描述列包括每个指标的描述以及[单位](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Unit)和[统计数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html)。


| 指标 | 描述 | 
| --- | --- | 
| ActiveConnectionCount |  通过 NAT 网关激活的并发 TCP 连接的总数。 零值表示未通过 NAT 网关激活任何连接。 单位：计数 Statistics：最有用的统计工具是 `Max`。  | 
| BytesInFromDestination |  NAT 网关从目标接收的字节的数量。 如果 `BytesOutToSource` 的值小于 `BytesInFromDestination` 的值，则表示 NAT 网关处理期间可能存在数据丢失，或存在被 NAT 网关主动阻止的流量。 单位：字节 Statistics：最有用的统计工具是 `Sum`。  | 
| BytesInFromSource |  NAT 网关从 VPC 中的客户端接收的字节的数量。 如果 `BytesOutToDestination` 的值小于 `BytesInFromSource` 的值，则 NAT 网关处理期间可能有数据丢失。 单位：字节 Statistics：最有用的统计工具是 `Sum`。  | 
| BytesOutToDestination |  通过 NAT 网关发送到目标的字节的数量。 大于零的值指示有流量从 NAT 网关后面的客户端流向 Internet。如果 `BytesOutToDestination` 的值小于 `BytesInFromSource` 的值，则 NAT 网关处理期间可能有数据丢失。 单位：字节 Statistics：最有用的统计工具是 `Sum`。  | 
| BytesOutToSource |  通过 NAT 网关发送到 VPC 中客户端的字节的数量。 大于零的值指示有流量从 Internet 流向 NAT 网关后面的客户端。如果 `BytesOutToSource` 的值小于 `BytesInFromDestination` 的值，则表示 NAT 网关处理期间可能存在数据丢失，或存在被 NAT 网关主动阻止的流量。 单位：字节 Statistics：最有用的统计工具是 `Sum`。  | 
| ConnectionAttemptCount |  通过 NAT 网关尝试的连接次数。这仅包括初始 SYN。在某些情况下，由于 SYN 重新传输，`ConnectionAttemptCount` 可能低于 `ConnectionEstablishedCount`。 如果 `ConnectionEstablishedCount` 的值小于 `ConnectionAttemptCount` 的值，则表示 NAT 网关后面的客户端已尝试为无响应的连接建立新连接。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| ConnectionEstablishedCount |  通过 NAT 网关建立的连接的数量。这包括 SYN 和 SYN 重新传输。 如果 `ConnectionEstablishedCount` 的值小于 `ConnectionAttemptCount` 的值，则表示 NAT 网关后面的客户端已尝试为无响应的连接建立新连接。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| ErrorPortAllocation |  NAT 网关无法分配源端口的次数。 大于零的值表示通过 NAT 网关打开的并发连接太多。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| IdleTimeoutCount |  从活动状态转换为空闲状态的连接的数量。如果活动连接未正常关闭并且前 350 秒内无活动，活动连接将转换为空闲状态。 大于零的值指示存在已变为空闲状态的连接。如果 `IdleTimeoutCount` 的值增加，则可能指示 NAT 网关后面的客户端正在重复使用过期连接。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PacketsDropCount |  NAT 网关丢弃的数据包的数量。  要计算丢弃的数据包数量占数据包总流量的百分比，请使用以下公式：`PacketsDropCount/(PacketsInFromSource+PacketsInFromDestination)*100`。如果该值超过 NAT 网关上总流量的 0.01%，则 Amazon VPC 服务可能存在问题。使用 [AWS 服务运行状况控制面板](https://status.aws.amazon.com/)来确定可能导致 NAT 网关丢包的服务问题。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PacketsInFromDestination |  NAT 网关从目标接收的数据包的数量。 如果 `PacketsOutToSource` 的值小于 `PacketsInFromDestination` 的值，则表示 NAT 网关处理期间可能存在数据丢失，或存在被 NAT 网关主动阻止的流量。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PacketsInFromSource |  NAT 网关从 VPC 中的客户端接收的数据包的数量。 如果 `PacketsOutToDestination` 的值小于 `PacketsInFromSource` 的值，则 NAT 网关处理期间可能有数据丢失。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PacketsOutToDestination |  通过 NAT 网关发送到目标的数据包的数量。 大于零的值指示有流量从 NAT 网关后面的客户端流向 Internet。如果 `PacketsOutToDestination` 的值小于 `PacketsInFromSource` 的值，则 NAT 网关处理期间可能有数据丢失。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PacketsOutToSource |  通过 NAT 网关发送到 VPC 中客户端的数据包的数量。 大于零的值指示有流量从 Internet 流向 NAT 网关后面的客户端。如果 `PacketsOutToSource` 的值小于 `PacketsInFromDestination` 的值，则表示 NAT 网关处理期间可能存在数据丢失，或存在被 NAT 网关主动阻止的流量。 单位：计数 Statistics：最有用的统计工具是 `Sum`。  | 
| PeakBytesPerSecond |  该指标报告给定分钟内每秒的 10 秒字节最高平均值。 单位：计数 Statistics：最有用的统计工具是 `Maximum`。  | 
| PeakPacketsPerSecond |  此指标每 10 秒计算一次平均数据包速率（每秒处理的数据包），持续 60 秒，然后报告六个速率中的最大值（最高平均数据包速率）。 单位：计数 Statistics：最有用的统计工具是 `Maximum`。  | 

要筛选指标数据，请使用以下维度。


| 维度 | 描述 | 
| --- | --- | 
| NatGatewayId | 按 NAT 网关 ID 筛选指标数据。 | 

# 查看 NAT 网关 CloudWatch 指标
<a name="viewing-metrics"></a>

NAT 网关指标按 1 分钟的时间间隔发送到 CloudWatch。指标的分组首先依据服务命名空间，然后依据每个命名空间内可能的维度组合。您可以按照以下方法查看 NAT 网关的各项指标。

**使用 CloudWatch 控制台查看指标**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Metrics（指标）**、**All metrics（所有指标）**。

1. 选择 **NatGateway** 指标命名空间。

1. 选择指标维度。

**使用 AWS CLI 查看指标**  
在命令提示窗口中，使用以下命令可列出可用于 NAT 网关服务的指标。

```
aws cloudwatch list-metrics --namespace "AWS/NATGateway"
```

# 创建 CloudWatch 警报以监控 NAT 指标
<a name="creating-alarms-nat-gateway"></a>

您可以创建在警报改变状态时发送 Amazon SNS 消息的 CloudWatch 警报。警报会监控您指定的时间段内的某个指标。它将根据指标值在多个时间段内相对于给定阈值的情况向 Amazon SNS 主题发送通知。

例如，您可以创建警报来监控进入或离开 NAT 网关的流量。以下警报监控从您的 VPC 中的客户端通过 NAT 网关传到 Internet 的出站流量。如果在 15 分钟的时间段内字节数达到 500 万阈值，它将发送通知。

**创建通过 NAT 网关的出站流量的警报**

1. 访问 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)，打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Alarms（警报）**和 **All alarms（所有警报）**。

1. 选择**创建警报**。

1. 选择**选择指标**。

1. 选择 **NatGateway** 指标命名空间，然后选择指标维度。访问指标后，请选中 NAT 网关 **BytesOutToDestination** 指标旁边的复选框，然后选择 **Select metric（选择指标）**。

1. 按如下所示配置警报，然后选择 **Next**（下一步）：
   + 对于 **Statistic（统计数据）**，选择 **Sum（总计）**。
   + 对于 **Period（周期）**，选择 **15 minutes（15 分钟）**。
   + 对于 **Whenever（每当）**，选择 **Greater/Equal（大于/等于，>=）**，然后输入 `5000000` 作为阈值。

1. 对于 **Notification（通知）**，选择现有的 SNS 主题，或选择 **Create new topic（新建主题）**创建一个新主题。选择 **Next**（下一步）。

1. 输入警报的名称和描述，然后选择 **Next（下一步）**。

1. 配置完警报后，选择 **Create alarm（创建警报）**。

再给一个示例，您可以创建一个警报来监控端口分配错误，并且在该值在三个连续 5 分钟的时间段内大于零（0）时发送通知。

**创建警报以监控端口分配错误**

1. 访问 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)，打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Alarms（警报）**和 **All alarms（所有警报）**。

1. 选择**创建警报**。

1. 选择**选择指标**。

1. 选择 **NatGateway** 指标命名空间，然后选择指标维度。访问指标后，请选中 NAT 网关 **ErrorPortAllocation** 指标旁边的复选框，然后选择 **Select metric（选择指标）**。

1. 按如下所示配置警报，然后选择 **Next**（下一步）：
   + 对于 **Statistic（统计数据）**，选择 **Maximum（最大）**。
   + 对于 **Period（周期）**，选择 **5 minutes（5 分钟）**。
   + 对于 **Whenever（每当）**，选择 **Greater（大于）**，然后输入 0 作为阈值。
   + 对于 **Additional configuration（其他配置）**、**Datapoints to alarm（警报的数据点数）**，输入 3。

1. 对于 **Notification（通知）**，选择现有的 SNS 主题，或选择 **Create new topic（新建主题）**创建一个新主题。选择 **Next**（下一步）。

1. 输入警报的名称和描述，然后选择 **Next**（下一步）。

1. 配置完警报后，选择 **Create alarm（创建警报）**。

有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[使用 Amazon CloudWatch 告警](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

# 排查 NAT 网关的问题
<a name="nat-gateway-troubleshooting"></a>

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

**Topics**
+ [NAT 网关创建失败](#nat-gateway-troubleshooting-failed)
+ [NAT 网关配额](#nat-gateway-troubleshooting-quota)
+ [弹性 IP 地址配额](#nat-gateway-troubleshooting-limits)
+ [不支持可用区](#nat-gateway-troubleshooting-unsupported-az)
+ [NAT 网关不再可见](#nat-gateway-troubleshooting-gateway-removed)
+ [NAT 网关不响应 Ping 命令](#nat-gateway-troubleshooting-ping)
+ [实例无法访问 Internet](#nat-gateway-troubleshooting-no-internet-connection)
+ [到目标的 TCP 连接失败](#nat-gateway-troubleshooting-tcp-issues)
+ [追踪路由输出未显示 NAT 网关私有 IP 地址](#nat-gateway-troubleshooting-traceroute)
+ [Internet 连接在 350 秒后中断](#nat-gateway-troubleshooting-timeout)
+ [无法建立 IPsec 连接](#nat-gateway-troubleshooting-ipsec)
+ [无法发起更多连接](#nat-gateway-troubleshooting-simultaneous-connections)

## NAT 网关创建失败
<a name="nat-gateway-troubleshooting-failed"></a>

**问题**  
您创建一个 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。有关更多信息，请参阅 [向子网添加互联网访问权限](working-with-igw.md)。 | 
| 弹性 IP 地址 eipalloc-xxxxxxxx 已关联 | 指定的弹性 IP 地址已与其他资源关联，无法与 NAT 网关相关联。 | 检查哪个资源与弹性 IP 地址相关联。前往 Amazon VPC 控制台中的 Elastic IPs (弹性 IP) 页面，并查看为实例 ID 或网络接口 ID 指定的值。如果该资源不需要该弹性 IP 地址，则可以解除两者的关联。或者，也可以向您的账户分配新的弹性 IP 地址。有关更多信息，请参阅 [开始使用弹性 IP 地址](WorkWithEIPs.md)。 | 

## NAT 网关配额
<a name="nat-gateway-troubleshooting-quota"></a>

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

```
Performing this operation would exceed the limit of 5 NAT gateways
```

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

**解决方案**

如果您已达到此 NAT 网关在账户中的配额，则可以执行以下操作之一：
+ 使用 Service Quotas 控制台请求增加[每个可用区域的 NAT 网关配额](https://console.aws.amazon.com/servicequotas/home/services/vpc/quotas/L-FE5A380F)。
+ 检查 NAT 网关的状态。`Pending`、`Available` 或 `Deleting` 状态的网关就占用限额。如果您最近删除了 NAT 网关，请等待几分钟，以便状态从 `Deleting` 变为 `Deleted`。然后尝试新建一个 NAT 网关。
+ 如果您在特定可用区中不需要 NAT 网关，请尝试在未达到配额的可用区中创建 NAT 网关。

有关更多信息，请参阅 [Amazon VPC 配额](amazon-vpc-limits.md)。

## 弹性 IP 地址配额
<a name="nat-gateway-troubleshooting-limits"></a>

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

```
The maximum number of addresses has been reached.
```

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

**解决方案**  
如果您的弹性 IP 地址数已达到配额，则可以取消弹性 IP 地址与其他资源的关联，或者，您可以使用 Service Quotas 控制台请求增加[弹性 IP 配额](https://console.aws.amazon.com/servicequotas/home/services/ec2/quotas/L-0263D0A3)。

## 不支持可用区
<a name="nat-gateway-troubleshooting-unsupported-az"></a>

**问题**  
您在尝试创建 NAT 网关时收到以下错误：`NotAvailableInZone`

**原因**  
您可能会尝试在受约束的可用区（即我们的扩展能力受约束的区域）中创建 NAT 网关。

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

## NAT 网关不再可见
<a name="nat-gateway-troubleshooting-gateway-removed"></a>

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

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

**解决方案**  
查看 [NAT 网关创建失败](#nat-gateway-troubleshooting-failed) 中的信息，然后尝试创建新 NAT 网关。

## NAT 网关不响应 Ping 命令
<a name="nat-gateway-troubleshooting-ping"></a>

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

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

**解决方案**  
要测试 NAT 网关是否正常运行，请参阅 [测试公有 NAT 网关](nat-gateway-scenarios.md#public-nat-gateway-testing)。

## 实例无法访问 Internet
<a name="nat-gateway-troubleshooting-no-internet-connection"></a>

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

**原因**  
出现此问题的原因可能是以下原因之一：
+ NAT 网关尚未准备好提供流量。
+ 您的路由表未得到正确配置。
+ 您的安全组或网络 ACL 阻止入站或出站流量。
+ 您使用的是不受支持的协议。

**解决方案**  
检查以下信息：
+ 检查 NAT 网关是否处于 `Available` 状态。在 Amazon VPC 控制台中，转到 **NAT 网关**页面，然后在详细信息窗格中查看状态信息。如果 NAT 网关处于失败状态，则表示在创建它时可能发生了错误。有关更多信息，请参阅 [NAT 网关创建失败](#nat-gateway-troubleshooting-failed)。
+ 检查您是否正确配置了路由表：
  + NAT 网关所处的公有子网必须具有将 Internet 流量路由到 Internet 网关的路由表。
  + 实例所处的私有子网必须具有将 Internet 流量路由到 NAT 网关的路由表。
  + 检查是否没有其他路由表条目将全部或部分 Internet 流量路由到其他设备而不是 NAT 网关。
+ 确保私有实例的安全组规则允许出站 Internet 流量。要使 `ping` 命令正常运行，这些规则还必须允许出站 ICMP 流量。

   NAT 网关本身允许所有出站流量以及响应出站请求时收到的流量 (因此它是有状态的)。
+ 确保与私有子网和公有子网关联的网络 ACL 没有阻止入站或出站 Internet 流量的规则。要使 `ping` 命令正常运行，这些规则还必须允许入站和出站 ICMP 流量。

  可以启用流日志以帮助诊断由于网络 ACL 或安全组规则而中断的连接。有关更多信息，请参阅 [使用 VPC 流日志记录 IP 流量](flow-logs.md)。
+ 如果使用 `ping` 命令，请确保在对启用了 ICMP 的主机执行 ping 操作。如果未启用 ICMP，您不会收到应答数据包。要对此进行测试，请从您自己计算机上的命令行终端执行相同的 `ping` 命令。
+ 检查实例是否能够对其他资源成功执行 ping 操作，例如私有子网中的其他实例 (假设安全组规则允许这样做)。
+ 确保您的连接仅使用 TCP、UDP 或 ICMP 协议。

## 到目标的 TCP 连接失败
<a name="nat-gateway-troubleshooting-tcp-issues"></a>

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

**原因**  
出现此问题的原因可能是以下原因之一：
+ 目标终端节点正在使用分段 TCP 数据包进行响应。NAT 网关不支持 TCP 或 ICMP 的 IP 碎片。有关更多信息，请参阅 [比较 NAT 网关和 NAT 实例](vpc-nat-comparison.md)。
+ 远程服务器上启用了 `tcp_tw_recycle` 选项，当 NAT 设备后有多个连接时，启用该选项会导致问题。

**解决方案**  
通过执行以下操作，验证您尝试连接的终端节点是否正在使用分段 TCP 数据包进行响应：

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

1. 使用 `tcpdump` 实用工具验证终端节点是否将发送分段数据包。
**重要**  
您必须使用公有子网中的实例来执行这些检查。您不能使用原始连接失败的实例，或者 NAT 网关或 NAT 实例后面的私有子网中的实例。

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

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

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

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

   ```
   cat /proc/sys/net/ipv4/tcp_tw_recycle
   ```

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

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

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

## 追踪路由输出未显示 NAT 网关私有 IP 地址
<a name="nat-gateway-troubleshooting-traceroute"></a>

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

**原因**  
您的实例在使用其他网关（例如互联网网关）访问互联网。

**解决方案**  
在实例所处的子网的路由表中，检查以下信息：
+ 确保存在将 Internet 流量发送到 NAT 网关的路由。
+ 确保没有其他特定路由将 Internet 流量发送到其他设备 (如虚拟私有网关或 Internet 网关)。

## Internet 连接在 350 秒后中断
<a name="nat-gateway-troubleshooting-timeout"></a>

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

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

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

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

## 无法建立 IPsec 连接
<a name="nat-gateway-troubleshooting-ipsec"></a>

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

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

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

## 无法发起更多连接
<a name="nat-gateway-troubleshooting-simultaneous-connections"></a>

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

**原因**  
您可能已达到单个 NAT 网关的并发连接数限制。有关更多信息，请参阅 [NAT 网关基础知识](nat-gateway-basics.md)。如果私有子网中的实例创建了大量连接，则您可能会达到该限制。

**解决方案**  
请执行以下操作之一：
+ 对每个可用区创建一个 NAT 网关，并在这些区域间分布客户端。
+ 在公有子网中创建更多 NAT 网关并将客户端拆分到多个私有子网中 (各自具有指向不同 NAT 网关的路由)。
+ 限制客户端可对目的地创建的连接数。
+ 使用 CloudWatch 中的 [`IdleTimeoutCount` 指标](vpc-nat-gateway-cloudwatch.md)可监控空闲连接的增加。关闭空闲连接以释放容量。
+ 创建具有多个 IP 地址的 NAT 网关或向现有的 NAT 网关添加辅助 IP 地址。每个新的 IPv4 地址最多可以支持 55,000 个并发连接。有关更多信息，请参阅 [创建 NAT 网关](nat-gateway-working-with.md#nat-gateway-creating) 或 [编辑辅助 IP 地址关联](nat-gateway-working-with.md#nat-gateway-edit-secondary)。

# 适用于 NAT 网关的定价
<a name="nat-gateway-pricing"></a>

当您预置 NAT 网关时，NAT 网关可用的每个小时及其处理的每个 GB 数据都需支付费用。有关更多信息，请参阅 [Amazon VPC 定价](https://aws.amazon.com/vpc/pricing/)。

以下策略可帮助您降低 NAT 网关的数据传输费用：
+ 如果您的 AWS 资源会跨可用区发送或接收大量流量，则请确保资源与 NAT 网关位于同一可用区，或者在与资源相同的每个可用区中创建一个 NAT 网关。
+ 如果通过 NAT 网关的大多数流量是到支持接口端点或网关端点的 AWS 服务，则请考虑为这些服务创建接口端点或网关端点。有关潜在成本节约的更多信息，请参阅 [AWS PrivateLink 定价](https://aws.amazon.com/privatelink/pricing/)。