使用 OpenSwan 打通 Azure RouteBased VPN 和 PolicyBased VPN
问题描述
如果客户在 Azure 上分别创建了 Route-Based 和 Policy-Based VPN gateway,并且想要打通这两个虚拟网络下资源的互相访问,由于这是两种不同类型的 VPN Gateway, 且采用的是不同版本的 IKE 协议去协商,所以 Azure 的 Route-Based 跟 Policy-Based 的 VPNGateway 是无法直接打通。(关于两者的区别可以参考:VPN 类型。但我们可以尝试找一台 VPN 设备或者 Linux 虚拟机安装第三方 VPN 软件来帮助打通两个虚拟网络,本文主要讨论如何使用 Linux 虚拟机安装 OpenSwan 来打通这两个虚拟网络。
目的
如何实现虚拟网络1下的虚机 Subversion(172.22.5.4)跟虚拟网络2下的虚机 VM(192.168.1.4) 通过内网 IP 实现互访
拓扑
前期准备
- 创建一个 Route-Based 的虚拟网络网关 Gateway1 ,所在虚拟网络 172.22.5.0/24,并新建一台虚拟机名称 Subversion(172.22.5.4)
- 创建一个 Policy-Based 的虚拟网络网关 Gateway2 ,所在虚拟网络 192.168.1.0/24,并新建一台虚拟机名称 VM(192.168.1.4)
- 新建一个虚拟网络 10.1.1.0/24 ,并且在该虚拟网络中添加两台虚拟机:OpenSwan 以及 VM (10.1.1.6)
配置
创建本地网络网关
为 Route-Based VPN Gateway 创建本地网络网关 openswan4route-based:
为 Policy-Based VPN Gateway 创建本地网络网关 openswan4policy-based:
配置 Route-Based VPN Gateway:
配置 Policy-Based VPN Gateway:
安装配置 OpenSwan:
安装:
调整系统配置以及内核参数:
chkconfig iptables off service iptables stop setenforce 0 sed -ri "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config sed -ri 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf sed -ri 's/net.ipv4.conf.default.rp_filter = 1/net.ipv4.conf.default.rp_filter = 0/g' /etc/sysctl.conf sysctl -a |egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print $1 "= 0"}' >>/etc/sysctl.conf sysctl -p
配置:
以上是 OpenSwan 对接两个 Azure VPN 时相应的IPsec协商参数,更多关于 OpenSwan 的配置文件各参数的含义可以参考
man ipsec.conf
。配置预共享密钥:
重启服务以及查看状态, 可以看到状态都已经 active:
在 Azure 门户里面, 在 OpenSwan 这台设备所关联的 NSG 上,开通 Inbound 规则放行 udp 500,4500 端口。
测试
我们在 172.22.5.4 上 ping -c 100 192.168.1.4
测试结果如下所示:
我们在 192.168.1.4 上 ping -c 100 172.22.5.4
测试结果如下所示:
可以看到两边测试均没有丢包并且延迟抖动也都正常。
如果后续想要 VM(192.168.1.4) 跟 VM(10.1.1.6)和 Subversion 之间实现互相访问,可以在 VM(10.1.1.6)所在的子网上关联 UDR 实现。