为啥 AWS NAT 网关需要弹性 IP?

Posted

技术标签:

【中文标题】为啥 AWS NAT 网关需要弹性 IP?【英文标题】:Why does a AWS NAT Gateway require an ElasticIP?为什么 AWS NAT 网关需要弹性 IP? 【发布时间】:2017-08-23 00:23:36 【问题描述】:

在创建 NAT 网关时,会在 AWS 中创建一个弹性 IP 地址。 AWS 文档 (1) 也提到了这一点。为什么 NAT 网关需要弹性 IP 地址?

【问题讨论】:

【参考方案1】:

简单地说,EIP 是必需的,因为这是 NAT 网关功能的设计方式。

在 NAT 设备上使用动态地址是没有意义的——如果地址发生变化,那将保证会中断正在进行的任何会话……而分配静态地址的唯一方法是分配弹性 IP 地址 (EIP)。

通过向外部供应商提供您的 NAT 网关的 EIP,让外部供应商将您的服务器列入白名单(以访问他们的服务器)也很常见,在这种情况下,来自公共池的动态地址将是不可接受的。

也可能存在与 EIP 运行方式相关的内部专有原因,这使得该要求成为必要……但这没有记录在案,因此这样的断言只是猜测。这方面的一个示例:公共池地址(例如那些自动分配给配置有来自池的公共 IP 地址而不是 EIP 的 EC2 实例的那些)可能被设计为特定的可用区,甚至是单个可用区的子集(毕竟,当实例停止/启动时,它们确实会发生变化,这意味着它们可能专用于 AZ 内的特定服务器托架),而 EIP 可以从一个区域的任何地方迁移到区域内的另一个区域。这强烈暗示了不同的内部拓扑。

在我看来,这个要求(约束?)似乎微不足道:您不应该为此 EIP 付费,如果您需要增加一个区域内允许的最大 EIP 数量,您可以提交支持请求收费,描述您的用例,以请求增加限制。

【讨论】:

感谢您的回复。是的,它微不足道。但是,我很好奇为什么 NAT GW 需要 EIP。 嗨,Michael,外部供应商是否需要知道 NAT 网关的 IP 地址才能将其加入白名单?路由器和互联网网关是否充当直通通道并且没有关联的 IP 地址?然而,它似乎与公共子网中的任何公共 EC2 实例非常相似——我猜如果外部供应商必须列入白名单,它们也可能需要弹性 IP 地址。 @PunterVicky 是的,NAT 网关的 EIP 是在出站连接的另一端可见的。路由器和 Internet Gatewy 没有自己的 IP。【参考方案2】:

EIP 要求相当随意。拥有静态 IP 可以更轻松地对 NAT 进行编码(它不必检查 WAN 接口是否有上游地址更改),但支持动态上游地址的 NAT 非常常见 - 几乎每个主要 ISP 服务的家庭都有一个。当然,外部地址可能会更改并中断当前连接,但 ISP 知道这一点并努力不更改地址。通常,它仅在您重新启动路由器时才会更改,并且此时您的所有连接都会中断。

在 AWS 上有许多类似的场景,您不需要关心您的 NAT 网关外部地址是否发生变化,尤其是在您的 VPC 不包含任何公共服务器的情况下。我有很多这样的,我正在尝试在免费帐户上运行它们——它们强迫我消耗我供不应求的静态 IP,这让我很恼火。

正如其他人所观察到的,这是一笔不小的开支,而且 AWS 仍然比我知道的获得这种云能力的任何其他方式便宜得多;但 EIP 并不是严格要求的。

【讨论】:

【参考方案3】:

一点都不重要,您只能拥有 5 个 EIP,因此在两个可用区中拥有 2 或 3 个应用程序将达到该阈值。

【讨论】:

直到你向他们询问更多的 EIP 地址,这很容易做到。【参考方案4】:

我认为这里缺少的答案是 NAT 网关 (NATG) 流量仍在通过 Internet 网关 (IGW) 进行路由,该网关执行静态(一个私有 IP 到一个公共 IP)NAT。正如问题中的图片所示,弹性 IP (EIP) 是一个关联。将 NATG 的私有 IP 转换为其关联公共 EIP 的是 IGW。

因此,从 AWS 实施的角度来看,此 EIP 要求对于通过 IGW 访问 Internet 的公共子网中的任何资源(例如 EC2 实例)都是一致的。

【讨论】:

以上是关于为啥 AWS NAT 网关需要弹性 IP?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义弹性 IP 与 NAT 网关与 AWS CDK 相关联

传出流量 AWS 的公共 IP 地址

具有固定 IP 的 AWS 客户端 ***

如何通过 Cloudformation 将弹性 IP 附加到 Nat 网关

AWS Lambda:如何为具有 VPC 访问权限的 lambda 函数设置 NAT 网关

腾讯云发布三大独家功能:弹性网卡广播&组播专线NAT网关(内附媒体专访)