Сети Open vSwitch#
Действия по настройке сети Open vSwitch выполняются в ОС СН под учетной записью администратора ОС СН с высоким уровнем целостности. Действия по по созданию виртуальных сетей в ПВ выполняются под учетной записью администратора ПВ.
Сети Open vSwitch создаются на базе программного коммутатора Open vSwitch.
Open vSwitch — программный многоуровневый коммутатор, обеспечивающий изоляцию сети с помощью сетей VLAN путем тегирования портов и фильтрацию базовой сети с помощью OpenFlow.
Архитектура OVS состоит из трех основных компонентов: базы данных, непосредственно программного коммутатора и управляющего контроллера. На каждом из физических узлов вместе с гипервизором располагаются собственные БД и коммутатор. Эти два компонента образуют отдельно стоящий коммутатор, не знающий о других программных коммутаторах на соседних узлах.
Предупреждение
Группы безопасности данным сетевым режимом не поддерживаются.
Настройка сервера виртуализации#
Примечание
Действия по настройке ПВ для использования виртуальных сетей выполняются в ОС СН под учетной записью администратора ОС СН с высоким уровнем целостности.
Требования#
Для настройки данного сетевого режима необходимо чтобы на каждом сервере виртуализации был установлен пакет 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 коммутатор могут быть включены несколько физических интерфейсов с задействованной на них агрегацией по протоколу LACP (Link Aggregation Control Protocol).
Выполняется на канальном уровне путем создания объединенного интерфейса (Bonding).
Для создания объединенного интерфейса на базе физических интерфейсов eth0
и eth1
необходимо выполнить следующую команду:
sudo ovs-vsctl add-bond ovs-sw0 bond0 eth0 eth1
После следует включить lacp
на созданном объединенном интерфейсе:
sudo ovs-vsctl set port bond0 lacp=active
На этом настройка отказоустойчивости сетевых интерфейсов завершена.
Создание сети#
Предупреждение
Действия по созданию виртуальных сетей в ПВ выполняются под учетной записью администратора ПВ.
Для создания облачной сети Open vSwitch необходимо задать значения:
Параметр |
Значение |
Обязательный |
---|---|---|
|
Имя облачной сети |
ДА |
|
|
ДА |
|
Имя физического сетевого устройства, которое будет подключено к мосту |
ДА |
|
Имя сетевого моста, назначается по умолчанию |
НЕТ |
|
Идентификационный номер сети VLAN. Будет сгенерирован, если не указан и для параметра |
НЕТ |
|
Игнорируется, если параметр |
НЕТ |
|
Максимальный передаваемый модуль данных (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"
Выполнить команду:
onevnet create new-net.conf
Пример вывода после выполнения команды:
ID: 1
Особенности конфигурирования#
Конфигурация всех 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
предоставляет интерфейс для внесения изменений в БД. Для внесения изменений используется команда вида:
sudo ovs-vsctl <команда> <таблица> <запись> <ключ=значение>
Для создания программного коммутатора с именем ovs-sw0
необходимо выполнить следующую команду:
sudo ovs-vsctl add-br ovs-sw0
После появляется возможность подключения ВМ. При этом ВМ, подключенные к ovs-sw0
, будут работать в изолированной сети. Для того, чтобы предоставить им доступ к внешней сети, необходимо подключить к ovs-sw0
в качестве порта физический интерфейс eth0
, выполнив команду:
sudo ovs-vsctl add-port ovs-sw0 eth0
Для того чтобы разрешить порту eth0
пропускать во внешнюю сеть трафик из определенных VLAN, необходимо выполнить команду:
sudo ovs-vsctl set port eth0 trunks=10,20,30,40,50
Ниже представлен список вариантов команд с параметрами вызова:
list <таблица> <запись>
;find <таблица> <условие>
;get <таблица> <запись> <ключ=значение>
;add <таблица> <запись> <ключ=значение>
;remove <таблица> <запись> <ключ=значение>
;clear <таблица> <запись> <ключ>
;create <таблица> <запись> <ключ=значение>
;destroy <таблица> <запись>
;wait-until <таблица> <запись> <ключ=значение>
.
Для просмотра записей, присутствующих в таблице, описывающей порты, выполнить команду:
sudo ovs-vsctl list port
Для вывода списка портов, включенных в VLAN, необходимо выполнить команду:
sudo ovs-vsctl find port tag=10
Зеркалирование портов#
ПВ предоставляет функцию зеркалирования сетевого интерфейса ВМ (NIC mirroring) в рамках платформы виртуализации.
Зеркалирование портов — технология дублирования пакетов с одного порта (сетевого интерфейса ВМ) на другой порт (сетевой интерфейс другой ВМ). Целевая ВМ может быть расположена локально (на том же узле виртуализации) либо удаленно по отношению к ВМ источника.
При создании сессии зеркалирования тип зеркалирования (локальное/удаленное) определяется автоматически по расположению ВМ-источника и ВМ-назначения. Если ВМ расположены на одном узле виртуализации, то устанавливается SPAN сессия на сетевом мосту, используемом этими ВМ. Если ВМ расположены на разных узлах виртуализации, то создается ERSPAN-туннель (ERSPAN over GRE) между узлами, при этом на удаленном узле осуществляется перенаправление трафика на порт целевой ВМ.
Настройка зеркалирования трафика ВМ с помощью интерфейса командной строки#
Для создания новой сессии зеркалирования используется команда nic-mirror:
nic-mirror <vmid> <nicid> <dest_vmid> <dest_nicid>
где:
<vmid>
— идентификатор ВМ источника для зеркалирования трафика;<nicid>
— идентификатор сетевого интерфейса источника для зеркалирования трафика;<dest_vmid>
— идентификатор целевой ВМ для зеркалирования трафика;<dest_nicid>
— идентификатор сетевого интерфейса точки назначения на целевой ВМ.
После успешного выполнения команды в шаблоны ВМ источника и назначения добавятся параметры нового зеркалирования и уникальный идентификатор сессии зеркалирования (MIRRORING_ID
).
Примечание
Пример
Создание сессии зеркалирования командой:
sudo onevm nic-mirror 2 5 10 0
где:
идентификатор ВМ источника: 2;
идентификатор сетевого интерфейса источника: 5;
идентификатор ВМ назначения: 10;
идентификатор сетевого интерфейса назначения: 0;
Удаление сессии зеркалирования командой:
sudo onevm nic-unmirror 2 5 0
где:
идентификатор ВМ источника: 2;
идентификатор сетевого интерфейса источника: 5;
идентификатор сетевого интерфейса назначения: 0.
Для ВМ источника и ВМ назначения доступен просмотр параметров зеркалирования командой:
sudo onevm show <vm_id>
Сессии зеркалирования отображаются в разделе NIC MIRRORING
.
Настройка зеркалирования трафика ВМ в веб-интерфейсе ПВ#
Примечание
Для настройки зеркалирования трафика необходимо, чтобы ВМ источника и ВМ назначения имели хотя бы один подключенный сетевой интерфейс с режимом Open vSwitch.
Чтобы настроить зеркалирование трафика в веб-интерфейсе ПВ необходимо:
В левом меню веб-интерфейса выбрать Экземпляры ВМ — ВМ.
На открывшейся странице выбрать из списка виртуальных машин источник для зеркалирования.
На открывшейся странице ВМ:
перейти на вкладку Сеть;
в списке подключенных сетевых интерфейсов в колонке Действия нажать Зеркалирование.
В открывшемся окне Добавить новое зеркалирование NIC выбрать «Тип зеркалирования» (см. рис. 9):

На открывшейся странице:
выбрать ВМ назначения для зеркалирования;
в столбце Сетевой интерфейс целевой ВМ выбрать сетевой интерфейс точки назначения;
нажать кнопку Добавить.
Созданные сессии зеркалирования отображаются в списке атрибутов NIC, раскрывающемся при нажатии флажка слева от поля идентификатора (ID) подключенного сетевого интерфейса.
Настройка зеркалирования трафика ВМ с помощью шаблона ВМ#
Для определения параметров зеркалирования в шаблоне ВМ источника в свойствах сетевого интерфейса (NIC) добавляется новый атрибут MIRRORINGS
, задающий идентификатор нового зеркалирования. Параметры зеркалирования задаются в атрибуте NIC_MIRRORING
, где указываются идентификаторы ВМ и сетевого интерфейса (NIC) точки назначения, а также идентификатор NIC_MIRRORING_ID
, на который ссылается сетевой интерфейс источника:
NIC = [
MIRRORINGS = "0",
NETWORK = "ovs_vnet",
NETWORK_UNAME = "adminbrest",
SECURITY_GROUPS = "0" ]
NIC_MIRRORING = [
MIRRORING_DEST_NIC_ID = "0",
MIRRORING_DEST_VM_ID = "10",
NIC_MIRRORING_ID = "0" ]
Особенности конфигурирования#
Примечание
ВМ не может быть удалена до тех пор, пока не будут удалены все сессии зеркалирования, использующие эту ВМ как точку назначения.
ПВ одновременно поддерживает возможность локального и удаленного зеркалирования. Пользователь может настроить зеркалирование трафика для одного источника в локальное и удаленное назначение одновременно через несколько сессий зеркалирования. Зеркалирование сетевого интерфейса может быть настроено для ВМ в статусе ЗАПУЩЕНО (горячее подключение) и ВЫКЛЮЧЕНО (холодное подключение).
Примечание
При горячем подключении зеркалирования для ВМ в статусе ЗАПУЩЕНО — целевая ВМ также должна быть в статусе ЗАПУЩЕНО.
Для корректной работы удаленного зеркалирования (ERSPAN) необходимо обеспечить использование одинакового максимального передаваемого модуля данных (MTU), не меньшего, чем MTU интерфейса-источника, на протяжении всего сетевого маршрута.
Примечание
Для гарантированного избежания потерь пакетов — MTU на интерфейсе назначения должен быть больше MTU источника.
При использовании локального зеркалирования (SPAN) необходимо учитывать, что сетевой интерфейс назначения становится неактивным для доступа к целевой ВМ и может использоваться только для захвата сетевых пакетов. Для доступа к целевой ВМ по сети можно подключить и использовать второй сетевой интерфейс (NIC), который не будет иметь ограничений.
Миграция ВМ с настроенным зеркалированием#
ВМ (источник/назначение) с настроенным зеркалированием может быть перенесена в Online/Offline режиме на другой сервер виртуализации. Миграция не влияет на настроенное зеркалирование, то есть, тип зеркалирования не меняется при миграции ВМ.
Для локального зеркалирования:
если обе ВМ (источник/назначение) мигрировали на один узел виртуализации — зеркалирование продолжает действовать без изменений;
если в результате миграции ВМ оказались на разных узлах виртуализации — зеркалирование становится неактивным (но не удаляется), в журнал
oned.log
выводится информационное сообщение о неактивной сессии зеркалирования.
Для удаленного зеркалирования:
если в результате миграции обе ВМ (источник/назначение) оказались на одном узле виртуализации — зеркалирование становится неактивным, в журнал
oned.log
выводится информационное сообщение о неактивной сессии зеркалирования;если одна из ВМ мигрировала на новый узел виртуализации — зеркалирование становится неактивным, но продолжит работать, как только удаленная ВМ (то есть ВМ, находящаяся на удаленной стороне сессии зеркалирования) будет выключена и включена повторно.
Многоканальные сети VLAN (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