KVM虚拟机获得宿主机指定网卡的流量

https://blog.51cto.com/leejia/2147300

背景
目前手上只有虚拟机资源,想通过虚拟机来分析交换机镜像过来的流量。交换机镜像过来的流量可能是主干网络的流量也可能是某台服务器的流量。

KVM环境准备
kvm环境准备省略,直接走官方文档或者其它安装文档即可

目前网络架构描述
宿主机:

1,目前有两块物理网卡em1和em2,其中em1是内网网口。em2网卡处于up状态,没有配置ip地址,且已经通过交换机配置接入了交换机镜像过来的流量
2,宿主机创建了br0,并且绑定了em1,并且测试虚拟机的虚拟机网卡为vnet0

虚拟机:

1,虚拟机只有一个eth0网卡对应宿主机的vnet0虚拟网卡

操作
在宿主机创建一个网桥br1,并且绑定到em2网卡

brctl addbr br1

brctl addif br1 em2

ifconfig br1 up

查看网桥信息:

brctl show

bridge name bridge id STP enabled interfaces
br0 8000.a4badb1b4640 no em1
vnet0
br1 8000.a4badb1b4642 no em2
virbr0 8000.5254007ccfb2 yes virbr0-nic
1.
2.
3.
4.
5.
6.
在宿主机区上给虚拟机临时新加一个网卡并且使用br1

virsh attach-interface oeltest01 --type bridge --source br1

查看虚拟机网卡信息:

virsh domiflist oeltest01

Interface Type Source Model MAC

vnet0 bridge br0 virtio 52:54:00:d3:02:0e
vnet1 bridge br1 - 52:54:00:c4:36:02
1.
2.
3.
4.
5.
关闭br1的mac地址学习功能和降低转发延迟

brctl setageing br1 0

brctl setfd br1 0

Bridge(桥)是 Linux 上用来做 TCP/IP 二层协议交换的设备,与现实世界中的交换机功能相似。Bridge 设备实例可以和 Linux 上其他网络设备实例连接,既 attach 一个从设备,类似于在现实世界中的交换机和一个用户终端之间连接一根网线。每当这个从物理网卡设备收到数据时都会把数据转发到 bridge 上,当 bridge 接收到此数据时,bridge进行一个和现实世界中的交换机类似的处理过程:判断包的类别(广播/单点),查找内部 MAC 端口映射表,定位目标端口号,将数据转发到目标端口或丢弃,自动更新内部 MAC 端口映射表以自我学习。而我们关闭br1的mac地址学习功能,把br1作为一个hub来使用,使其直接把流量转发到连接到br1的虚拟网卡vnet1。如果不关闭mac地址学习功能,由于br1收到的镜像流量中数据包的目的mac地址不是虚拟机的mac地址,故会直接把收到的流量丢弃,不再进行转发。

结果
查看虚拟机的网卡信息:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:d3:02:0e brd ff:ff:ff:ff:ff:ff
inet 172.18.1.150/24 brd 172.18.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::e593:4a16:3009:c9dc/64 scope link
valid_lft forever preferred_lft forever
3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:c4:36:02 brd ff:ff:ff:ff:ff:ff
inet6 fe80::3c4:d4ec:8176:bcba/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::2518:6c5e:3f1c:84fe/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::bfac:83e6:8224:7ed3/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever

在新加的ens7网卡抓包:

tcpdump -i ens7

现在em2网卡的流量都已经镜像到虚拟机的网卡了,可以再虚拟机中进行流量分析了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KVM 宿主下创建的虚拟,可以使用桥接模式、NAT 模式或者直接连接宿主物理网卡的模式来进行网络配置。以下是在 Linux KVM 宿主下创建的虚拟的网络配置方法: 1. 桥接模式 桥接模式可以使虚拟直接通过宿主的物理网卡连接到网络,可以使虚拟获得独立的 IP 地址。具体步骤如下: 1. 在宿主上创建一个虚拟网桥,使用以下命令: ``` brctl addbr br0 ifconfig br0 up ``` 2. 将宿主的物理网卡连接到虚拟网桥,使用以下命令: ``` brctl addif br0 eth0 ``` 其中,`eth0` 是宿主的物理网卡名称。 3. 在虚拟中,指定网络接口为桥接模式,使用以下命令: ``` virsh edit <vm-name> ``` 在 XML 配置文件中添加以下内容: ``` <interface type='bridge'> <mac address='52:54:00:xx:xx:xx'/> <source bridge='br0'/> <model type='virtio'/> </interface> ``` 其中,`<mac address='52:54:00:xx:xx:xx'/>` 是虚拟的 MAC 地址,`<source bridge='br0'/>` 是连接到虚拟网桥 `br0`。 4. 在虚拟中配置 IP 地址和网关,使用以下命令: ``` sudo ip addr add <ip-address>/<netmask> dev eth0 sudo ip route add default via <gateway-ip-address> ``` 其中,`<ip-address>` 是虚拟的 IP 地址,`<netmask>` 是虚拟的子网掩码,`<gateway-ip-address>` 是宿主的 IP 地址。 2. NAT 模式 NAT 模式可以使虚拟通过宿主的 IP 地址访问网络,但无法直接从外部访问虚拟。具体步骤如下: 1. 在虚拟中,指定网络接口为 NAT 模式,使用以下命令: ``` virsh edit <vm-name> ``` 在 XML 配置文件中添加以下内容: ``` <interface type='network'> <mac address='52:54:00:xx:xx:xx'/> <source network='default'/> <model type='virtio'/> </interface> ``` 其中,`<mac address='52:54:00:xx:xx:xx'/>` 是虚拟的 MAC 地址。 2. 在虚拟中配置 IP 地址和网关,使用以下命令: ``` sudo ip addr add <ip-address>/<netmask> dev eth0 sudo ip route add default via <gateway-ip-address> ``` 其中,`<ip-address>` 是虚拟的 IP 地址,`<netmask>` 是虚拟的子网掩码,`<gateway-ip-address>` 是宿主的 IP 地址。 3. 直接连接物理网卡模式 直接连接物理网卡模式可以使虚拟通过宿主的物理网卡访问网络,但需要在虚拟中手动配置 IP 地址和网关。具体步骤如下: 1. 在虚拟中,指定网络接口为直接连接物理网卡模式,使用以下命令: ``` virsh edit <vm-name> ``` 在 XML 配置文件中添加以下内容: ``` <interface type='direct'> <mac address='52:54:00:xx:xx:xx'/> <source dev='eth0'/> <model type='virtio'/> </interface> ``` 其中,`<mac address='52:54:00:xx:xx:xx'/>` 是虚拟的 MAC 地址,`<source dev='eth0'/>` 是连接到宿主的物理网卡。 2. 在虚拟中手动配置 IP 地址和网关,使用以下命令: ``` sudo ip addr add <ip-address>/<netmask> dev eth0 sudo ip route add default via <gateway-ip-address> ``` 其中,`<ip-address>` 是虚拟的 IP 地址,`<netmask>` 是虚拟的子网掩码,`<gateway-ip-address>` 是宿主的 IP 地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值