写点什么

使用 Docker 封装 IPSec 安全网关

  • 2019-11-20
  • 本文字数:2329 字

    阅读完需:约 8 分钟

使用Docker封装IPSec安全网关
随着云成为新常态,越来越多的客户开始采用AWS云服务,使用VPN隧道安全的连接到AWS成为一个常见的场景。本文介绍一种仅需少量交互与配置即可与多个AWS VPC建立动态路由VPN连接并在各个互联VPC之间转发流量的方案。该方案主要使用了Docker、IPSec套件strongSwan、动态路由软件BIRD,并在此基础上,使用AWS SDK for Python( Boto 3)、docker-py等实现快速建立与AWS VPC的动态VPN。


项目中使用的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之前,历任数字媒体娱乐系统工程师、宽带业务架构师、云解决方案架构师,负责数字媒体娱乐系统、云计算解决方案等服务的咨询和架构设计工作。
复制代码


TAGS:


AWS VPC


,


Docker


,


大咖专栏


,


安全


,


网络和内容发布


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/ipsec-docker/


2019-11-20 08:001177

评论

发布
暂无评论
发现更多内容

最新财务机器人品牌榜:5大维度评出谁是真正的智能助手

Techinsight

数据传输中的三大难题,ETL 平台是如何解决的?

谷云科技RestCloud

数据处理 数据传输 数据同步 ETL 数据集成工具

从“分散”到“统一”,中控技术利用SeaTunnel构建高效数据采集框架,核心数据同步任务0故障运行!

白鲸开源

开源 数据同步 数据集成 Apache SeaTunnel 中控技术

Kafka4.0 可观测性最佳实践

观测云

kafka

Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录

白鲸开源

Java 大数据 ubuntu 开源 Apache DolphinScheduler

Aloudata AIR 推出 AI 数据画布:「拖拽+对话」即可实现跨源数据加工与查询

Aloudata

数据分析 数据开发 智能开发 数据编织

白鲸开源“创客北京2025”再摘殊荣,聚焦Agentic AI时代数据基础设施建设

白鲸开源

大数据 开源 DataOps 白鲸开源 WhaleStudio

百分点科技BD-OS获华为鲲鹏认证,全栈信创助推政企智能升级

百分点科技技术团队

APP弱网测试完整攻略【国庆出游特辑版】

优测云服务平台

弱网测试

如何实现高效的日志收集与管理?

运维有小邓

用Comate Zulu开发一款微信小程序

Comate编码助手

微信小程序 AI 编程 文心快码 文心快码Zulu

Mermaid代码怎么变成流程图?6个Mermaid在线生成器盘点

职场工具箱

人工智能 流程图 Ai绘图 Mermaid AI生成流程图

从负荷分析定项目运维要点

Tecjt_锦图科技

破解云VR教育普及难题:点量实时云渲染——实现跨终端无界协同

点量实时云渲染

3D渲染 vr 云渲染 虚拟现实 #云计算

教你数分钟内创建并运行一个 DolphinScheduler Workflow!

白鲸开源

Java 大数据 开源 Apache DolphinScheduler 任务调度

为什么说 iPaaS 是企业数字化转型的加速器?

谷云科技RestCloud

数据处理 数据传输 集成平台 ipaas

K8s Application模式下的flink任务执行精要

天翼云开发者社区

k8s 计算

免费学习优秀作品!和鲸支持 2025 年第 18 届中国大学生计算机设计大赛大数据主题赛圆满收官!

ModelWhale

中国大学生计算机设计大赛 大数据主题赛

App 加载慢到崩溃?三招帮你彻底告别 “转圈圈”!

xuyinyin

亮相2025年服贸会,天翼云打造高质量算力服务新生态!

天翼云开发者社区

云计算

5 分钟 SAE 极速部署 Dify,赢取户外折叠椅和社区积分

阿里巴巴云原生

阿里云 Serverless 云原生 dify

小份数GEO服务助力中小企业

跑一跑

AI geoai

天翼云第九代弹性云主机:让每一次计算快人一步

天翼云开发者社区

云主机

抢先体验智能测试时代,QA必备AI测试工具

测试人

人工智能 软件测试

非凸智能算法上线华福证券,打造高效交易新范式

非凸科技

电能管理系统(源码+文档+讲解+演示)

深圳亥时科技

#开源

有点意思!Java8后最有用新特性排行榜!

王磊

Yolo模型训练的第一个Step

Jason黄

yolo

再见 Cursor,Qoder 真香!这波要改写 AI 编程格局

阿里巴巴云原生

阿里云 云原生 Qoder

【RFID智能工具柜哪家好】企业如何选到高效可靠的工具管理系统?

斯科信息

斯科信息 RFID智能工具柜

使用EventLog Analyzer进行日志取证分析

运维有小邓

使用Docker封装IPSec安全网关_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章