Создание зеркала порта на мосту open vswitch

Вопрос или проблема

Я пытался настроить порт зеркалирования на виртуальном мосту, созданном с использованием Open vSwitch.

Я создал следующие порты на мосту demo_bridge с помощью:

sudo ovs-vsctl add-port demo_bridge victim0

Мост demo_bridge
   Порт "demo_bridge"
       Интерфейс demo_bridge
           тип: внутренний
   Порт "victim0"
       Интерфейс victim0
           тип: внутренний
   Порт "attacker0"
       Интерфейс attacker0
           тип: внутренний
   Порт "wireshark0"
       Интерфейс wireshark0
           тип: внутренний
ovs_version: "2.5.2"

Я провожу простой эксперимент, где VM1 (подключенная к attacker0) собирается атаковать VM2 (подключенную к victim0), и мне нужно зеркалить весь трафик с vport attacker0 на wireshark0 (VM3, захватывающую сетевой трафик). Однако, всякий раз, когда я включаю зеркалирование, я больше не могу пинговать с VM1 (атакующая VM) на 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. Когда зеркало удаляется, я могу пинговать все VM без проблем. Локальный интерфейс на каждой VM (ens3) имеет статические IP-адреса, подключенные к мосту demo_bridge. /etc/network/interfaces

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

Вы пытались использовать tcpdump для прослушивания интерфейса виртуальной машины?

Я не уверен, какой гипервизор вы используете, но вы должны быть в состоянии выполнить ip addr, и если вы видите порты vSwitch; в этом выводе вы можете захватить эти порты с помощью tcpdump.

Вы также можете запустить tcpdump -D, и это скажет вам, о чем libpcap знает на хост-машине для захвата.

Например, если вы используете KVM в качестве гипервизора, вы можете получить MAC-адрес и имя порта, с которым связана виртуальная машина.

# Предполагая, что ваши xml-файлы для виртуальных машин находятся в стандартном месте.
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

Это захватит все на этом порту без фильтрации.

Я успешно зеркалил трафик, смотрите ниже:

введите описание изображения здесь

В моем случае я зеркалил трафик vm1 в br-int на vm0, vm0 имеет два порта: один для управления, другой для приема трафика.

Порт приема vm0 – это 7df1c457-7732-44b2-bf15-63b0b661f1b7

Порт vm1 – это 7eb61cc2-d059-4002-acef-b38e242ce4a5

  1. Удалите интерфейс “tapxxxx” из моста Linux “qbrxxxxx”

    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.

Ответ или решение

Создание зеркалирования портов на мосту Open vSwitch

Введение

На текущий момент, в вашей сети настроен мост Open vSwitch с несколькими внутренними портами, включая attacker0, victim0 и wireshark0. Основная задача заключается в настройке зеркалирования трафика с порта attacker0 на wireshark0 для мониторинга трафика, однако это приводит к потере соединения между виртуальными машинами. В этом ответе мы рассмотрим основные шаги по настройке зеркалирования, а также возможные проблемы и их решение.

Структура вашего моста

Ваши команды для создания портов на мосту demo_bridge были выполнены корректно:

sudo ovs-vsctl add-port demo_bridge victim0

Проблема с зеркалированием

При использовании команд для настройки зеркалирования трафика вы сталкиваетесь с проблемой «потеря соединения», когда активируете зеркалирование. Это может происходить по нескольким причинам:

  1. Неверная конфигурация зеркалирования: Если не все параметры заданы правильно, это может привести к нарушению функциональности.
  2. Конфликт с NAT или маршрутизацией: Виртуальные машины могут не видеть друг друга из-за неверных правил маршрутизации или сетевого адресации.
  3. Отсутствие необходимых разрешений: Возможно, необходимо больше прав на выполнение определенных команд или доступ к соответствующим ресурсам.

Правильная настройка зеркалирования

Вот рекомендуемые шаги, чтобы успешно настроить зеркалирование:

  1. Удалите существующее зеркалирование:
    Если зеркалирование уже настроено, сначала закончите его:

    sudo ovs-vsctl --del-mirror mirror0
  2. Создайте зеркало с правильными параметрами:
    Ваша команда создания зеркала может быть изменена для более точной настройки. Пример правильной команды:

    sudo ovs-vsctl -- --id=@src get Port attacker0 \
                     -- --id=@dst get Port wireshark0 \
                     -- --id=@m create Mirror name=mirror0 \
                     select-src-port=@src \
                     output-port=@dst \
                     -- add Bridge demo_bridge mirrors @m
  3. Проверка конфигурации:
    После настройки зеркалирования проверьте состояние:

    sudo ovs-vsctl list mirrors
    sudo ovs-vsctl list bridge demo_bridge
  4. Тестирование с tcpdump:
    Убедитесь, что зеркалирование работает, используя tcpdump на wireshark0:

    sudo tcpdump -i wireshark0 -w /var/tmp/capture.pcap
  5. Проверка настроек сети:
    Убедитесь, что IP-адреса и маршруты настроены правильно, чтобы все виртуальные машины могли взаимодействовать. Проверьте файл /etc/network/interfaces, где задана конфигурация сети.

Заключение

Если после выполнения всех шагов зеркало все еще не работает, я советую проверять логи Open vSwitch, чтобы выявить возможные ошибки:

sudo tail -f /var/log/openvswitch/ovs-vswitchd.log

И, наконец, использование утилит для отладки, таких как tcpdump или wireshark, поможет вам выявить проблемы с трафиком между виртуальными машинами. Убедитесь также, что сетевые интерфейсы не блокируются правилами iptables или другими средствами безопасности.

Надеюсь, эта информация поможет вам успешно настроить зеркалирование портов в вашей сети Open vSwitch. Если возникнут дополнительные вопросы, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...