AWS攻略——初识流量镜像

news2025/7/16 21:28:44

在实际应用场景下,我们可能需要建立一个测试环境,既能接线上流量,又不希望影响线上业务,这个时候流量镜像就派上用场。它会将一个网络接口中的流量复制到另外一个网络接口中,然后在后者上分发,而前者不受影响。
在这里插入图片描述
在上图中我们可以看到,复制过来的流量会被转换——转换成vxlan协议的UDP流量。这个现象就导致测试环境的接口和生产环境不一致——这并不是我们希望的——我们希望部署在测试环境和生产环境上的代码或程序是一样的。
在这里插入图片描述

为了解决这个问题,我们需要加一个中间层:把UDPvxlan协议转回去,并分发到测试环境。
在这里插入图片描述
现在我们在AWS上完成上述设计。

创建VPC和EC2

选择区域和IPv4/CIDR

创建一个100.0.0.0/24的VPC,名字叫TrafficMirrorVpc。
在这里插入图片描述

分配子网

我们将分配一个Public类型子网TrafficMirrorSourcePublicSubnet,用于接收互联网流量。它下面实例的流量将会被复制到名字叫TrafficMirrorAdapterPrivateSubnet子网下的实例。经过转换,流量会被发送给TrafficMirrorTargetPrivateSubnet子网下的实例。我们在TrafficMirrorSourcePublicSubnet和TrafficMirrorTargetPrivateSubnet子网下部署的实例的程序是一样的,这样前者模拟线上环境,后者模拟测试环境。
在这里插入图片描述

子网名称IPv4/CIDR区域
TrafficMirrorSourcePublicSubnet100.0.0.0/28eu-west-1a
TrafficMirrorAdapterPrivateSubnet100.0.0.16/28eu-west-1a
TrafficMirrorTargetPrivateSubnet100.0.0.32/28eu-west-1a

在这里插入图片描述

创建EC2

这儿需要注意一点,被镜像流量的实例需要是基于AWS Nitro System的。适配的类型可以见:https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances。我们选择相对便宜的t3.nano类型来做测试。
我们会对公网下的TrafficMirrorSourceEC2开启自动分配公有IP的功能。因为我们既要在互联网上对其发送流量,也需要把它作为跳板机跳转到其他两个私有网络下的EC2上,以方便部署代码。

实例名所属子网实例类型是否自动分配公有IP
TrafficMirrorSourceEC2TrafficMirrorSourcePublicSubnett3.nano
TrafficMirrorAdapterEC2TrafficMirrorAdapterPrivateSubnett3.nano
TrafficMirrorTargetEC2TrafficMirrorTargetPrivateSubnett3.nano

私有子网访问互联网(单向)

这个不是必须步骤。主要是为了让TrafficMirrorAdapterPrivateSubnet和TrafficMirrorTargetPrivateSubnet子网下EC2实例可以访问外网,以方便部署代码。

部署NAT网关

在这里插入图片描述

修改路由表

创建一个给Private网络的路由。
在这里插入图片描述
然后配置路由
在这里插入图片描述

路由关联私有子网

在这里插入图片描述

打通公有子网和互联网

创建互联网网关,并关联到VPC

在这里插入图片描述

公有子网路由到互联网网关

在这里插入图片描述

设定ACL

因为默认的ACL只允许22端口访问,而TrafficMirrorSourcePublicSubnet子网下机器需要开放80端口以供外网测试,且TrafficMirrorAdapterPrivateSubnet需要响应4789端口的UDP请求,所以我们将对各个子网的ACL进行定制。

定制生产/测试环境ACL

主要开启22端口和80端口,源地址选择任意。它主要给TrafficMirrorSourcePublicSubnet和TrafficMirrorTargetPrivateSubnet使用。
在这里插入图片描述
在这里插入图片描述
这儿需要注意的是,针对两个子网开启所有TCP连接,否则SSH会失败。
在这里插入图片描述
在这里插入图片描述

定制转换层ACL

主要开放UDP协议的4789端口,是给TrafficMirrorAdapterPrivateSubnet使用。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

修改安全组

对TrafficMirrorAdapterEC2新增UDP 4789

在这里插入图片描述

对TrafficMirrorSourceEC2新增80端口支持

在这里插入图片描述

对TrafficMirrorTargetEC2新增80端口支持

在这里插入图片描述

部署Adapter层

通过公网下的EC2跳板机,我们登录到TrafficMirrorAdapterEC2,执行下面的命令

sudo yum update -y
sudo yum install git -y
sudo yum install go -y
sudo yum install libpcap-devel -y
go env GOPATH
export HOME=~
echo 'export GOPATH=$HOME/go' >>~/.bash_profile
source ~/.bash_profile
mkdir -p $GOPATH"/src/vxlan-to-http-request"
wget https://github.com/aws-samples/http-requests-mirroring/raw/main/main.go -P $GOPATH"/src/vxlan-to-http-request"
cd $GOPATH"/src/vxlan-to-http-request"
go mod init vxlan-to-http-request
go get "github.com/google/gopacket"
go mod tidy
go build ./
go install vxlan-to-http-request
sudo ip link add vxlan0 type vxlan id 1 dev eth0 dstport 4789
sudo ip link set vxlan0 up

这儿特别需要注意下倒数第二行 vxlan id 1这个,需要和后续创建的流量镜像Session的VNI值一致(即也设置为1)。
然后这么执行程序(其中100.0.0.37是TrafficMirrorTargetEC2的IP)

sudo ./vxlan-to-http-request -destination "http://100.0.0.37" -filter-request-port "80"

创建流量镜像

创建筛选条件

我们只检测80端的入站流量
在这里插入图片描述

创建目标

我们需要把流量镜像到Adapter层EC2的网络接口。
在这里插入图片描述
在这里插入图片描述

创建镜像会话

源我们选TrafficMirrorSourceEC2的网络接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

我们在生产环境TrafficMirrorSourceEC2和测试环境TrafficMirrorTargetEC2上启动一个简单的http服务。

sudo python3 -m http.server 80

在这里插入图片描述
在这里插入图片描述

可以看到两个环境收到了一致的请求。

总结

整个配置过程其实比较简单。只是因为要测试,且对ACL、安全组要求比较严格,导致很多设置。
最最需要注意的是我们在创建镜像会话时,要记住VNI的值,然后保证其和下面${TrafficMirroringVNI}值一致。

sudo ip link add vxlan0 type vxlan id ${TrafficMirroringVNI} dev eth0 dstport 4789
sudo ip link set vxlan0 up

参考资料

  • https://aws.amazon.com/cn/blogs/networking-and-content-delivery/mirror-production-traffic-to-test-environment-with-vpc-traffic-mirroring/
  • https://github.com/aws-samples/http-requests-mirroring
  • https://docs.aws.amazon.com/zh_cn/vpc/latest/mirroring/what-is-traffic-mirroring.html
  • https://aws.amazon.com/cn/blogs/networking-and-content-delivery/using-vpc-traffic-mirroring-to-monitor-and-secure-your-aws-infrastructure/
  • https://towardsaws.com/amazon-vpc-deep-dive-on-vpc-traffic-mirroring-feature-a129e8a0132e
  • https://aws.amazon.com/cn/blogs/aws/new-vpc-traffic-mirroring/
  • https://aws.amazon.com/cn/ec2/nitro/
  • https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AQS 源码解读

一、AQS AQS 是 AbstractQueuedSynchronizer 的简称,又称为同步阻塞队列,是 Java 中的一个抽象类。在其内部维护了一个由双向链表实现的 FIFO 线程等待队列,同时又提供和维护了一个共享资源 state ,像我们平常使用的 ReentrantLo…

OpenCV-PyQT项目实战(12)项目案例08:多线程视频播放

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列,持续更新中 OpenCV-PyQT项目实战(1)安装与环境配置 OpenCV-PyQT项目实战(2)QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战(3)信号与槽机制 …

配置Clion用于STM23开发(Makefile)

前言 对于Clion配置STM32开发环境的教程在网上一搜一大堆,但是大部分都是22年之前的,使用的方法都是在STM32CubeMX生成SW4STM32工程。但是在22年不知道哪个版本后,CubeMX已经不再支持生成SW4STM32工程了,这也是我本人遇到的问题。…

10 Wifi网络的封装

概述 Wifi有多种工作模式,比如:STA模式、AccessPoint模式、Monitor模式、Ad-hoc模式、Mesh模式等。但在IPC设备上,主要使用STA和AccessPoint这两种模式。下面分别进行介绍。 STA模式:任何一种无线网卡都可以运行在此模式,这种模式也是无线网卡的默认模式。在此模式下,无线…

【算法】图的存储和遍历

作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下🐾 文章目录1. 图的存储1.1 邻接矩阵1.2 邻接表2. 图的遍历2.1 dfs 遍历2.2 bfs 遍历1. 图的存储 引入 一般来说,树和图有两种存储方式&#…

【Java】Mybatis查询数据库

文章目录MyBatis查询数据库1. MyBatis 是什么?2. 为什么要学习MyBatis?3. 怎么学MyBatis?4. 第一个MyBatis查询4.1 创建数据库和表4.2 添加MyBatis框架支持4.3 配置连接字符串和MyBatis4.3.1 配置连接数据库配置MyBatis中的XML路径4.4 添加业…

宝刀未老?VB语言迎来春天,低代码绝地逢生,程序员能淡定吗?

一、VB语言迎来春天 “VB语言过时了,早就淘汰了”,不少程序员认为,如今VB上不了台面。 有人说:VB是被微软砍掉的优秀产品之一,当年还和Delphi打对台来着, 那时候真的是如日中天! 颠覆许多人认知的是28年过…

postgre8.3跨平台升级大版本的一些问题以及解决方式

背景: 因服务器升级(Windows Server 2012-> 2019),服务器非直接版本升级,而是从一台2012直接移植到2019,考虑到以后可能还会升级更高版本,因此postgre8.3版本需要升级到新版本,当前时间postg…

知识蒸馏论文阅读:DKD算法笔记

标题:Decoupled Knowledge Distillation 会议:CVPR2022 论文地址:https://ieeexplore.ieee.org/document/9879819/ 官方代码:https://github.com/megvii-research/mdistiller 作者单位:旷视科技、早稻田大学、清华大学…

SpringCloud (Eureka服务注册、发现)

本章导学: 微服务各个服务如何调用?服务直接调用出现的问题Eureka的引出及其作用搭建单机Eureka 注册发现一、微服务各个服务之间的调用 很简单,我们只需要在SpringBoot的配置类里把RestTemplate类加载到容器,利用RestTemplate的…

【目标检测 DETR】通俗理解 End-to-End Object Detection with Transformers,值得一品。

文章目录DETR1. 亮点工作1.1 E to E1.2 self-attention1.3 引入位置嵌入向量1.4 消除了候选框生成阶段2. Set Prediction2.1 N个对象2.2 Hungarian algorithm3. 实例剖析4. 代码4.1 配置文件4.1.1 数据集的类别数4.1.2 训练集和验证集的路径4.1.3 图片的大小4.1.4 训练时的批量…

idea 2022.2.4 导入依赖警告的问题

在我导入依赖的时候,pom文件提示警告如下信息 Provides transitive vulnerable dependency commons-collections:commons-collections:3.2.2 Cx78f40514-81ff 7.5 Uncontrolled Recursion vulnerability pending CVSS allocation Results powered by Checkmarx(c) …

第十二章:网络编程

第十二章:网络编程 12.1:网络编程概述 ​ Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 ​ Java提供的网络类库,可以实现无痛的网络连接,…

【项目精选】基于struts+hibernate的采购管理系统

点击下载 javaEE采购管理系统 本系统是一个独立的系统,用来解决企业采购信息的管理问题。采用JSP技术构建了一个有效而且实用的企业采购信息管理平台,目的是为高效地完成对企业采购信息的管理。经过 对课题的深入分析,采购系统需实现以下功能…

秒懂算法 | DP概述和常见DP面试题

动态(DP)是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。本篇内容介绍了DP的概念和基本操作;DP的设计、方程推导、记忆化编码、递推编码、滚动数组以及常见的DP面试题。 01、DP概述 1. DP问题的特征 下面以斐波那…

在找docker命令和部署?看这一篇文章就够了。

一、docker 常用命令 docker ps -a #查看所有容器 docker images #查看所有images docker search rabbitmq #搜索rabbitmq docker pull rabbitmq #拉去rabbitmq docker run -id --namemy_rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq # 创建一个容器并启动 docker exec -it…

数据结构算法学习记录——线性表之单链表(上)-初始单链表及其头插函数(顺序表缺陷、单链表优点、链表打印)

单链表的概念单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的。每个结点的构成:元素(数据元素的映象) 指针(指示后继元素存储位置)。元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示的线性…

Ubuntu安装Docker

一、安装条件1.操作系统要求需要以下 Ubuntu 版本之一的 64 位版本:Ubuntu Kinetic 22.10Ubuntu Jammy 22.04 (LTS)Ubuntu Focal 20.04 (LTS)Ubuntu Bionic 18.04 (LTS)二、安装1.要是之前安装过,可以进行卸载然后再安装,旧版本的 Docker 的名…

_Linux (传输层一版本)

文章目录0. 传输层作用1. 再谈端口号1-1 端口号范围划分1-2 认识知名端口号(Well-Know Port Number)1-3 两个问题1-4 netstat1-5 pidof2. UDP协议2-1 UDP协议端格式1. UDP协议如何分离(封装)?2. UDP协议如何交付(应用层- - 客户&a…

什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机

现如今,很多蓝牙耳机的产品都在不断地更新,市面上的耳机也是越来越普及,可以说是成为我们日常生活中不可或缺的一类电子设备,下面介绍一些佩戴舒适性好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 音质推荐指数:★★★★★…