AWS 如何为不同的客户提供相同的私有网络地址?

网络工程 纳特 子网 aws
2021-07-19 08:59:09

我一直在研究子网划分,当然还有很多让我感到困惑的地方。一个问题如下:我公司使用AWS。对于我们的 VPC,假设我们有一个 10.2.0.0 /16 CIDR 的私有网络地址。我的问题是:我有一种感觉,他们也可以将这个私人地址提供给其他公司。这怎么可能?我意识到我对更深层次的事情感到困惑,但话说回来,这正是我问这个问题的原因。谢谢!

3个回答

这与任何公司都可以使用和重用相同的私有地址的方式完全相同。私有地址不会被路由到它们可能相互冲突的地方。

我公司内部使用私有地址,你们公司内部使用相同的私有地址,没有冲突,因为我们两家公司只能通过不同的网络进行通信,并且每个公司的相同私有地址在到达之前被转换为不同的地址其他公司。

一家公司可以在内部做同样的事情。NAT 不仅可以连接到 Internet,还可以在公司内部使用。

在 Amazon 中完成此操作的真实方式与您想象的不同,因为常见的解决方案无法扩展。他们在 2013 年在 re:Invent 上对此进行了讨论,您可以在 YouTube 上观看:

https://www.youtube.com/watch?v=Zd5hsL-JNY4

然而,更普遍的答案是“IP 寻址是一个视角问题”。更具体地说,如果您的主机从不想与分配了相同 IP 空间的其他人的主机交谈,那么没有人会关心您是否拥有相同的 IP 地址。如果你这样做了,并且你想互相交谈,那么通过使用一些像NAT这样的机制,你会从网络B角度改变网络A中主机的IP地址

我不知道亚马逊到底是怎么做的,但我可以很容易地看到一些设计方法。

要记住的关键是 IP 地址只对 IP 路由器和端点重要。带有 VLANS 的以太网交换机不关心 VLAN1 和 VLAN2 是否具有重叠的 IP 范围,它只关心数据包位于哪个 vlan 以及它在哪个 MAC 地址之间流动。因此,如果每个公司的虚拟私有云都有自己的 VLAN 和连接这些 VLAN 的路由器,那么这些虚拟云具有重叠的 IP 空间就不是问题。路由器

路由器可以使用“vrfs”划分成更小的虚拟路由器,Linux 可以通过使用“网络命名空间”来做同样的事情。

或者当然你可以只使用软件路由器(主要操作系统中的内置路由工具或路由器供应商的东西)并在虚拟机中运行它们。

不幸的是,正如在另一个答案中指出的那样,这些解决方案不能很好地扩展到 AWS 的规模。只有大约 4000 个可用的 VLAN ID,大多数路由器被设计为支持少数虚拟网络,而不是数万到数十万。以太网的基于树的设计也是一个主要的扩展问题。

该答案还链接到https://www.youtube.com/watch?v=Zd5hsL-JNY4上的视频,视频解释了他们实际上是如何做到的。总结答案是客户流量以封装形式在 VM 主机之间传输。来自客户端 VM 的每个数据包都封装在 VPC 标头中,然后在通过底层网络发送之前封装在外部 IP 数据包中。

对于同一子网上的主机,源VM的VM主机拦截来自客户VM的arp请求,并根据IP地址和客户的组合在映射服务中查找目标详细信息。VM 主机然后可以使用来自映射服务的响应来合成 VM 的 ARP 请求并将封装的数据包发送到目标 VM 的 VM 主机。

对于不同子网上的主机,VM 主机拦截映射服务中默认网关的 arp 请求,确定它是虚拟网关并制作适当的 arp 响应。当实际数据包被发送时,VM 主机在映射服务中查找目标 IP 以确定将封装的数据包发送到哪里。

出于性能原因,映射服务在每个 VM 主机上运行一个本地实例,该实例缓存有关在该主机上拥有 VM 的客户网络的所有信息。