带有StrongSwan VPN的虚拟IP地址池

我正在尝试使用StrongSwan解决站点到站点的VPNconfiguration问题,这将允许远程站点连接到我们的AWS VPC。 值得注意的是,远程网关可能会使用与VPC相同的子网,并且它们将无法在其端点上执行任何NAT,因此都必须在AWS网关上完成。

我遇到了IKEV2和StrongSwan的“虚拟IP”支持,我认为结合IPTable规则可以解决这个问题。 虽然我有几个关于这个架构的问题,你可以在下面的图中看到。 我们在VPC中为映射的远程VPN设备定义了一个特殊的子网,这是为了确保我们有足够的空间,因为在VPC的其他地方会有很多自动缩放。

最终,我select的架构将需要能够支持所有连接到我们的VPC的多个远程站点。

在这里输入图像说明

  1. 首先,在这种情况下,这种架构看起来是否合理,还是有更好的方法来完成这一点?

假设问题1的答案是肯定的,

  1. 我很容易确定一个虚拟子网,使其不会与我的VPC(10.0.0.0/16)或远程站点(10.0.0.0/16)重叠,例如我手动select11.0.0.0/24。 我如何跟踪虚拟池中的谁是谁? 地址是否简单映射为1对1,例如10.0.0.15 – > 11.0.0.15? 跟踪这个映射的最好方法是什么?

  2. 我喜欢特殊子网“Mapped VPN Subnet”的想法,因为我可以跟踪我的可用空间。 然而,你认为这种方法只是使拓扑过于复杂? 另一种select是废弃该子网并简单地使用虚拟IP池。

假设问题#3的答案是肯定的,

  1. 实施NAT IPTable规则的最佳方式是如何在虚拟池中寻址PRE / POST路由到“映射的VPN子网”。 像这样的东西?

规则

iptables -t nat -A PREROUTING -d <virtual address> -j DNAT --to-destination <mapped vpc address> iptables -t nat -A POSTROUTING -d <mapped vpc address> -j SNAT --to-source <virtual address> 

经过一些基本的testing,看起来像从远程子网到虚拟子网的映射不是1对1。 我也似乎无法映射整个子网,而只是映射远程网关。

本地网关configuration

 config setup charonstart=yes plutostart=no conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 authby=secret conn testConn leftid=%any left=10.0.0.11 leftsubnet=10.0.0.0/16 leftfirewall=yes right=%any rightsourceip=16.16.0.0/16 rightsubnet=10.0.0.0/16 auto=add 

远程客户端configuration

 config setup charonstart=yes plutostart=no conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev2 authby=secret conn testConn left=%any leftsourceip=%config leftsubnet=10.0.0.0/16 leftid=%any leftfirewall=yes right=<Gateway Public IP> rightsubnet=10.0.0.0/16 rightid=%any auto=start 

Charon日志

 charon: 04[IKE] peer requested virtual IP %any charon: 04[CFG] assigning new lease to '10.0.0.10' charon: 04[IKE] assigning virtual IP 16.16.0.1 to peer '10.0.0.10' 

我怎么得到整个远程子网映射到虚拟IP池!?!?