Вопрос или проблема
Я пытался настроить порт зеркалирования на виртуальном мосту, созданном с использованием 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
-
Удалите интерфейс “tapxxxx” из моста Linux “qbrxxxxx”
brctl delif qbr7df1c457-77 tap7df1c457-77
-
Добавьте интерфейс “tapxxxx” к br-int
ovs-vsctl add-port br-int tap7df1c457-77
-
Зеркалируйте трафик 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
Проблема с зеркалированием
При использовании команд для настройки зеркалирования трафика вы сталкиваетесь с проблемой «потеря соединения», когда активируете зеркалирование. Это может происходить по нескольким причинам:
- Неверная конфигурация зеркалирования: Если не все параметры заданы правильно, это может привести к нарушению функциональности.
- Конфликт с NAT или маршрутизацией: Виртуальные машины могут не видеть друг друга из-за неверных правил маршрутизации или сетевого адресации.
- Отсутствие необходимых разрешений: Возможно, необходимо больше прав на выполнение определенных команд или доступ к соответствующим ресурсам.
Правильная настройка зеркалирования
Вот рекомендуемые шаги, чтобы успешно настроить зеркалирование:
-
Удалите существующее зеркалирование:
Если зеркалирование уже настроено, сначала закончите его:sudo ovs-vsctl --del-mirror mirror0
-
Создайте зеркало с правильными параметрами:
Ваша команда создания зеркала может быть изменена для более точной настройки. Пример правильной команды: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
-
Проверка конфигурации:
После настройки зеркалирования проверьте состояние:sudo ovs-vsctl list mirrors sudo ovs-vsctl list bridge demo_bridge
-
Тестирование с tcpdump:
Убедитесь, что зеркалирование работает, используяtcpdump
наwireshark0
:sudo tcpdump -i wireshark0 -w /var/tmp/capture.pcap
-
Проверка настроек сети:
Убедитесь, что IP-адреса и маршруты настроены правильно, чтобы все виртуальные машины могли взаимодействовать. Проверьте файл/etc/network/interfaces
, где задана конфигурация сети.
Заключение
Если после выполнения всех шагов зеркало все еще не работает, я советую проверять логи Open vSwitch
, чтобы выявить возможные ошибки:
sudo tail -f /var/log/openvswitch/ovs-vswitchd.log
И, наконец, использование утилит для отладки, таких как tcpdump
или wireshark
, поможет вам выявить проблемы с трафиком между виртуальными машинами. Убедитесь также, что сетевые интерфейсы не блокируются правилами iptables или другими средствами безопасности.
Надеюсь, эта информация поможет вам успешно настроить зеркалирование портов в вашей сети Open vSwitch. Если возникнут дополнительные вопросы, пожалуйста, дайте знать!