如何使VPN连接到具有相同CIDR的不同networking?

所以,

我有一个在VPC中运行的应用程序,当前有一个VPN连接到开发位置。 比如,10.0.2.25(内部ELB的IP,只能通过VPN访问)可以访问该应用。 我所拥有的支持VPN的路由器(又名客户端网关)没有BGPfunction。

我所在networking的CIDR(客户端networking是192.168.1.0/24),在VPC上有一个虚拟专用网关(vgwA)和一个相应的路由规则(目标192.168.1.0/24;目标wgwA)。

我可以访问应用程序没有任何问题(所有的ACL /安全组已正确configuration)。

我的问题是,当我想创build另一个VPN连接到不同的站点,但其networking具有相同的CIDR块(192.168.1.0/24)或可能重叠(或包含)它的CIDR块(例如192.168.1.0 / 16)? 这是否成功 – 客户端networking上的用户是否可以访问该应用程序?

基本上,我需要怎样才能将VPN连接到具有相同(或部分共同)CIDR的不同networking? 支持BGP的客户网关? 不同的虚拟网关在同一个VPC上? (我不认为AWS允许这样做,而且没有任何意义)基于客户网关外部IP的路由规则? (例如目的地:87.44.75.124目标:vgwA; – 没有意义)

“正确”的解决scheme是改变你的VPC的CIDR块,以防止这种重叠。 由于这不是一个简单的任务,因此目前您需要在新创build的VPC中启动实例副本,可以考虑使用以下hack:

将您的VPN设备定义为dynamicNAT,这将会将不重叠的IP地址转换为您VPC的真实私有IP,同时为VPC中的服务器提供本地DNS,并使用上述不重叠的IP地址集。

更具体的说,你将在客户端networking上有下列组件,假设你有某种VPN设备:

  • 面向VPC的路由器具有指向VPC的IP地址路由,例如192.168.3.0/24
  • 客户实现了一个内部DNS服务器,该服务器实现了以下types的DNS Alogging:customer-A-record.customerdomain.com – > 192.168.3.x
  • 用户(家庭networking)上的用户使用DNS名称(非IP地址)访问VPC资源; 因此,当内部networking用户尝试将SSH或HTTP转换为VPC主机时,他们会根据DNS名称(而不是IP地址)执行此操作:customer-A-record.customerdomain.com
  • 内部DNS服务器将DNS名称parsing为192.168.3.x / 24 IP地址
  • 内部路由器/三层交换机路由表具有指向VPC客户网关(即客户端networking上的VPN网关终止与VPC的VPN连接)的192.168.3.x / 24的路由表项,
  • 客户VPN网关接收到192.168.3.x / 24的数据包; 它有一个静态目标NAT DNAT条目来转换192.168.3.x-> 192.168.0.x
  • 客户VPN网关确保源IP被翻译,以确保有一个不重叠的返回IP地址,所以除了DNAT,它全部源NAT NAT:192.168.0.x-> 192.168.3.x(可能成为一个不同的源IP子网 – 使用相同的SNAT和DNAT更有效)
  • 客户VPN网关现在将IPSec隧道/接口上的数据包转发到目的地networking(VPC)上具有冲突的(Source-IP,Destination-IP)=(192.168.3.x,192.168.0.x)
  • VPC主机收到一个没有冲突的数据包,做它应该做的事情,并发送一个forms为(Source-IP,Destination-IP)=(192.168.0.x,192.168.3.x)的响应数据包到客户端networking的VPN隧道
  • 客户端networking上的客户VPN网关既执行DNAT / SNAT,又以表单(Source-IP,Destination-IP)=(192.168.3.x,192.168.0.x)的另一个非冲突响应结束然后转发到192.168.0.0/24上的本地(家庭)networking。