问题描述
我需要创建一个带有远程 VPC (IKEv2 + IPSec) 的 site-to-site
VPN。双方都使用对方的一些 Web 资源,这些服务主机名使用 DNS 服务器(每侧一个)映射到 IP。 A面使用Fortigate
,B面使用StrongSwan
。
网络如下所示,其中Side B
可以访问subnets A1,A2,A3
,而Side A
可以访问subnet B
:
这是我在 B 面使用的配置
/etc/ipsec.config
conn %default
keyexchange=ikev2
mobike=no
authby=psk
conn sideA
left=%defaultroute
leftid=GATEWAY_B_PUBLIC_IP
leftsubnet=subnet_B
right=GATEWAY_A_PUBLIC_IP
rightid=GATEWAY_A_PRIVATE_IP
rightsubnet=subnet_A1,subnet_A2,subnet_A3
type=tunnel
auto=start
问题是 subnet A4
与 subnet B
重叠,因此此配置不起作用。
VPN Gateway B
是运行 Ubuntu 20 的虚拟机,因此可以进行自定义。
解决方法
解决方案
我已按照以下说明更改了 ipsec.conf
conn %default
keyexchange=ikev2
mobike=no
authby=psk
conn sideA
left=%defaultroute
leftid=GATEWAY_B_PUBLIC_IP
leftsubnet=VIRTUAL_SUBNET_B
right=GATEWAY_A_PUBLIC_IP
rightid=GATEWAY_A_PRIVATE_IP
rightsubnet=SUBNET_A1,SUBNET_A2,SUBNET_A3
type=tunnel
auto=start
其中 VIRTUAL_SUBNET_B
是与左侧或右侧都不重叠的虚拟子网。
并创建了以下NAT规则:
iptables -t nat -A PREROUTING -s SUBNET_Ax -d VIRTUAL_SUBNET_B -j NETMAP --to SUBNET_B
iptables -t nat -A POSTROUTING -s SUBNET_B -d SUBNET_Ax -j NETMAP --to VIRTUAL_SUBNET_B
在 /etc/sysctl.conf
中添加以下几行
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2