Download PDF
Download page Сети Open vSwitch.
Сети Open vSwitch
Действия по настройке сети Open vSwitch выполняются в ОС СН под учетной записью администратора ОС СН с высоким уровнем целостности. Действия по по созданию виртуальных сетей в ПК СВ выполняются под учетной записью администратора ПК СВ.
Сети Open vSwitch создаются на базе программного коммутатора Open vSwitch.
Open vSwitch — программный многоуровневый коммутатор, обеспечивающий изоляцию сети с помощью сетей VLAN путем тегирования портов и фильтрацию базовой сети с помощью OpenFlow.
Архитектура OVS состоит из трех основных компонентов: базы данных, непосредственно программного коммутатора и управляющего контроллера. На каждом из физических серверов вместе с гипервизором располагаются собственные БД и коммутатор. Эти два компонента образуют отдельно стоящий коммутатор, информационно не связанный с другими программными коммутаторах на соседних физических серверах.
Группы безопасности данным сетевым режимом не поддерживаются.
Особенности конфигурирования
Конфигурация всех Open vSwitch коммутаторов, портов, настройки поддерживаемых протоколов хранятся в собственной базе данных OVS (OVSDB). В стандартной конфигурации в OVSDB существуют следующие таблицы:
- Open_vSwitch — Cхема;
- Bridge;
- Port;
- Interface;
- Flow_Table — конфигурация OpenFlow;
- QoS;
- Mirror;
- Controller — параметры подключения к контроллеру OpenFlow;
- Manager — конфигурация OVSDB;
- NetFlow;
- SSL;
- sFlow;
- IPFIX;
- Flow_Sample_Collector_Set
Изначально почти все таблицы пусты, так как конфигурация отсутствует. Утилита ovs-vsctl
предоставляет интерфейс для внесения изменений в БД. Для внесения изменений используется команда вида:
Для создания программного коммутатора с именем ovs-sw0
необходимо выполнить следующую команду:
После появляется возможность подключения ВМ. При этом ВМ, подключенные к ovs-sw0
, будут работать в изолированной сети. Для того, чтобы предоставить им доступ к внешней сети, необходимо подключить к ovs-sw0
в качестве порта физический интерфейс eth0
, выполнив команду:
Для того чтобы разрешить порту eth0
пропускать во внешнюю сеть трафик из определенных VLAN, необходимо выполнить команду:
Ниже представлен список вариантов команд с параметрами вызова:
list <таблица> <запись>
;find <таблица> <условие>
;get <таблица> <запись> <ключ=значение>
;add <таблица> <запись> <ключ=значение>
;remove <таблица> <запись> <ключ=значение>
;clear <таблица> <запись> <ключ>
;create <таблица> <запись> <ключ=значение>
;destroy <таблица> <запись>
;wait-until <таблица> <запись> <ключ=значение>
.
Для просмотра записей, присутствующих в таблице, описывающей порты, выполнить команду:
Для вывода списка портов, включенных в VLAN, необходимо выполнить команду:
Агрегирование физических интерфейсов
Для повышения пропускной способности и уровня отказоустойчивости в Open vSwitch коммутатор могут быть включены несколько физических интерфейсов с задействованной на них агрегацией по протоколу LACP (Link Aggregation Control Protocol). Выполняется на канальном уровне путем создания объединенного интерфейса (Bonding).
Для создания объединенного интерфейса на базе физических интерфейсов eth0 и eth1 необходимо выполнить следующую команду:
После следует включить lacp на созданном объединенном интерфейсе:
На этом настройка отказоустойчивости сетевых интерфейсов завершена.
Зеркалирование портов
Open vSwitch позволяет направлять копию потока трафика из одного или нескольких интерфейсов в другой. Так же он может организовать перенаправление трафика из всей VLAN в конкретный порт или наоборот. Зеркалироваться может только входящий, только исходящий или оба типа трафика. Использование такой возможности позволит вести контроль сетевого трафика, передаваемого между ВМ с целью обнаружения (предупреждения)
компьютерных атак.
Пример
Зеркалирование трафика из интерфейса vnet2
, принадлежащего одной ВМ, в специально созданный для прослушивания порт mirror0
с типом internal
:
где:
- конструкцией
--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
— записываются имя и параметры зеркала;select-dst-port
— зеркалирование входящего трафика;select-src-port
— зеркалирование исходящего трафика;output-port
— место перенаправления трафика.
С помощью консольной утилиты tcpdump
, запущенной на сервере виртуализации, можно прослушивать весь трафик поступающий, например, на порт mirror0
. Для этого необходимо выполнить команду:
Также можно организовать ретрансляцию всех пакетов, например, пришедших на порт eth0 или eth1 на порт eth2:
где:
- командой
--id=@eth0 get Port eth0 – –id=@eth1 get Port eth1 -- --id=@eth2 get Port eth2
определяются значения переменных@eth0
,@eth1
и@eth2
; - командой
--id=@m create Mirror name=mymirror select-dst-port=@eth0, @eth1 select-src-port=@eth0,@eth1 output-port=@eth2
определяется значение переменной @m.
Для отмены зеркалирования выполнить команду:
Настройка сервера виртуализации
Требования
Для настройки данного сетевого режима необходимо чтобы на каждом сервере виртуализации был установлен пакет openvswitch-switch
(данный пакет размещен в базовом репозитории ОС СН).
Настройка
Для настройки необходимо создать программный коммутатор для каждой сети, в которой будут работать виртуальные машины. На всех серверах виртуализации необходимо использовать одно и тоже имя для программного коммутатора. Затем добавить физический сетевой интерфейс к этому программному коммутатору.
Пример
Сервер виртуализации, который направляет трафик виртуальных сетей через сетевой интерфейс enp0s8. Пример вывода после выполнения команды:
sudo ovs-vsctl show
c61ba96f-fc11-4db9-9636-408e763f529e Bridge "ovsbr0"
Port "ovsbr0"
Interface "ovsbr0" type: internal
Port "enp0s8"
Interface "enp0s8"
Общие настройки ПК СВ
Значение параметра VLAN_ID
рассчитывается в соответствии с настройками, указанными в конфигурационном файле /etc/one/oned.conf
.
Изменением данного параметра можно зарезервировать некоторые сети VLAN, и они не будут назначаться виртуальной сети. Можно также указать первый номер VLAN_ID
. При создании новой изолированной сети находит свободный номер VLAN_ID
из пула VLAN. Этот пул является глобальным, а также совместно используется с сетевым режимом 802.1Q VLAN.
В файле /var/lib/one/remotes/vnm/OpenNebulaNetwork.conf
можно откорректировать параметр настройки arp_cache_poisoning
, отвечающий за подключение правила предотвращения изменения кэша ARP (ARP Cache Poisoning).
После корректировки значения параметра arp_cache_poisoning
необходимо выполнить команду onehost sync
для применения изменений на всех серверах виртуализации.
Создание сети
Для создания сети Open vSwitch необходимо задать значения параметров физической сети, приведенных в таблице:
Параметр | Значение | Обязательный |
---|---|---|
NAME | Имя сети | ДА |
VN_MAD | ovswitch | ДА |
PHYDEV | Имя физического сетевого устройства, которое будет подключено к мосту | ДА |
BRIDGE | Имя сетевого моста, назначается по умолчанию onebr.<net_id> или onebr.<vlan_id> | НЕТ |
VLAN_ID | Идентификационный номер сети VLAN. Будет сгенерирован, если не указан и для параметра AUTOMATIC_VLAN_ID установлено значение YES | НЕТ |
AUTOMATIC_VLAN_ID | Игнорируется, если параметр VLAN_ID определен. Следует установить значение YES, если необходимо в автоматическом режиме генерировать идентификационныйномер сети VLAN | НЕТ |
MTU | Максимальный передаваемый модуль данных (MTU) для сети Open vSwitch | НЕТ |
Создание сети Open vSwitch с использованием конфигурационного файла:
- Создать файл new-net.conf со следующим содержанием:
# параметры физической сети NAME = "ovswitch_net" VN_MAD = "ovswitch" BRIDGE = vbr1 VLAN_ID = 50 # optional # доступное адресное пространство AR=[TYPE = "IP4", IP = "172.16.1.100", SIZE = "100" ] # параметры контекстуализации NETWORK_ADDRESS = "172.16.1.0" NETWORK_MASK = "255.255.255.0" DNS = "172.16.1.1" GATEWAY = "172.16.1.1"
CODE - Выполнить команду:onevnet create new-net.confПример вывода после выполнения команды:
ID: 1
CODE
Многоканальные сети VLAN (VLAN транкинг)
VLAN транкинг поддерживается путем добавления тега VLAN_TAGGED_ID:
к элементу NIC
в шаблоне ВМ или шаблоне виртуальной сети. Тег позволяет указать диапазон сетей VLAN, подлежащий тегированию, например, 1,10,30,32
.
Правила OpenFlow
MAC-спуфинг
Данные правила предотвращают выход любого трафика с порта, если был изменен MAC-адрес.
Пример
in_port=<PORT>,dl_src=<MAC>,priority=40000,actions=normal
in_port=<PORT>,priority=39000,actions=normal
IP-захват
Данные правила предотвращают выход любого трафика с порта для IPv4, если не настроен IP-адрес для ВМ.
Пример
in_port=<PORT>,arp,dl_src=<MAC>priority=45000,actions=drop
in_port=<PORT>,arp,dl_src=<MAC>,nw_src=<IP>,priority=46000,actions=normal
Черные порты
Применяется одно правило на порт.
Пример
tcp,dl_dst=<MAC>,tp_dst=<PORT>,actions=drop
ICMP-игнорирование
С помощью данной настройки можно, например, заблокировать ping-запросы к ВМ.
Пример
icmp,dl_dst=<MAC>,actions=drop