AWS VPC:互联网网关与 NAT

AWS VPC:互联网网关与 NAT

与我的问题非常相关。虽然它似乎已经回答了很多人的问题,但我仍然很难理解这种设置是特定于 AWS 还是一般网络。如果是后者,那么我需要重新回顾我的基础知识。我已经怀疑了,因此才提出这个问题。

我的理解

如果专用网络连接到互联网,则其主机需要具有公共 IP,以便在互联网上唯一可识别。所有到互联网的流量(入站或出站)都通过此公共 IP 地址进行。此网络的主机连接到互联网时会获得公共 IP。从此主机发出到 www.google.com 的数据包将包含主机的专用地址,而该地址最终将被 NAT 设备(安装在路由器/默认网关上)替换为其公共 IP 地址,如图所示这里。这是大多数互联网(IPV6 除外)的运行方式。

现在,在 AWS 中

  • 当你创建一个公共子网并启用自动分配公共 IP,您实际上是在通知 Internet 网关在互联网上路由其请求时,将来自此 EC2 实例的请求数据包中的 EC2 实例的私有地址与 EC2 实例的公有 IP 地址进行切换,反之亦然。我的理解对吗?
  • 当你创建一个私有子网不将其连接到互联网网关),您将其保密。然后,我们有意识地确保我们保留自动分配公网 IP已禁用。因此,当我们在此私有子网内启动 EC2 实例时,我们无法在 EC2 控制台上看到公有 IP。这也意味着此子网中的实例对互联网不可见。现在,如果我将此私有子网连接到 NAT 设备(当然,该设备位于公有子网上)(请不要混淆我和 NAT 网关目前做得更好的地方)然后,我基本上让 NAT 设备从私有子网中找出要分配给特定主机 X 的公共 IP,该主机 X 已请求以公共 IP 与互联网进行通信需要与互联网进行通信。

    现在,

    • 这难道不是路由器/(互联网)网关已经在 AWS 和一般网络中执行的操作吗?将公有 IP 分配给网络上的主机并在数据包(源自此网络上的主机)传到互联网的过程中不断用公有 IP 地址替换数据包中的私有 IP 地址,难道这不是由路由器执行的操作吗?
    • 假设 NAT 设备确定要分配给私有子网的此主机的 IP 1.2.3.4。如果“以某种方式”此 IP 在 Internet 上为人所知,那么私有子网上的此主机也应该可以从 Internet 访问,除非 NAT 设备耍了什么花招(查看后续问题)。我的理解对吗?现在,AWS 表示 NAT 设备不允许入站通信。这是否类似于这样一个事实:即使知道了公有 IP 1.2.3.4(NAT 设备分配给此私有子网的主机),入站连接也会受到强制限制?或者,NAT 设备是否只是代表来自私有网络的主机使用自己的 IP 地址(这不是 NAT 设备理想情况下应该做的事情;NAT 设备会获取分配的私有 IP 并将其替换为数据包上的公有 IP)?
    • 此外,AWS 还允许您启用自动分配公共 IP在私有子网上也是如此。我可以确认我可以在具有公共 IP 的私有子网上看到 EC2 实例。所以,现在您有一个私有子网 (因为它们在路由表中未连接到 Internet 网关)具有公共 IP 的实例(因为您启用了自动分配公共 IP在私有子网上)。 这应该如何解释呢?

答案1

我认为你误解了NAT网关的功能而这又会引起其他的混乱。

  • NAT 不会随机为内部/私有主机分配地址。

  • NAT 设备通常具有两个接口-内部的使用私有 IP,例如 10.0.0.1。并且外部的具有公共 IP,例如 1.2.3.4。

  • 例如,内部网络中具有某些10.0.0.x地址(没有公共地址)的主机将所有出站流量发送到NAT 网关NAT 网关取代了源 IP在包中(例如10.0.0.123)有自己的公有 IP(即1.2.3.4)。然后它将数据包发送到互联网上的目的地,例如 Google。

  • TCP 数据包不仅有源和目标地址也是来源和目的地端口. 源端口也可能会被 NAT 网关替换,以避免当多个主机尝试与相同的源端口进行通信时发生冲突。

NAT解释:

内部主机10.0.0.123想要从google.com通过216.58.203.110HTTPS,即端口443

  1. 它向 NAT 网关发送一个包含源10.0.0.123:12345(地址:随机本地端口)和目标(地址:https 端口)的数据包,因为这是最好的216.58.203.110:443下一跳对于所有地址不是 10.0.0.x

  2. NAT 网关将源替换10.0.0.123:12345为其自己的公共 IP 和某个随机端口1.2.3.4:54321

  3. 它记录了从10.0.0.123:12345到 的连接在其216.58.203.110:4431.2.3.4:54321连接跟踪表

  4. 当来自 google 的返回数据包以目的地到达 NAT 网关时1.2.3.4:54321,网关会查找该记录(地址:端口)并发现应将其转换回该10.0.0.123:12345端口并将其发送到该主机。

如果同一时间本地网络中的另一台主机(例如10.0.0.99)尝试从 Google 下载某些内容,则会发生以下情况:

  1. NAT网关再次将源IP转换为自己的公网IP1.2.3.4 源端口将与之前不同,例如56789

  2. 现在 Google 看到来自我们的 NAT 网关的两个连接

    • 1.2.3.4:54321- 到 - 216.58.203.110:443(NAT 网关知道原始来源实际上是10.0.0.123:12345
    • 1.2.3.4:56789- 到 - 216.58.203.110:443(NAT GW 知道原始源是10.0.0.99:12345)。

两个连接出现来自 NAT 网关,但实际上它们是发起的来自不同的主机在内部网络中。只有 NAT 网关知道映射。

简而言之就是这样。


现在有几点说明:

  • 你不能发起連接从外面到 NAT 后面的主机。您只能向从内部发起的数据包发送回复。

    这是因为当内部主机发送第一个数据包时,内部IP:port和 NAT 网关之间的映射就完成了。IP:port

    如果你想10.0.0.123:22从外部通过 SSH 连接,你会怎么做?你可以将 SSH 数据包发送到 NAT 网关 IP,1.2.3.4什么港口?你看,没有映射,所以不可能从外部发起连接。

  • 路由器另一方面,不改变任何 IP 或端口(与 NAT 网关相反)。它们几乎不加改变地传递数据包。

  • 在 AWS 环境中路由器IGW = 互联网网关. NAT 可以是NAT 网关或者NAT 实例,他们做同样的事情。

希望这能解释清楚:)

答案2

这更像是对上述@MLu 的回答的(大力)支持性评论,引用了官方 AWS 文档中的相关片段,阐明了 Internet 网关和 NAT 设备在 AWS 中的作用。

NAT 设备(NAT 实例或 NAT 网关)

AWS 文档 » Amazon VPC » 用户指南 » VPC 网络组件 » NAT

尽管 NAT 设备的实际作用是地址转换和端口地址转换(PAT),但我们在本文档中使用术语 NAT 来遵循常见的 IT 实践。

NAT 设备的具体目的是允许私有网络中的主机通过执行 PAT 的 NAT 设备访问外部网络(互联网)。

因此,如果私有子网中有一个主机,其 IP 为10.0.1.1/32,并且它向 google.com(216.58.211.174/32)发送请求,则 NAT 设备将记录从 10.0.1.1:SOMESOURCEPORT 到 216.58.211.174:SOMEDESTPORT 的映射,并将请求(数据包)中的源 IP 更改为其公共 NAT-PUB-IP:SOMERANDOMPORT。

记录的映射将是: 10.0.1.1:SOMESOURCEPORT --❯ NAT-PUB-IP:SOMERANDOMPORT

当它收到响应时NAT-PUB-IP:SOMERANDOMPORT,查找记录的映射就会发现响应需要返回10.0.1.1

所有内部 IP 均转换为分配给 NAT 设备的单个公共 IP。连接的多路复用依赖于 NAT 设备根据 唯一地标识内部主机SOMERANDOMPORT

这也意味着,如果内部主机确实分配了公共 IP,那么对于 NAT 设备来说,这并不重要,因为它只对内部 IP 地址执行 PAT。

互联网网关 (IGW)

这也执行 NAT,但与上面的不同,它执行的是静态 NAT。简单来说,有以下静态记录:

Internal HOST IP <-> Public IP Assigned to the Internal Host

请注意,AWS VPC 内的主机仅知道其在 VPC 内的私有 IP。分配给它的公共 IP 仅供 Internet 网关使用。

对于与上述相同的请求(内部主机到 google.com),如果

  1. 主机位于公共子网内(根据定义,这意味着公共子网与具有四重 cidr 路由条目的路由表相关联,以将所有非 VPC 流量重定向到 IGW),并且,
  2. 它分配有一个公共 IP 地址,然后来自内部主机、目的地为 VPC 外部的数据包被路由到 IGW,IGW 根据其拥有的映射转换数据包中的源 IP:

10.0.1.1 -> Public_IP_Of_Internal_Host

当它收到带有目的地的响应时,Public_IP_Of_Internal_Host该响应将被转换回10.0.1.1


https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html

互联网网关有两个用途:在您的 VPC 路由表中为可路由互联网的流量提供目标,以及执行网络地址转换 (NAT)对于已分配公共 IPv4 地址的实例。

如前所述,需要分配公共 IP 的原因是 IGW 只能执行静态 NAT,因此需要公共 IP 才能创建它与主机内部 IP 之间的映射。

相关内容