我正在尝试使用StrongSwan解决站点到站点的VPNconfiguration问题,这将允许远程站点连接到我们的AWS VPC。 值得注意的是,远程网关可能会使用与VPC相同的子网,并且它们将无法在其端点上执行任何NAT,因此都必须在AWS网关上完成。
我遇到了IKEV2和StrongSwan的“虚拟IP”支持,我认为结合IPTable规则可以解决这个问题。 虽然我有几个关于这个架构的问题,你可以在下面的图中看到。 我们在VPC中为映射的远程VPN设备定义了一个特殊的子网,这是为了确保我们有足够的空间,因为在VPC的其他地方会有很多自动缩放。
最终,我select的架构将需要能够支持所有连接到我们的VPC的多个远程站点。

假设问题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? 跟踪这个映射的最好方法是什么?
我喜欢特殊子网“Mapped VPN Subnet”的想法,因为我可以跟踪我的可用空间。 然而,你认为这种方法只是使拓扑过于复杂? 另一种select是废弃该子网并简单地使用虚拟IP池。
假设问题#3的答案是肯定的,
规则
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池!?!?