使用 StrongSwan VPN 进行 NAT 的虚拟 IP 池

使用 StrongSwan VPN 进行 NAT 的虚拟 IP 池

我正在尝试使用 StrongSwan 实现站点到站点 VPN 配置,以便远程站点能够连接到我们的 AWS VPC。问题在于,远程网关可能会使用与 VPC 相同的子网,并且它们无法在其端进行任何 NAT,因此所有这些都必须在 AWS 网关上完成。

我遇到了 IKEV2 和 StrongSwan 的“虚拟 IP”支持,我认为结合 IPTable 规则可以解决这个问题。不过我对这个架构有几个疑问,您可以在下图中看到。我在我们的 VPC 中为映射的远程 VPN 设备定义了一个特殊子网,这是为了确保我们有可用空间,因为 VPC 中的其他地方将进行大量的自动扩展。

最终,无论我选择哪种架构,都需要能够支持所有连接到我们的 VPC 的多个远程站点。

在此处输入图片描述

  1. 首先,考虑到目前的情况,这种架构是否合理,或者是否有更好的方法来完全实现这一点?

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

  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?跟踪此映射的最佳方法是什么?

  2. 我喜欢特殊子网“映射 VPN 子网”的想法,因为我可以跟踪我的可用空间。但是,您认为这种方法是否只会使拓扑过于复杂?另一种选择是放弃该子网并直接使用虚拟 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>

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

本地网关配置

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 池中!?!?

相关内容