问题陈述
我需要使用 AWS Cloud VPC 制定业务连续性计划,要求如下 -
- 在我们开发人员的 AWS VPC 私有子网中,我们将为每个开发人员提供工作区(即 AWS 安全桌面即服务)
- 从这些工作区,每个开发人员都可以使用 VPN 连接到不同的远程云,即公共云 GCP/AWS/Azure 或甚至本地数据中心。这些不同的远程数据中心或公共云可能具有重叠的 IP 地址范围,我们无法控制这些 IP 范围管理。
- 开发人员可以使用 VPN 轻松地从工作区切换和连接不同的云
AWS 原生服务/功能无法提供直接帮助
站点到站点 VPN- 为了满足这些要求,AWS 站点到站点 VPN Transit 网络超出了范围,因为它不允许重叠 IP 范围。
为了间接解决重叠 IP 地址范围,AWS 文档中有一个冗余的站点到站点 VPN 计划,但它适用于故障转移场景,我需要所有远程云都可以随时连接,即始终处于活动状态。
中转网关- AWS Transit Gateway 没有帮助,因为它理想情况下不允许重叠 IP 范围多云网络。
有一种方法可以进行路由分段,即使用 Transit Gateway 中的多个路由表分离互连云的单独组合的路由路径,但这种方法需要使用 Transit Gateway 附件进行此类分段,而 AWS VPC 不能有多个附件。
此外,即使我们做了这样的事情,也可能会在 EC2 实例上使用软件 VPN(不确定是否可能),我不确定我们是否可以轻松地从每个工作区连接并切换到所有不同的云,因为开发人员的 AWS VPC 子网路由表在目标中不能有重叠的 IP 范围。
我的解决方法
我的网络计划
在同一个子网中,我考虑使用基于软件的 IPSec VPN 方法,即在 EC2 上的一个实例中,将有 VPN 服务(如 strongswan)和用于 SNAT 的 Iptable 规则。这种方法的灵感来自 AWS Support Answer为 VPN 流量配置 NAT。
对于每个云/数据中心,将有一个 EC2 实例设置,其中包含软件 IPSec VPN 和 IPtable 规则。
在远程端,也将有一个 VPN 网关,就像 AWS VGW 和客户网关配对一样。
为了使流量使用 VPN 从工作区流向正确的远程云,我必须在子网的路由表中输入目的地作为远程云的 IP 地址范围,目标作为 VPN EC2 实例的 eni id。
这种方法的问题再次,对于具有重叠 IP 地址的远程云,我无法在开发人员的 AWS VPC 子网路由表中输入条目。
解决这个问题,我当时想做一些类似 IP 范围操纵的事情,其中我将为每个重叠的远程云设置完全虚构或不真实的 IP 范围,即对于实际 IP 范围为 192.168.xy/16 的云,不真实的 IP 范围将是 10.10.pq/16。
之后,我将为每个远程云设置单独的 EC2 VPN 服务器。然后,对于任何远程云的路由,路由表中的条目将是 10.10.pq/16 作为目的地,EC2 VPN 服务器的 eni id 作为目标。
在 EC2 VPN 服务器上,我们将设置 Iptable 规则,它将执行类似 PREROUTING DNAT 和 POSTROUTING SNAT 的操作,仅用于 IP 转发,如下所示stackoverflow 问答。
工作区上的开发人员必须了解虚拟 IP 和真实 IP 之间的映射,并使用虚拟 IP 发送流量。必须使用自定义脚本更新 EC2 VPN 服务器 Iptables 规则,以使此映射保持最新映射。
我不确定上述方法的正确性或有效性。
我上述方法隐含的另一个问题
这也让人产生疑问,即使我连接到远程云中具有特定 IP 的实例,但如何访问其他云服务(如无服务器功能或 API)或托管/抽象服务(如 DB/LB)呢?
虽然这可以通过在开发人员的 VPC 中使用 IGW 发送流量或连接到远程云中的堡垒主机来实现。
我在网上搜索到的其他方法正在设置自定义多云覆盖网络,这看起来令人望而生畏或像火箭科学一样。
我也不确定开源 VPN(如 OpenVPN)或 pfSense(如防火墙/网络软件)是否可以利用它们的一些原生功能来解决我最初的问题。
我在 AWS 云上工作时获得了所有的网络或 VPN 知识,但我对计算机科学领域的网络深度并不十分熟悉。
请帮助解决这些问题。