将多个 IP 连接到 NAT 网关以扩展您的出口流量模式

亚马逊云科技 NAT Gateway 是一项高度可用且可横向扩展的网络地址转换 (NAT) 服务。亚马逊云科技 NAT Gateway 允许私有子网中的资源使用 NAT 网关的 IP 地址连接到子网外的目标资源。这些目标资源可以位于同一 VPC、不同的 VPC 中、在互联网上,也可以位于您的本地网络中。这意味着您可以使用 NAT 网关为工作负载开启仅限出口连接,并且只需要将 NAT 网关的 IP 地址列入允许列表即可。有关更多 N AT 网关 用例,请参阅 亚马逊云科技 文档

去年,我们将 NAT 网关的自动扩展容量提高到 100 Gbps 和每秒 1000 万个数据包 (pps)。我们还刚刚增加了 NAT Gateway 的容量,以支持多达 440,000 个到唯一目的地的并发连接,这是之前上限 55,000 的八倍。唯一的目的地由目标 IP 地址、目标端口和协议的唯一组合来识别。如果这些参数中的任何一个发生变化,则将其视为新的唯一目的地。亚马逊云科技 NAT Gateway 现在可以与一个独特的目的地建立多达 440,000 个并发连接。您可以通过创建具有多个 IP 地址的 NAT 网关,或者将辅助 IP 地址与现有 NAT 网关关联来利用此功能。在这篇文章中,我们将解释如何在 NAT 网关上使用这项新功能。

流量和 亚马逊云科技 NAT 网关

首先,让我们定义什么是流量以及为什么它对 NAT Gateway 很重要。我们假设你熟悉 TCP/IP 协议栈和标头封装机制。网络流或数据包流通常由源 IP、端口、目标 IP 和端口以及协议(例如 TCP、UDP 或 ICMP)定义。执行 NAT 时有两种选择:1:1 NAT 和端口地址转换 (PAT)。亚马逊云科技 NAT 网关执行端口地址转换。亚马逊云科技 NAT 网关执行源 NAT,并将源的 IP 地址转换为其私有 IP 地址。然后,互联网网关 (IGW) 将 NAT 网关的私有 IP 地址转换为与 NAT 网关关联的弹性 IP 地址。在下面的图 1 中,我们显示了来自部署在私有子网中的 亚马逊弹性计算云 (Amazon EC2) 实例的两个数据流的分组遍历,该实例通过 TCP 端口 389 与公共服务器 (192.0.2.29) 通信。

NAT Gateway functionality

图 1:NAT 网关功能

亚马逊云科技 NAT 网关可以在分布式模型中部署,其中每个 VPC 都有自己的 NAT 网关,也可以 集中 部署 ,以引导所有出口流量流经中央出口 VPC。在其中一些情况下,无论是集中式架构还是分布式架构,我们都会看到来自内部工作负载的流量集中在一组固定的目标服务器上的部署。这通常会导致 NAT 网关将多个流量转换为唯一的目的地(IP、端口、协议)。对于大规模用例(例如,身份验证/身份服务器),这可能导致超过 55,000 个同步单目标连接。

下面的图 2 显示了一个部署示例,其中多个工作负载通过 TCP 端口 389 与公共服务器通信。图 2 中显示的流量具有相同的目标 IP、目标端口和协议。在公共服务器上看到的流的源 IP 地址因源实例的可用区 (AZ) 而异。所有源自 az-a 的流量都以 Nat-gw-az-a 的弹性 IP 作为来源,所有源自 az-b 的流都以 Nat-gw-az-b 的弹性 IP 作为来源。

NAT Gateway Deployment

图 2:NAT 网关部署

在本次发布之前,如果您的部署需要超过 55,000 个同步单目的地连接,那么您将需要多个 NAT 网关和相应的路由规则才能实现所需的规模。这意味着将您的工作负载分成不同的子网,并在多个 NAT 网关之间分配流量。

为了简化部署,您现在可以为每个 NAT 网关分配多达八个弹性 IP 地址,NAT Gateway 的扩展能力提高了八倍。因此,NAT Gateway 现在允许多达 440,000 个同步单目标连接,因为每个关联的 IP 地址都会将限制线性地增加 55,000 个连接。

使用具有多个弹性 IP 的 NAT 网关

在这篇博客文章中,我们使用下图 3 所示的示例网络拓扑来强调 亚马逊云科技 NAT Gateway 的新功能。我们对 NAT 网关使用分布式部署,因此我们的工作负载和 NAT 网关位于同一 VPC 中。我们展示了向现有 NAT 网关添加多个 亚马逊云科技 分配的弹性 IP 地址的步骤,但您可以将此功能与 BYOIP 地址、带有 NAT 网关的私有 IP 地址或集中式 NAT 网关架构一起使用。在此拓扑中,部署在自动扩展组中的 EC2 实例不断通过 TCP 端口 389 与测试公共服务器通信。流量通过 NAT 网关和 IGW,如下图 3 所示。

Topology used throughout this post

图 3:亚马逊 VPC 和 NAT 网关测试部署

最初,我们部署的 NAT 网关有一个与之关联的弹性 IP 地址。这意味着,NAT 网关可以支持通过 TCP 端口 389 与公共服务器进行多达 55,000 个同步连接。如果 EC2 实例尝试打开指向 TCP 端口 389 上接收连接的公共服务器所代表的唯一目标的超过 55,000 个连接,您将在 NAT 网关上看到端口分配错误。随着 Auto Scaling 组的扩展和实例数量的增加,这种情况更有可能发生。 您可以使用 errorPortLadigation Amazon CloudWatch 指标来监控端口 分配错误。 有关更多详细信息,请参阅我们文档中的使用 A mazon CloudWatch 条目 监控 NAT 网关

现在,让我们把多个弹性 IP 与现有的 NAT 网关关联起来,并考虑一些重要的注意事项:

步骤 1(可选): 分配弹性 IPv4 地址。此步骤是可选的,您可以使用现有的弹性 IP 地址,只要它不与其他资源关联即可。有关如何 分配新的弹性 IP 地址 的说明,请参阅我们文档中的分配弹性 IP 地址 页面。

第 2 步: 导航到您的 NAT 网关并选择 “辅助 IP 地址” 选项卡。您与 NAT 网关关联的所有辅助弹性 IP 或 BYOIP 如下面的图 4 所示。选择 “编辑辅助 IPv4 地址关联”。

NAT Gateway details

图 4:亚马逊云科技 NAT 网关 — 辅助 IPv4 地址选项卡

步骤3: 选择要与 NAT 网关关联的其他弹性 IP 地址,然后选择 “保存更改”。

Select Secondary IP for NAT Gateway

图 5:为 NAT 网关选择辅助 IP

现在,新的弹性 IP 地址已准备就绪,另外还有 55,000 个来自 NAT 网关的同步单目标连接。将辅助弹性 IP 与 NAT 网关关联时,会自动从 NAT 网关的子网中选择私有 IPv4 地址。如下图 6 所示:

Secondary IP associated with NAT Gateway

图 6:与 NAT 网关关联的辅助弹性 IP 和私有 IPv4 地址

NAT Gateway 使用流量哈希机制为给定流量选择一个关联的 IP 地址。此哈希中包含的字段是流量源的弹性网络接口 ID、源和目标 IP 地址、源和目标端口以及协议。对于 TCP 流量,TCP 序列号也包含在哈希计算中。由于哈希算法中包含源和目标端口号,因此对于更改端口号的被动 FTP 等应用程序,您可能会看到不同的源 IP。对于需要从单个源 IP 地址向这些应用程序进行出站连接的工作负载,我们建议使用具有单个关联弹性 IP 地址的 NAT 网关。

为了测试 NAT 网关在多个弹性 IP 上的流量哈希,我们使用了 iPerf。下图 7 显示了从测试公共服务器控制台中提取的片段。你可以看到 NAT 网关的主弹性 IP 地址 (54.17x.yy.zz) 和辅助弹性 IP 地址 (52.9.aa.bb)。

Captures from the server

图 7:从测试服务器捕获的数据包

注意事项

将多个 IP 地址与 NAT 网关关联时,请考虑以下几点:

  • 与 NAT 网关关联的每个辅助弹性 IP 或 BYOIP 都会自动为 NAT 网关分配一个额外的私有 IPv4 地址。确保 NAT 网关的子网有足够的 IP 地址可用。
  • 如果您使用 VPC 流日志作为 NAT 网关的弹性网络接口 (ENI),那么您将继续看到 NAT 网关的主要私有 IPv4 地址。这是因为当您将辅助弹性 IP 地址与 NAT 网关关联时,不会创建单独的 ENI。您可以使用 VPC 流日志中的 pkt-srcaddr 和 pkt-dstaddr 字段来识别数据包流中客户端和服务器的原始 IP 地址。有关详细信息,请参阅我们关于 使用 VPC 流日志 记录 IP 流量的 文档。
  • 您可以取消与 NAT 网关关联的任何辅助弹性 IP 的关联。在取消辅助 IP 与 NAT 网关的关联时,您可以提供连接流失持续时间。这是 NAT 网关在释放辅助 IP 之前等待的时间。默认连接耗尽值为 350 秒。有关详细信息,请参阅 NAT 网 关文档
  • NAT Gateway 使用流量哈希为给定流量选择一个关联的 IP 地址。流的源和目标 IP 地址包含在哈希值中。对于在流量生命周期内更改端口号的应用程序,例如被动 FTP,我们建议使用具有单个弹性 IP 地址关联的 NAT 网关。
  • 默认情况下,您可以将两个公有 IP 地址与 NAT 网关关联。这是一个软限制,您可以通过联系 亚马逊云科技 S upport 来增加此配额 。

结论

在这篇文章中,您学习了如何将其他弹性 IP 地址与 NAT 网关关联/取消关联。此功能现已推出,因此请尝试一下,如果您对这些功能或这篇文章有疑问,请联系 亚马逊云科技 S upport 告诉我们 。

作者简介

Ankit Chadha Headshot1.jpgAnkit Chadha

Ankit Chadha 是一名网络专家解决方案架构师,为 亚马逊云科技 的 亚马逊云科技 行业账户提供支持。他在设计和构建各种网络解决方案方面拥有超过13年的经验,例如MPLS主干、基于叠加/底层的数据中心和园区网络。在业余时间,Ankit 喜欢打板球、赢得猫咪的信任和阅读传记。

Alexandra Huides author's picture亚历山德拉·希德斯

Alexandra Huides 是亚马逊网络服务战略账户的首席网络专家解决方案架构师。她专注于帮助客户为高度可扩展和弹性强的 亚马逊云科技 环境构建和开发网络架构。Alex 还是 亚马逊云科技 的公开演讲者,她专注于帮助客户设计和采用高度可扩展、弹性和灵活的网络架构。工作之余,她喜欢帆船,尤其是双体船、旅行、发现新文化和阅读