随着云的普及以及即用即付的模式,正在被大家逐渐接受,那么在初期从原始数据中心到云迁移的过程中,为了保证数据的平稳迁移,并不推荐将应用以及数据库一次性的迁移到云中。所有项目都应该分阶段来进行,阶段迁移的情况下就必须要将云资源与本地数据中心的资源互连互通。
要做到互连互通,有三种备选方案,互联网,专线直连(DX)和 VPN。从三个方面比较下这三种解决方案,安全,稳定性以及费用。DX 服务无疑是最优的一种解决方案,提供安全稳定的网络性能,高吞吐量。由于国内专线铺设所带来的高昂费用,所以在初期阶段,DX 并不是一个最优的。这里面互联网是最便宜的,因为本身数据中心就已经支付了这部分费用,只要保证云中的资源可以上互联网就可以了,但互联网面临的问题是网络依赖互联网,互联网的网络性能并不是可控的,另外一方面是互联网的安全性。VPN 呢是基于互联网的服务,虽然不能保证网络性通的可控,但可以做到数据的安全。
就以上比较而言,在初期阶段,VPN 无疑是一种高性比的安全以及节约成本的方案。考虑到目前北京区域并不支持硬件VPN的服务,即Global区域的VPN Connection。那么有没有可以替代的方案呢?答案是肯定的,一切问题都难不倒我们伟大的开源组织,开源方案如 OpenSwan (今天的主角),StrongSwan,Raccoon等等了。除了开源的解决方案外,还有一些商业解决方案,比如Sanfor 深信服,Hillstone 山石,Checkpoint , Cisco CSR1000v等也可以部署,有兴趣的可以与相应的软件提供商联系。
前面说了那么多关于VPN的各种软件,那么该如何选择呢?这里我们从使用上来划分下吧,将VPN主要划分为两类,一类是工作于客户端到服务端的模式,像OpenVPN,SSL VPN,L2TP,PPTP这些都是需要客户端主动发起连接,拨到Server端在两者之间建立一个逻辑上的隧道 (tunnel)进行通信。这种方式一般适用于个人到总部场景。服务器是无法主动发起连接到客户端。
另外一种就是站点到站点(site-to-site)的模式,像OpenSwan,StrongSwan, Raccoon 等软件,这种情况下两端会各有一个设备负责来建立两个站点之间安全通信的隧道,任何需要到对端的通信都会触发设备来建立安全隧道通信。
那么公司原有数据中心与云通信都是双向通信,所以站点到站点更合理。
实际上这里说的 VPN 即是指 IPsec VPN,IPsec 是一种工业标准,只要支持这种标准的设备都可以互相协商建立一个安全的隧道出来,比如支持的硬件设备有路由器,防火墙以及专业的 VPN 设备。
说了这么多,下面我们就以 AWS 端为 OpenSwan 与 Cisco 的路由器之间的配置为例。
### 场景及拓扑
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-1.png)
拓扑如上图,AWS端建立一个VPC(CIDR:192.168.0.0/16),包含两个子网,一个可以上互联网的Public子网192.168.1.0/24以及私有子网Private 192.168.2.0/24。在公有子网上会配置一台OpenSwan实例与公司的Cisco设备做VPN连接。
OpenSwan的EIP地址为54.223.152.218 子网:192.168.1.0/24
Cisco设备的公网地址为54.223.170.5 子网:10.1.2.0/24
目标:实现AWS上私有子网192.168.2.0/24和数据中心10.1.2.0/24双向互通
### 详细配置步骤
1.配置 VPC 基础环境
1.1 创建 VPC
在AWS console界面点击VPC,在左侧点击“您的VPC”, 创建VPC
名称标签: MyVPC
CIDR块: 192.168.0.0/16
租赁:默认
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-2.png)
1.2 创建子网
将鼠标点到子网,选择创建子网
标签名称:Public
VPC:选择第一步创建好的VPC
可用区:保持默认
CIDR块:192.168.1.0/24
以同样的方法创建一个192.168.2.0/24的子网
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-3.png)
1.3 创建路由表
点击路由表,创建路由表
名称标签:PrivateRoute
VPC:选择1.1创建好的VPC
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-4.png)
创建完成以后,点到刚刚创建好的路由表,在页面下列点击子网关联,点击编辑
在192.168.2.0/24的路由前打勾,点击保存。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-5.png)
1.4 创建 IGW
点击Internet网关,创建Internet网关
名称标签:MyIGW
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-6.png)创建完成,点击附加到VPC
选择新创建好的VPC
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-7.png)
2. 启动并配置 VPN 实例
2.1 启动实例
到EC2页面,点击启动实例。选择Amazon Linux
在详细信息页中,网络请选择新创建的VPC
子网选择192.168.1.0/24
点击下一步,存储标签等按需配置
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-8.png)
配置安全组,选择创建一个新的安全组
添加规则
自定义的UDP规则,端口500 来源任何位置
自定义的UDP规则,端口4500 来源任何位置
自定义协议, 协议 50 来源任何位置
所有流量 来源为 192.168.2.0/24
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-9.png)
注意:一定要放行来自于192.168.2.0/24的流量,否则无法通信。
最后审核启动,启动时指定一个用于登陆实例的key文件,如果没有创建一个新的。
2.2 配置弹性 IP (EIP)
在EC2页面,左侧导航栏找到弹性IP,申请分配新地址,并将其关联到新创建的OpenSwan实例。这里申请到的为 54.223.152.218。
2.3 关闭源/目的检查
在EC2页面点击OpenSwan实例,右键选择联网,更改源/目标检查,点“是,请禁用”
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-10.png)
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-11.png)
3. 安装配置 OpenSwan
3.1 登录到实例安装 OpenSwan
如何登陆实例请参考如下文档:
https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/putty.html
登陆完成以后,运行如下命令安装OpenSwan
`$ sudo yum -y install openswan`
3.2 根据Cisco 参数来配置 OpenSwan
修改/etc/ipsec.conf去掉最后一行include /etc/ipsec.d/*.conf 的注释
`$ sudo vim /etc/ipsec.conf`
`include /etc/ipsec.d/*.conf`
Cisco路由器的配置如下:
`crypto isakmp policy 10`
`encr aes`
`authentication pre-share`
`group 2`
`crypto isakmp key aws123 address 54.223.152.218`
`!`
`!`
`crypto ipsec transform-set OpenSwan esp-aes esp-sha-hmac`
`mode tunnel`
`!`
`!`
`!`
`crypto map OpenSwan 10 ipsec-isakmp`
`set peer 54.223.152.218`
`set transform-set OpenSwan`
`match address 100`
`!`
`!`
`interface GigabitEthernet1`
`ip address 54.223.170.5 255.255.255.252`
`ip mtu 1400`
`ip tcp adjust-mss 1360`
`crypto map OpenSwan`
`!`
`access-list 100 permit ip 10.1.2.0 0.0.0.255 192.168.2.0 0.0.0.255`
`ip route 0.0.0.0 0.0.0.0 54.223.170.6`
根据cisco的配置创建OpenSwan的配置如下:
`$ sudo vim /etc/ipsec.d/cisco.conf`
`conn cisco`
`authby=secret`
`auto=start`
`leftid=54.223.152.218`
`left=%defaultroute`
`leftsubnet=192.168.2.0/24`
`leftnexthop=%defaultroute`
`right=54.223.170.5`
`rightsubnet=10.1.2.0/24`
`keyingtries=%forever`
`ike=aes128-sha1;modp1024`
`ikelifetime=86400s`
`phase2alg=aes128-sha1`
`salifetime=3600s`
`pfs=no`
配置解释:
leftid 标明本地对应公网IP
letftsubnet为本地子网
right为对端公网地址
rightsubnet为对端子网
ike为第一阶段参数
ikelifetime为第一阶段的生存时间
phase2alg为第二阶段参数
salifetime为第二阶段生存时间
结果如下图:
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-12.png)
配置预共享密钥:
`$ sudo vim /etc/ipsec.d/cisco.secrets`
54.223.152.218 54.223.170.5: PSK “aws123”
启动openswan服务并做配置检查
`$ sudo service ipsec start`
`$ sudo ipsec verify`
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-13.png)
3.3 修改系统参数
更改系统参数做IP转发并关闭重定向功能
编辑/etc/sysctl.conf内核配置文件,做如下修改
`$ vim /etc/sysctl.conf`
`$ vim /etc/sysctl.conf`
`net.ipv4.ip_forward = 1`
`net.ipv4.conf.all.accept_redirects = 0`
`net.ipv4.conf.all.send_redirects = 0`
`net.ipv4.conf.default.send_redirects = 0`
`net.ipv4.conf.eth0.send_redirects = 0`
`net.ipv4.conf.default.accept_redirects = 0`
`net.ipv4.conf.eth0.accept_redirects = 0`
配置完成以后,启用新的配置
`$ sudo sysctl –p`
3.4 更改 OpenSwan 的网卡 MSS 值
`$ sudo iptables -t mangle -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1387`
3.5 修改 VPC 私有子网路由表
找到VPC Console页面,在左侧点路由表,找到192.168.2.0/24关联的路由表(1.3中创建), 在页面下方点击路由,编辑
添加其他路由,
目标: 10.1.2.0/24
目标:OpenSwan实例ID (i-xxxxx)
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/1101-14.png)
4. 测试连通性
以上步骤都完成以后,就可以在192.168.2.0网段的实例进行测试了。使用 ping 测试到 10.1.2.x private 私有地址段的一个地址。
`ping 10.1.2.3`
检查 IPsec tunnel 状态:
`$ sudo service ipsec status`
`IPsec running - pluto pid: 25674`
`pluto pid 25674`
`1 tunnels up`
`some eroutes exist`
### 常见问题及排错
1. IPsec Tunnel 没有正常建立
首先检查到对端 IP 是否可以通信,检查安全组是否放行 IKE 需要的端口 UDP 500。如果网络层没问题,检查各项参数配置是否有错误。
2. 隧道建立成功,但是无法进行通信
首先检查 IP forward 是否设置为 1?VPN 实例安全组是否放行了相应的策略?路由是否正确?NAT 是否影响?
3. NAT 问题
如果您的 CGW 配置了 NAT 与 VPN 工作,根据厂家不同对 VPN 包的处理顺序不一致,如果源 NAT 在 VPN 之前被处理了,因为源地址发生了改变,所以也就不会再被 VPN 处理,造成通信失败。像 Cisco 设备就需要做 NAT 的例外策略。主流的 Cisco ASA 就需要做相应修改,参考如下:
8.2 及以前的版本:
`nat (inside) 0 access-list nat_exemption`
` access-list nat_exemption extended permit ip 192.168.1.0 255.255.255.0 10.0.0.0 255.255.255.0`
8.3 及更新的版本:
`object network obj-192.168.1.0`
`subnet 192.168.1.0 255.255.255.0`
`object network obj-10.0.0.0`
`subnet 10.0.0.0 255.255.255.0`
`nat (inside,any) source static obj-192.168.1.0 obj-192.168.1.0 destination static obj-10.0.0.0 obj-10.0.0.0 no-proxy-arp`
如果您经过以上步骤还是不能成功搭建 VPN,AWS Support 提供专业化的技术支持,可根据您当前或计划的使用案例为您提供一套独特的工具和专业知识。建议您开案例联系Support 技术支持。
**作者介绍:**
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/Hou+Ryan.PNG)
侯晓鹏
亚马逊AWS云支持工程师,多年从事网络相关支持以及架构咨询工作,在加入 AWS 以前曾担任 Juniper 高级咨询专家,负责为企业网及运营商提供专业架构咨询及网络优化工作。现任亚马逊云支持工程师,AWS 认证 Direct Connect 服务专家。多次帮助大规模企业客户解决混合云复杂技术及架构问题。
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/openswan-vpn-solutions/
更多内容推荐
物联网场景中灵活实施对设备的控制管理
随着 Amazon IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。在以往简单的应用场景中,控制端 APP 仅仅需要使用 Amazon IoT 平台对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 APP 需要同时控制多个设备。
2021-12-25
RabbitMQ 补偿机制、消息幂等性解决方案
如何保证消息的可靠性投递?即如何确定消息是否发送成功? 如果失败如何处理(补偿机制)? 如何保证消息不被重复消费?或者说,如何保证消息消费时的幂等性?
2022-04-10
31|网络通信:CNI 是怎么回事?又是怎么工作的?
针对Docker的跨主机通信网络缺陷,Kubernetes提出了自己的网络模型IP-per-pod,让Pod摆脱了主机的硬限制,适应集群系统的网络需求。
2022-09-02
云原生时代的强强联合:EMQ 映云科技正式加入 AWS 合作伙伴计划
近日,EMQ 映云科技正式加入 AWS 合作伙伴网络 (AWS Partner Network,以下简称 APN) ,成为 AWS(亚马逊云科技)官方认证合作伙伴。
2021-10-18
基于 IT 技术的开放式无线接入网,到底可不可行?
基于IT技术的开放式无线接入网到底可不可行?让我们一起来探讨一下。
2021-06-23
AWS Support Plan
介绍AWS Support Plan
2022-07-18
中国金融科技权威盛会点赞了这个来自 AWS 的金融行业解决方案
Amazon Web Services (AWS) 金融解决方案在 2020 中国金融科技年会暨第十一届金融科技及服务优秀创新奖颁奖典礼上,荣获业内创新大奖。
2021-01-09
其他半导体公司:美国双通与欧洲双雄
半导体公司前十名,除Intel、三星、台积电、英伟达、TI之外,还有这些公司你可以了解
2021-06-11
AWS x 德勤 | “三步走”策略,赋能企业打造洞察驱动型组织
早在 2015 年便成为 AWS 核心级全球咨询合作伙伴的德勤管理咨询(以下简称“德勤”),始终关注 Amazon Web Services (AWS) 最新发布的各项服务。
2021-01-05
146|微信认证:关于小程序公众号开放平台等帐号认证
2020-12-21
加餐一 | 这 5 本关于物联网的好书,值得一读
今天,我会为你推荐5本非常值得读的书,如果你想从事物联网行业,一定不要错过。
2020-12-09
物联网场景中灵活实施对设备的控制管理
随着 Amazon IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。在以往简单的应用场景中,控制端 APP 仅仅需要使用 Amazon IoT 平台对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 APP 需要同时控制多个设备。
2022-01-13
加餐四 | 5G 技术将如何推动物联网的发展?
5G是我们非常关注的通信技术,它蕴含着巨大的产业机会。
2021-01-08
如何获得一场黑客马拉松的胜利?听听 AWS 特约评委怎么说
5月9日,以“码力集结,与众不凡”为主题的FinClip Hackathon 圆满结束!本次开发大赛吸引了来自各行业的2000多名移动开发者汇聚一堂,150位参赛选手同台竞技,共同探索「小程序 」技术的能力边界。
2022-05-30
AWS CEO 再回应:不会从亚马逊剥离,可能会继续收购
其多年来已经投资了数十家小公司。
开源工具系列 3:Prowler
Prowler 是一个命令行工具,可帮助您进行 AWS 安全评估、审计、强化和事件响应。
2023-02-06
利用亚马逊云科技整个自用免费网盘
现在在线网盘挺多的,用网盘在线存储的好处我也不多说了,主要就是方便,但是如果不嫌累的话,随身带个硬盘到处跑到也可以。最近发现再 AWS 上竟然可以搭建一个基础的免费网盘,感觉挺有意思,于是寻思着尝试一下,一方面是熟悉 AWS 的服务使用过程,另外一方
2022-03-25
大中华区联合企业捷成集团在 AWS 上使用 F5 防御恶意 Web 攻击
为了确保在当今竞争激烈的商业环境中占据领先地位,集团在 AWS 环境中利用 F5 高级 Web防火墙(F5 Advanced Web Application Firewall, WAF) 来实现快速扩展和增强安全性,同时显著降低了成本
2023-02-27
AWS CEO Adam Selipsky 演讲 Keynote @ re:Levent2022
Join Adam Selipsky, CEO of Amazon Web Services, as he looks at the ways that forward-thinking builders are transforming industries and even future, powered by AWS. He highlights innovations in data, infrastructure, security, and more that
2022-12-05
AWS DataSync 支持在 AWS、Google Cloud 和 Azure 之间移动数据
亚马逊最近宣布,AWS DataSync现在支持将Google Cloud Storage和Azure Files存储作为存储位置。数据服务的这两个新选项有助于数据在AWS中的移入和移出,但数据传输费用可能仍然是一个限制条件。
推荐阅读
Ruby on Rails 之父闹着要下云,亚马逊 CEO:我们将重视“降本增效”
AWS CodeWhisperer 上手初体验安装与使用
2023-06-06
轻松玩转 70 亿参数大模型!借助 Walrus 在 AWS 上部署 Llama2
2023-08-23
以史鉴今:监控是如何一步步发展而来的?
2022-09-14
直播预告|一站式 MLOps meetup,洞见行业前沿!聆听第四范式、AWS、腾讯、百度的 MLOps 落地、演进、实践经验
2023-03-23
01|拨云见日——云上架构一点儿也不神秘
2022-09-21
10|小试牛刀(二):如何突破 VPC 网络的速度限制?
2022-09-19
电子书
大厂实战PPT下载
换一换 汪源 博士 | 网易 副总裁,杭州研究院执行院长,互联网技术委员会主席,网易数帆总经理
代铁 | 北京银行 软件开发中心副总经理
朱红林 | OPPO 软件工程部/安全专家
评论