我正在尝试使用 StrongSwan 实现站点到站点 VPN 配置,以便远程站点能够连接到我们的 AWS VPC。问题在于,远程网关可能会使用与 VPC 相同的子网,并且它们无法在其端进行任何 NAT,因此所有这些都必须在 AWS 网关上完成。
我遇到了 IKEV2 和 StrongSwan 的“虚拟 IP”支持,我认为结合 IPTable 规则可以解决这个问题。不过我对这个架构有几个疑问,您可以在下图中看到。我在我们的 VPC 中为映射的远程 VPN 设备定义了一个特殊子网,这是为了确保我们有可用空间,因为 VPC 中的其他地方将进行大量的自动扩展。
最终,无论我选择哪种架构,都需要能够支持所有连接到我们的 VPC 的多个远程站点。
- 首先,考虑到目前的情况,这种架构是否合理,或者是否有更好的方法来完全实现这一点?
假设问题 1 的答案是肯定的,
确定虚拟子网以便它不与我的 VPC (10.0.0.0/16) 或远程站点 (10.0.0.0/16) 重叠将非常容易,假设我手动选择 11.0.0.0/24。我如何跟踪虚拟池中的谁是谁?地址是否只是 1 对 1 映射,例如 10.0.0.15 -> 11.0.0.15?跟踪此映射的最佳方法是什么?
我喜欢特殊子网“映射 VPN 子网”的想法,因为我可以跟踪我的可用空间。但是,您认为这种方法是否只会使拓扑过于复杂?另一种选择是放弃该子网并直接使用虚拟 IP 池。
假设问题 3 的答案是肯定的,
- 实施 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>
经过一些基本测试,看起来从远程子网到虚拟子网的映射不是一对一的。我似乎也无法映射整个子网,而只是映射远程网关。
本地网关配置
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
远程客户端配置
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: 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 池中!?!?