随着公有云的普及,越来越多的客户将关键应用迁移到云端。但是事实证明,没有哪家云服务提供商可以提供100%的SLA,无论是例行维护还是意外中断服务,对于客户的关键应用而言,都会受到不同程度的影响。此外,不同的云服务提供商,其提供的云服务也存在较大的差异化,包括云服务和产品的功能、质量、收费模式等方面。客户选择多样化的、最适合的、性价比最高的云服务和产品来满足自己的业务需求是必然的趋势。公有云应用占比越高的客户,其跨云应用部署的需求也越大——都不想把鸡蛋放在一个篮子里,或者是被某个云服务提供商绑架。
跨云应用部署,首先要解决网络连接问题。尽管可以通过ACL来控制网络连接,但是关键、敏感数据的传输总是要走加密隧道的,否则无法满足安全合规要求。虽说各大公有云提供商都号称自己是开放的云平台(实质上也基本是这样的,少数国内厂商除外),但也绝对不可能开放到允许友商的专线接入到自己的数据中心!目前,能实现安全跨云互联的,也只有VPN方案可以选择了。
接下来,我们试着将Windows Azure中国版和AWS中国版通过IPSEC VPN连接起来。
Windows Azure中国版端配置:
Windows Azure中国版提供了IPSEC VPN接入服务,即:site to site VPN。在配置方面,与使用硬件防火墙/路由器连接到on-premises的数据中心没有区别。
1、新建一个虚拟网络并分配内网地址段,内网地址段不要和AWS中国版的VPC地址段有冲突。不要勾选启用point to site VPN。
2、新建一个本地网络,网关填写AWS中国版端EC2上绑定的elastic ip,地址段为EC2所在的VPC的subnet地址段。
3、在虚拟网络配置中勾选site to site VPN。
4、创建一个静态网关,一定要是静态网关,OpenSwan不支持动态网关。
创建网关比较慢,大约需要等待20分钟左右。
AWS中国版端配置:
由于AWS中国版目前还不提供IPSEC VPN接入功能,虽然在VPC中能创建Virtual Private Gateway,也能将创建的Virtual Private Gateway绑定的VPC,但是Customer Gateway和VPN Connection两项是不可见的。因此我们只能使用运行Linux的EC2实例来作为IPSEC VPN接入网关。这里我们选用一个运行Ubuntu 14.04 LTS x64的t2.micro实例。如果是生产环境可以适当提升EC2实例的配置,但不需要太高,例如:m1.small。软件推荐OpenSwan,免费、配置相对简单,兼容性好。当然,如果条件允许或者有特殊的需求,可也可以使用支持AWS EC2部署的商业版软件VPN方案,例如Cisco CSR 1000V、VNS3等。
1、创建一个VPC并在其中创建subnet,地址段不要和Windows Azure中国版端虚拟网络的内网地址发生冲突。
2、为VPC配置(创建或指定)internet gateway和route table。
3、创建一个运行Ubuntu 14.04 LTS x64的t2.micro EC2实例,并将该实例放到上一步创建的VPC中。
4、为EC2实例配置(创建或指定)security group,elastic ip和固定的内网地址。
5、将EC2实例设置为:Disable Source/Destination Check。
6、在VPC的route table中加入一条路由记录,destination:Windows Azure中国版端虚拟网络的内网地址段,target:上一步创建的EC2实例的ID。
7、通过SSH登陆到创建好的EC2实例中,安装和配置OpenSwan:
更新操作系统 sudo apt-get update 安装OpenSwan sudo apt-get install openswan 编辑配置文件 sudo vim /etc/ipsec.conf 将以下内容复制到配置文件中 version 2.0 # conforms to second version of ipsec.conf specification config setup dumpdir=/var/run/pluto/ nat_traversal=yes virtual_private=%v4: #AWS端EC2实例所在的内网地址段 oe=off protostack=netkey conn azure-cn authby=secret auto=start type=tunnel left=10.11.2.237 #AWS端EC2实例的内网地址 leftsubnet= #AWS端EC2实例所在的内网地址段 leftnexthop=%defaultroute right=42.159.xxx.xxx #Windows Azure端VPN Gateway的公网地址 rightsubnet= #Windows Azure端虚拟网络的内网地址段 #ike=3des-sha1-modp1024,aes128-sha1-modp1024 #Windows Azure中国版需要注释掉这一行,Microsoft Azure国际版保留这一行。 esp=3des-sha1,aes128-sha1 pfs=no 编辑配置文件sudo vim /etc/ipsec.secrets 按照以下格式在配置文件中添加一行[AWS端EC2实例的内网地址] [Windows Azure端VPN Gateway的公网地址] : PSK "[Windows Azure端提供的VPN共享密钥]"示例:10.11.2.237 42.159.xxx.xxx : psk "XgtX5rfhMeann9C4mLpnj7VwPia" 编辑配置文件,启用IP转发sudo vim /etc/sysctl.conf去掉net.ipv4.ip_forward=1一行前面的注释(#) 执行命令使IP转发生效sudo sysctl -p /etc/sysctl.conf 重新启动ipsec服务sudo ipsec secretssudo service ipsec restart 查看ipsec服务状态sudo service ipsec status
如果一切正常的话,可以看到AWS端IPSEC tunnel已经成功建立,在Windows Azure端site to site VPN的连接状态也是正常联通的(绿色的连接线)。在AWS端可以使用内网地址ping通Windows Azure端的虚拟机。
简单的做了一个测试,通过IPSEC VPN连接后,使用scp从AWS中国版cn-north-1的虚拟机上下载Windows Azure中国版china north虚拟机上的文件,速度能达到10MB/s,基本上是跑满了Windows Azure standard VPN Gateway所能提供的速度。看起来AWS中国版和Windows Azure中国版的网络互联互通效果还是很不错的。