为什么 AWS NAT 网关需要弹性 IP?

Why does a AWS NAT Gateway require an ElasticIP?

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

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

在 NAT 设备上拥有动态地址是没有意义的——如果地址发生变化,那肯定会中断任何正在进行的会话...分配静态地址的唯一方法是通过分配弹性 IP 地址 (EIP)。

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

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

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

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

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

在 AWS 上有许多类似的场景,您不关心 NAT 网关外部地址是否更改,尤其是当您的 VPC 不包含任何 public 服务器时。我有很多这样的东西,我正试图在免费帐户上 运行 它们——这让我很恼火,因为它们迫使我耗尽我的静态 IP 供应不足。

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

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

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

自 2021 年 6 月起,AWS NAT 网关不再需要 ElasticIP(如果您选择“私有”模式):

A private NAT Gateway, or NAT Gateway with connectivity type set to private, does not require EIP and you do not need to attach an internet gateway with your VPC.

https://aws.amazon.com/about-aws/whats-new/2021/06/aws-removes-nat-gateways-dependence-on-internet-gateway-for-private-communications/