系统小窝欢迎您

当前位置:系统小窝 > 系统教程 > Linux教程 >

Linux中多路镜像流量聚合和复制的处理步骤

时间:2021-04-09    来源:来了老弟    人气:

在Linux系统操作中,安全性监控和测试的过程中会遇到异常流量等问题,这就需要在Linux内核上进行多路镜像流量聚合和复制的处理了,那么要如何进行操作呢?随小编一起来学习一下吧。

架构设计

内核模块的流程比较简单,转发配置从用户态提交给内核模块,如;eth1@eth2_eth1@eth3_eth1/eth4@eth5;,这段的配置是:

来自eth1的流量,复制给eth2和eth3

来自eth1和eth4的流量,聚合给eth5

MIRROR内核模块中,只需要实现参数读取,配置分析,网卡判断(源,目的)即可。

算法、代码实现

参数输入

这段代码的功能是,将前面提到的如;eth1@eth2_eth1@eth3_eth1/eth4@eth5;这样的参数,按照;_;进行拆分,分段提交给参数设置函数;option_setup;

参数设置

这里我们把得到的参数;eth0@eth1;进行进一步的拆分,分出了源网卡eth0,目的网卡eth1,在内核模块的全局变量中,有一个结构

;__read_mostly __u8 ethout_bits[MAX_OUT] ={0};;

用来存储每个网卡对应分发的网卡号,可以这样理解,如果服务器有8个网卡,那么每个网都会有一个8位的二进制数来标明它的转发,比如eth0复制到eth1,那么ethout_bits[0]就等于01000000,以此类推,如果我要把eth0复制到其他所有网卡,就会是01111111。

同时用一个全局的8字节变量,来存储哪些网卡是镜像流量口,防止多余的资源浪费。

__read_mostly__u8 ifindex_bits = 0;

Skb包复制和转发

当Linux内核收到一个skb结构的数据包时,判断这个数据包是不是在转发列表里,也就是网卡是不是镜像源。

 

接着我用了一个循环,来遍历存储的转发目的网口,如果匹配的话,就使用skb_clone函数将数据包复制一份,然后通过dev_queue_xmit函数直接发送出去。

最后清理skb_buff结构。

启动脚本

为了方便调试和快速提交参数,可以使用如下的shell脚本:

实测效果

编译,填充参数并执行

执行sh sh.sh

Dmesg输出

 

镜像流量效果

这里可以看到流量统计由于网卡速率,时间差等,并不会100%一样,是正常的。

CPU占用

当流量已经达到400M左右的时候,CPU占用仍然比较低。

MIRROR.c源代码与pdf格式下载

上面就是Linux内核实现多路镜像流量聚合和复制的方法介绍了,如果你的交换机上可做镜像流量的端口数量有限制,又不想购买专业的设备的话,不妨试试上面介绍的方法吧。

相关文章

  • CentOS安装内核头文件的操作方法

    CentOS安装内核头文件的操作方法

    很多用户想在CentOS上安装内核投文件,其实安装方法很简单,但是在安装之前应该先查看下系统当前的内核版本,版本一样可直接安装,若版本不一样则需...
    2021-04-09 03.04.12
  • Linux查看系统已安装内核的操作方法

    Linux查看系统已安装内核的操作方法

    在Linux系统中,有些时候我们需要检查或查看下已经安装的内科列表,但是很多用户都不太清楚具体该怎么操作,那么,小编下面就给大家介绍下查看已安...
    2021-04-09 03.04.41
  • 如何修复一个Panic的Linux内核?

    如何修复一个Panic的Linux内核?

    如何修复一个Panic的Linux内核?一些用户在操作Linux系统的过程中,有时候由于操作不当,会导致Linux内核不能正常工作。最近就有一位用户由于操作问题,...
    2021-04-09 03.04.05
  • Linux系统内核崩溃如何排查?

    Linux系统内核崩溃如何排查?

    Linux内核如果奔溃,将导致Linux系统kernel崩溃,自己的电脑还好,如果是公司的电脑将造成不小的损失,下面小编就给大家介绍下Linux系统内核崩溃的排查方...
    2015-03-06 05.03.48

发表评论

验证码: 看不清?点击更换

注:网友评论仅供其表达个人看法,并不代表本站立场。