Linux镜像克隆网卡流量

Linux镜像克隆网卡流量


参考:
https://blog.51cto.com/hostman/2106155
https://www.cnblogs.com/nidey/p/6227963.html
https://goyalankit.com/blog/linux-bridge
https://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/

系统版本:Centos7.4 3.10.0-693.el7.x86_64

原理

1.Bridge(桥)是 Linux 上用来做 TCP/IP 二层协议交换的设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和Linux 上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。当有数据到达时,Bridge 会根据报文中的 MAC 信息进行广播、转发、丢弃处理。

2.当网卡收到数据帧的目的mac为本机mac时,正常情况下会上送协议栈,非本机mac会直接丢弃

3.bridge不区分接入进来的是物理设备还是虚拟设备,对它来说都一样的,都是网络设备,所以当em2加入br0之后,落得和虚拟网卡veth0一样的下场,从外面网络收到的数据包将无条件的转发给br0,自己变成了一根网线。再由br0交给上层协议栈

5.当程序需要通过br0发送报文时,协议栈将报文交给br0,此时br0发挥交换机功能,通过mac-端口映射表查找数据帧转发端口,此处我们将网桥的setageing项设置为0s,使交换机的mac-端口映射表一直处于空白状态,当br0需要转发数据帧时,找不到对应表项,只能将帧广播出去,这样网桥内的网卡都能收到数据帧,达到流量克隆效果

备注:此种方式只能克隆br0发出的流量,无法克隆收到的流量

利用linux网桥镜像克隆流量

Linux镜像克隆网卡流量
em3和Server2的em2都能收到,从77.60发出的报文

yum install brctl
#创建网桥
brctl addbr br0
#添加虚拟网卡或物理网卡到网桥(此时原网卡em2,em3,IP失效)
brctl addif bro em2
brctl addif br0 em3
#设置MAC地址的老化时间,以秒为单位。
#在<time>秒内未看到来自某个地址的帧之后,网桥将从转发数据库(fdb)中超时(删除)该地址。
#设置为0让网桥将要发送的数据帧广播出去,实现镜像功能
brctl setageing br0 0
#配置网桥IP
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.77.60
PREFIX=24
TYPE=Bridge
IPV6INIT=no
IPV6_AUTOCONF=no
#启用br0
ifup br0
至此,所有从em2发出的包都能同时发给em3
弊端:只能克隆由br0发出的包

利用iptables tee模块实现流量镜像

Linux镜像克隆网卡流量

iptables -I PREROUTING -t mangle -i em1 -j TEE --gateway 192.168.77.61
#表示将所有流入em1的流量通过TEE模块转发到指定地址,
#也可指定一个网段,使用-s或-d表示源IP段,目的IP段,替换-i em1
iptables -I PREROUTING -t mangle -s 192.168.3.0/24 -j TEE --gateway 192.168.77.61

iptables -I POSTROUTING -t mangle -o eth0 -j TEE --gateway 192.168.77.61
#把从em1出去的流量包都镜像一份发到192.168.77.61上

iptables-save  #保存配置
iptables -D PREROUTING -t mangle -i em1 -j TEE --gateway 192.168.77.61  #删除规则

结合两种功能可实现全局一对多

上一篇:转centos8配置网桥


下一篇:2021-05-17