项目中使用的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/
更多内容推荐
AWS Inspector
介绍一个AWS的安全类服务 - Amazon Inspector
2022-07-14
开源工具系列 3:Prowler
Prowler 是一个命令行工具,可帮助您进行 AWS 安全评估、审计、强化和事件响应。
2023-02-06
2.Docker client
2023-09-30
揭秘亚马逊内部与众不同的软件开发系统
亚马逊有大量的内部系统。本文介绍了软件工程师和工程经理有必要了解的那些。
1. 初识 docker
2023-09-30
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
StarRocks on AWS 回顾 | Data Everywhere 系列活动深圳站圆满结束
7 月 30 日,StarRocks 解决方案架构师王天宜受邀出席 AWS User Group Data Everywhere 主题活动,分享了 StarRocks 如何对实时数仓进行极速统一分析。
2022-08-10
更多 openEuler 镜像加入 AWS Marketplace!
自2023年7月openEuler 22.03 LTS SP1正式登陆AWS Marketplace后,openEuler社区一直持续于在AWS上提供更多版本。
2023-08-16
3、Nginx 配置文件详解
2023-09-28
8、Nginx 应用实战之负载均衡应用
2023-09-28
利用亚马逊云科技整个自用免费网盘
现在在线网盘挺多的,用网盘在线存储的好处我也不多说了,主要就是方便,但是如果不嫌累的话,随身带个硬盘到处跑到也可以。最近发现再 AWS 上竟然可以搭建一个基础的免费网盘,感觉挺有意思,于是寻思着尝试一下,一方面是熟悉 AWS 的服务使用过程,另外一方
2022-03-25
10、Nginx 应用实战之虚拟主机应用
2023-09-28
1、Nginx 概述及 web server 技术选型
2023-09-28
Amazon CodeWhisperer(亚马逊云 AI 大模型下应用创新——自动代码生成插件:AWS toolkit)以 IntelliJ IDEA 2023.1 为例的实测使用
Amazon CodeWhisperer(亚马逊云AI大模型下应用创新——自动代码生成插件:AWS toolkit)以IntelliJ IDEA 2023.1为例的实测使用
2023-11-09
AWS 的运营管理类服务
AWS管理运营类典型服务
2022-06-20
Amazon Aurora 读写能力扩展之 ShardingSphere-JDBC 篇
文章来源亚马逊 AWS 官方博客
2022-04-27
MongoDB 挖走 8 名知名云厂商高管, 行业竞争加剧
亚马逊与 MongoDB 的战争升温。
AWS 上关于云计算,大数据,人工智能的介绍
本文主要介绍了AWS上对云计算,大数据,人工智能的理解以及三者之间的关系的简单解释
2023-08-29
AWS CEO 再回应:不会从亚马逊剥离,可能会继续收购
其多年来已经投资了数十家小公司。
AWS CodeWhisperer 上手初体验安装与使用
代码生成器最近有点多,为了提高效率最近在我的 VSCode 上先后安装了 Bito、Codeium、Tabnine AI Assistant 等等,还有本文中刚有 AWS 推出的 CodeWhisperer。接下来就来看看这款 AI 代码生成器如何使用吧。
2023-06-06
推荐阅读
AWS Batch 为大规模模拟引入了多容器作业
7.Docker 进阶
2023-09-30
4.Docker 镜像
2023-09-30
WordPress 基于亚马逊云的部署实践(二)- 资源申请
2023-11-19
24|提示语工程(六):超越智能,让你的 AI 系统成为全知超人
2023-10-13
AWS Cloudshell 现在可以访问 Docker Engine
亚马逊云科技 CEO 将离职:“云的未来是光明的”
电子书
大厂实战PPT下载
换一换 黄然 | 华为 终端BG软件部OpenHarmony部经理
冯新宇 | 华为 编程语言首席专家
赵军平 | 蚂蚁集团 基础智能-AI Infra 异构计算负责人
评论