在开放的 vswitch 桥上创建端口镜像

在开放的 vswitch 桥上创建端口镜像

我一直在尝试在使用开放 vswitch 创建的虚拟网桥上配置端口镜像。

我使用以下命令在 Bridge demo_bridge 上创建了以下端口:

sudo ovs-vsctl add-port demo_bridge victim0

Bridge demo_bridge
   Port "demo_bridge"
       Interface demo_bridge
           type: internal
   Port "victim0"
       Interface victim0
           type: internal
   Port "attacker0"
       Interface attacker0
           type: internal
   Port "wireshark0"
       Interface wireshark0
           type: internal
ovs_version: "2.5.2"

我正在进行一个简单的实验,其中 VM1(连接到attacker0)将攻击VM2(连接到victim0),并且我需要将所有流量从attacker0 vport镜像到wireshark0(VM3捕获网络流量)。但是,每当我启用镜像时,我就无法再从 VM1(攻击者 VM)ping 通 VM3(Wireshark VM);此外,我也看不到 VM3 上的任何镜像流量。

这是我用来创建镜像端口的两组命令,但它们都不起作用:

sudo ovs-vsctl  \
-- set Bridge demo_bridge mirrors=@m1  \
-- --id=@attacker0 get Port attacker0  \
-- --id=@wireshark0 get Port wireshark0  \
-- --id=@m1 create Mirror name=port_mirror1 select-dst-port=@attacker0 select-src-port=@attacker0 output-port=@wireshark0

//来自YOUTUBE视频

sudo ovs-vsctl  \
-- --id=@p get port victim0  \
-- --id=@m create mirror name=mirror0  \
-- add bridge demo_bridge mirrors @m  \
-- set mirror mirror0 output_port=@p 

//激活镜像

sudo ovs-vsctl \
-- --id=@p get port ens3 \
-- set mirror mirror0 select_dst_port=@p \
-- set mirror mirror0 select_src_port=@p  

这些命令确实创建了镜像端口,但它们也会中断攻击者 VM1 和受害者 VM2 之间的网络连接。删除镜像后,我可以正常 ping 通所有虚拟机。每个虚拟机 (ens3) 上的本地接口都有一个连接到 Bridge demobridge 的静态 IP 地址。 /etc/网络/接口

auto ens3
iface ens3 inet static
address 172.168.0.3
network 172.168.0.0/27
netmask 255.255.255.0

答案1

您是否尝试过使用 tcpdump 来监听虚拟机的接口?

我不确定您使用什么作为虚拟机管理程序,但您应该能够运行ip addr,并且您是否可以看到 vswitch 的端口;在该输出中,您可以在 tcpdump 中捕获这些端口。

您还可以运行tcpdump -D,这将告诉您 libpcap 在主机上了解哪些内容以进行捕获。

例如,如果您将 KVM 作为虚拟机管理程序运行,您可以获得与虚拟机关联的 MAC 地址和端口名称。

# Assuming your xml files for the vms are in the default location also. cat /etc/libvirt/qemu/{{ name_of_vm }}.xml | grep -A 2 interface

从此输出中,您可以匹配ip addr使用 mac 地址的最后两位数字作为过滤器的输出。

ip a | grep -B 1 -i {{ last_two }}

返回的接口可供 tcpdump 使用。

tcpdump -ni {{ vnet_name }} -s0 -vw /var/tmp/{{ vnet_port_out }}.pcap

这将捕获该端口上未过滤的所有内容。

答案2

我已经成功镜像流量,请参见以下内容: 在此输入图像描述 就我而言,将 br-int 中的 vm1 流量镜像到 vm0,vm0 有两个端口,一个管理器另一个接收流量

vm0接收端口是7df1c457-7732-44b2-bf15-63b0b661f1b7

vm1 端口是7eb61cc2-d059-4002-acef-b38e242ce4a5

  1. 从 Linux 桥“qbrxxxxx”拉取接口“tapxxxx”

    brctl delif qbr7df1c457-77 tap7df1c457-77
    
  2. 将接口“tapxxxx”添加到 br-int

    ovs-vsctl add-port br-int tap7df1c457-77
    
  3. 将 br-int 流量镜像到端口 tap7df1c457-77

    ovs-vsctl -- --id=@tap1 get port qvo7eb61cc2-d0 -- --id=@tap2 get port tap7df1c457-77 -- --id=@m create mirror name=m0 select_dst_port=@tap1 select_src_port=@tap1 output_port=@tap2 -- set bridge br-int mirrors=@m
    

qvo7eb61cc2-d0是 vm1 的端口。

相关内容