2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

使用 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:001148

评论

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

HCDG城市行·上海站 | AI-Native云数据库GaussDB实践技术沙龙总结

华为云开发者联盟

阿里小号停止续费,10 月底下架 App;音频技术公司 Bragi 联合 OpenAI 为第三方耳机引入 GPT 语音助手丨日报

声网

YOLOv8视觉AI项目实战 | 二维码图像识别与定位系统开发全流程

申公豹

人工智能

深度强化学习在异构环境中AI Agent行为泛化能力研究

申公豹

人工智能

[鸿蒙征文] 小支同学的学习笔记《HarmonyOS 开发入门:构建首个 HelloWorld 应用》

巴库一郎

行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新

Altair RapidMiner

AI 汽车 仿真 CAE physicsAI

小红书笔记评论API响应数据解析

tbapi

小红书笔记接口 小红书API 小红书笔记数据采集 小红书笔记采集

Golang基础笔记十六之反射

Hunter熊

golang 反射

第十七章 追新词

溪抱鱼

SEO SEO 优化

什么? 这么好的产品还免费?

jimaks

安全防护

藏在数据血缘里的功能 从混乱到精准治理

郑州埃文科技

Playwright 自动化测试系列(6)| 第三阶段:测试框架集成​指南:参数化测试 + 多浏览器并行执行

测吧(北京)科技有限公司

人工智能 软件测试 自动化测试 测试开发 playwright

谷歌推出基于Gemini 2.0的机器人AI模型

qife122

人工智能 多模态模型

区块链U卡APP的测试

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

跨境电商如何通过海外舆情监测优化本地化策略

沃观Wovision

出海企业 海外舆情监控 沃观Wovision 舆情监测系统

Arthas - Java诊断利器

qife122

Java 性能分析

面向工业4.0的AI Agent多任务协作与调度系统设计

申公豹

人工智能

AI自动打标签技术 激活冷数据的核心价值

郑州埃文科技

哈尔滨等保测评:3分钟读懂核心要点

等保测评

TinyEngine 2.7版本正式发布:注册表功能重大更新,布局配置更简洁~

华为云开发者联盟

用蚂蚁百宝箱打造 “古食记”:解锁古典名著中的美食密码

阿萌

人工智能 大模型 agent 百宝箱

专家观点丨当AI遇上工程专家:谁才是智能时代的真正主角?

Altair RapidMiner

AI HPC 汽车 仿真 CAE

哈尔滨等保测评:为什么必须做?不做后果有多严重?

等保测评

时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式

TDengine

tdengine 时序数据库 idmp

智能客服驱动效率和体验升级,上海电信+昇腾AI的一次民生应用实践

脑极体

AI

基于YOLOv8的包装箱纸板破损缺陷识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

深度拆解可信数据空间双引擎

郑州埃文科技

大数据-56 Kafka Spring Boot 使用 Kafka 开发分布式消息系统详解 附代码

武子康

Java 大数据 kafka 分布式 后端

HiPreNets:通过渐进式训练实现高精度神经网络

qife122

机器学习 高精度训练

可信数据空间的医疗治理如何实践?

郑州埃文科技

【苍狮技术团队】Dify v1.7.0重磅更新:全面支持OAuth 2.0认证、插件智能升级与工作流优化,一键脚本部署,无需科学上网。

苍狮技术团队

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