项目中使用的Dockerfile、相关的shell脚本以及Python应用等源文件均已经在这里开放,做为一种快速部署Customer Gateway的方法,供各位读者参考。
本文假定读者从概念上理解AWS VPC、IPSec VPN以及动态路由协议BGP。如果希望了解更多如何与AWS VPC建立VPN连接的信息,读者可以参考 AWS VPC 网络管理员指南。
**如何使用**
我们从最基本的场景开始,假定您需要将本地网络与单个AWS VPC通过IPSec隧道互联。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-1.png)
图中Customer Gateway应为一台可以访问Internet且IP固定的 Linux服务器, 这台服务器将作为IPSec网关和BGP路由器,将内部网络与AWS VPC通过IPSec隧道和BGP动态路由协议连接起来。
在Customer Gateway上执行如下预备工作:
一、我们需要 预先安装和配置好docker引擎;
二、我们的脚本使用了Python和一些第三方库,所以需要安装Python 2.7或更新版本以及Python包管理工具,例如pip
三、通过pip安装如下软件包;
a. boto3 —— AWS SDK for Python,用于获取VPN连接的配置信息
b. xmltodict —— 便于python处理XML格式的数据
c. docker-py —— 用于连接docker engine并创建、运行容器
四、配置boto3连接AWS的 IAM凭证,需要注意使用的IAM用户需要拥有执行describe_vpn_connections API所需的权限。
$ cat ~/.aws/credentials
[default]
aws_access_key_id = YOUR_KEY
aws_secret_access_key = YOUR_SECRET
**建立连接**
参照AWS VPC用户指南中关于“设置VPN连接”章节的指导,完成如下步骤:
步骤一、创建虚拟专用网关,附加到目标VPC并启用路由传播;
步骤二、创建客户网关,输入Customer Gateway的公网IP地址,选择动态路由,并输入65000作为本地网络的BGP ASN号;
步骤三、创建虚拟专用网关和客户网关之间的VPN连接,每个VPN连接包含两条相护冗余的VPN隧道;
步骤四、在Customer Gateway上执行peer.py 脚本,传入目标VPC所在的region名称和vpn连接id,该脚本将会调用AWS API下载指定的VPN连接的配置信息、然后连接Docker Engine创建cgw 容器并将关键参数作为环境变量传入容器;
步骤五、cgw容器会根据传入的环境变量完成自举并发起到AWS侧虚拟专用网关的2条动态路由VPN连接。
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-2.jpg)
**CGW容器的实现**
正常的容器运行中的进程信息可见下图![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-3.png)
可以看到容器中共有4个进程,其功能分别为:
一、cgw.sh 容器启动脚本,主要在容器开始运行时完成以下动作;
a. 根据传入的环境变量生成strongSwan、BIRD的配置文件
b. 配置virtual tunnel interface以便将两条ipsec隧道暴露给动态路由软件
c. 拉起strongSwan、BIRD
二、strongSwan守护进程,负责与虚拟专用网关协商和交换加密、解密密钥、调用Linux内核中IPSec相关的系统调用设定隧道;
三、BIRD守护进程;
a. 与虚拟专用网关的两个端点分别建立BGP邻居关系并以10秒的间隔持续检测对端是否健康
b. 与本地网络中其他路由器建立BGP邻居关系并将路由信息发布到本地网络和AWS VPC;实现本地网络与AWS VPC的互通
c. 当两条隧道中的一条由于某种原因发生故障,BIRD会检测到邻居状态的改变从而自动将流量切换到另外一条健康的隧道中去,从而实现了VPN连接的冗余
**扩展性和可用性**
一、如果需要与多个不同的VPC建立多条VPN连接,那么只需要重复前面建立连接的步骤在同一台服务器上创建多个cgw容器,分别建立与不同的虚拟专用网关的VPN连接即可。如下图所示
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-4.jpg)
但是要做到不同VPC之间的流量互通,我们还需要在多个cgw容器之间建立iBGP邻居关系。传统的iBGP互联要求full mesh,这里我们为了简化部署和配置,可以在容器所在服务器上运行BIRD并将其配置为路由反射器,所有cgw容器都与路由反射器建立邻居关系并学习到其他容器、隧道的路由信息,从而实现多个VPN连接之间的流量互通。
二、如果需要保证高可用,需要在不同的VPN网关之间实现互为备份,那么可以通过运行两台物理服务器,各自建立与AWS VPC的VPN连接,通过动态路由协议来实现故障流量切换;
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-5.jpg)
三、如果需要进一步增大吞吐量,超出单个服务器的可用带宽的情况下,我们可以将cgw容器分散到多个物理服务器上实现水平扩展;同样的,在服务器之间需要建立iBGP邻居关系并交换路由信息;
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/0526-6.jpg)
**作者介绍:**
![](https://s3.cn-north-1.amazonaws.com.cn/images-bjs/Ding+Chandler.jpg)
丁成银
亚马逊AWS解决方案架构师,获得AWS解决方案架构师专业级认证和DevOps工程师专业级认证。负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广,在数字媒体、电信、互联网和游戏、企业混合IT等方面有着丰富的实践和设计经验。在加入AWS之前,历任数字媒体娱乐系统工程师、宽带业务架构师、云解决方案架构师,负责数字媒体娱乐系统、云计算解决方案等服务的咨询和架构设计工作。
本文转载自 AWS 技术博客。
原文链接:
https://amazonaws-china.com/cn/blogs/china/ipsec-docker/
更多内容推荐
01|拨云见日——云上架构一点儿也不神秘
2022-09-21
Amazon Aurora 读写能力扩展之 ShardingSphere-JDBC 篇
文章来源亚马逊 AWS 官方博客
2022-04-27
利用亚马逊云科技整个自用免费网盘
现在在线网盘挺多的,用网盘在线存储的好处我也不多说了,主要就是方便,但是如果不嫌累的话,随身带个硬盘到处跑到也可以。最近发现再 AWS 上竟然可以搭建一个基础的免费网盘,感觉挺有意思,于是寻思着尝试一下,一方面是熟悉 AWS 的服务使用过程,另外一方
2022-03-25
揭秘亚马逊内部与众不同的软件开发系统
亚马逊有大量的内部系统。本文介绍了软件工程师和工程经理有必要了解的那些。
AWS x 红帽 | 以客户需求为驱动,加速开放混合云落地
通过在 AWS 上使用 Red Hat OpenShift Service on AWS,企业能够快速构建云就绪应用,更轻松地采用容器技术,并拥有额外选择,从构建到部署都可以使用集成工具。
2021-01-09
四点聚焦亚马逊 2022 财报,AWS 收入 801 亿美元,同比增长 20%,年度增长率 29%
撰文/宇婷
2023-02-07
06|云净天空——谈云中负载均衡器(上)
2022-09-21
强化学习 RL AWS 自动驾驶 DeepRacer ROS 架构 易筋 ARTS 打卡 Week 71
笔者的文章:
2021-10-09
3. Docker 的核心技术(一)
2023-09-26
StarRocks on AWS 回顾 | Data Everywhere 系列活动深圳站圆满结束
7 月 30 日,StarRocks 解决方案架构师王天宜受邀出席 AWS User Group Data Everywhere 主题活动,分享了 StarRocks 如何对实时数仓进行极速统一分析。
2022-08-10
云原生时代的强强联合:EMQ 映云科技正式加入 AWS 合作伙伴计划
近日,EMQ 映云科技正式加入 AWS 合作伙伴网络 (AWS Partner Network,以下简称 APN) ,成为 AWS(亚马逊云科技)官方认证合作伙伴。
2021-10-18
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 Trusted Advisor
介绍运营管理类服务AWS Trusted Advisor。
2022-07-14
RFO SIG:openEuler AWS AMI 制作详解
欧拉开源社区的 RFO SIG 正在努力将 openEuler 与 Rancher 整合,以推动社区的云原生版图发展,本篇将主要介绍 openEuler AWS AMI 镜像制作的详细过程。
2022-10-24
37|我该从哪些方向了解云原生领域?
这节课,我会结合自己对云原生产品的实践和总结,带你全面了解云原生,让你未来能够更好地进行技术选型。
2023-03-03
加餐 04|谈谈容器云与和 CaaS 平台
在当今容器化呼声越来越高的场景下,容器云平台呼声也是越来越高,这节课我们就简单了解一下CaaS。
2023-01-09
AWS CEO 再回应:不会从亚马逊剥离,可能会继续收购
其多年来已经投资了数十家小公司。
2. 容器 Serverless
2023-09-27
AWS 的运营管理类服务
AWS管理运营类典型服务
2022-06-20
推荐阅读
AWS 上关于云计算,大数据,人工智能的介绍
2023-08-29
11.Docker swarm 生产部署
2023-09-30
更多 openEuler 镜像加入 AWS Marketplace!
2023-08-16
11-FastDFS 部署与使用
2023-09-28
Amazon CodeWhisperer(亚马逊云 AI 大模型下应用创新——自动代码生成插件:AWS toolkit)以 IntelliJ IDEA 2023.1 为例的实测使用
2023-11-09
自动化接口回归测试神器 AREX 使用初体验
2023-07-18
24|提示语工程(六):超越智能,让你的 AI 系统成为全知超人
2023-10-13
电子书
大厂实战PPT下载
换一换 高策 | TensorChord 联合创始人兼 CEO
叶彬 | 腾讯 星星海实验室架构师
张磊 | 字节跳动 Web Infra 前端负责人
评论