Open vSwitch часть №10. Зеркалирование портов

Open vSwitch — все статьи

Open vSwitch позволяет, направлять копию потока трафика из одного или нескольких интерфейсов в другой. Так же, возможно перенаправление трафика из всего VLAN’a в конкретный порт или на оборот.  Может зеркалироваться только входящий, исходящий или оба типа. Понадобиться это может, например, для прослушки трафика в целях информационной безопасности или диагностики.

Выполним зеркалирование трафика из интерфейса vnet2 принадлежащего одной из ВМ в специально созданный для прослушивания порт mirror0 с типом internal.
Команда, реализующая эту функцию в отличии предыдущих, просто ломает мозг

# ovs-vsctl — set Bridge ovs-sw0 mirrors=@m — —id=@mirror0 get Port mirror0 — —id=@vnet2 get Port vnet2 — —id=@m create Mirror name=mymirror select-dst-port=@vnet2 select-src-port=@vnet2 output-port=@mirror0

В данной команде, как нетрудно заметить, во всю производится работа с БД, а также используются своего рода внутренние переменные — —id=@<имя_переменной>
set Bridge ovs-sw0 mirrors=@m — эта часть описывает создание зеркала, имя и параметры которого должна быть получена из переменной @m.
—id=@mirror0 get Port mirror0 — —id=@vnet2 get Port vnet2 — здесь в переменные @mirror0, @vnet2 записываются идентификаторы соответствующих портов.
—id=@m create Mirror name=mymirror select-dst-port=@vnet2 select-src-port=@vnet2 output-port=@mirror0 — а тут собственно в переменную @m записывается идентификатор моста mymirror, которая будет подставлена в первой команде в переменную @m.

Конечно, для такого простого действия можно было реализовать человеко-понятные параметры и обойтись без ручных правок БД. Но пока что реальность такова.

Теперь, например с помощью tcpdump запущенного в хост-системе можно наблюдать весь трафик ВМ:

# tcpdump -i mirror0

Кстати, подобное зеркалирование трафика наверняка возможно у таких облачных провайдеров как Amazon EC2, Rackspace, Digitalocean и других. По этому не стоит забывать об использовании защищенных сетевых протоколов!