Openvswitch: различия между версиями
Vovan (обсуждение | вклад) |
Vovan (обсуждение | вклад) (→Создаём конфигурацию для поднятия моста vmbr0 поверх ens20 средствами etcnet) |
||
(не показано 35 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | =Введение= | ||
+ | |||
+ | Данная статья написана и проверена для операционной системы Альт Сервер ветки P10. | ||
+ | |||
+ | С высокой долей вероятности описанные здесь способы будут работать и в более старших версиях дистрибутивов ОС "Альт". | ||
+ | |||
=Общие настройка= | =Общие настройка= | ||
Включить сервис | Включить сервис | ||
− | systemctl enable --now openwsvitch | + | systemctl enable --now openwsvitch |
+ | |||
+ | Настройки физических интерфейсов через etcnet на примере ens19 | ||
+ | cat /etc/net/ifaces/ens19/options | ||
+ | |||
+ | <pre> | ||
+ | BOOTPROTO=static | ||
+ | TYPE=eth | ||
+ | NM_CONTROLLED=no | ||
+ | DISABLED=no | ||
+ | CONFIG_WIRELESS=no | ||
+ | SYSTEMD_BOOTPROTO=static | ||
+ | CONFIG_IPV4=yes | ||
+ | SYSTEMD_CONTROLLED=no | ||
+ | ON_BOOT=yes | ||
+ | </pre> | ||
+ | |||
+ | Остальные файлы в каталоге интерфейса (/etc/net/ifaces/ens19) должны отсутствовать | ||
+ | |||
+ | Далее в Alt Linux можно настроить Openvswitch либо посредством ovs-vsctl либо через конфигурационные файлы etcnet. | ||
+ | |||
+ | Оба способа описаны ниже. Предпочтительным является способ через etcnet, т.к. в таком случае сохраняются читабельные конфигурационные файлы в тексте. | ||
=Настройка через ovs-vsctl= | =Настройка через ovs-vsctl= | ||
Строка 11: | Строка 38: | ||
ovs-vsctl show | ovs-vsctl show | ||
+ | |||
+ | Очистить конфигурацию | ||
+ | |||
+ | ovs-vsctl emer-reset | ||
Добавить мост | Добавить мост | ||
Строка 36: | Строка 67: | ||
ovs-vsctl add-port vmbr0 vlan999 tag=999 -- set Interface vlan999 type=internal | ovs-vsctl add-port vmbr0 vlan999 tag=999 -- set Interface vlan999 type=internal | ||
+ | Далее интерфейс vlan999 настраивается аналогично физическому интерфейсу | ||
+ | |||
+ | cat /etc/net/ifaces/vlan999/options | ||
+ | |||
+ | <pre> | ||
+ | BOOTPROTO=static | ||
+ | TYPE=eth | ||
+ | NM_CONTROLLED=no | ||
+ | DISABLED=no | ||
+ | CONFIG_WIRELESS=no | ||
+ | SYSTEMD_BOOTPROTO=static | ||
+ | CONFIG_IPV4=yes | ||
+ | SYSTEMD_CONTROLLED=no | ||
+ | ON_BOOT=yes | ||
+ | </pre> | ||
+ | |||
+ | cat /etc/net/ifaces/vlan999/ipv4address | ||
+ | |||
+ | 10.10.10.2/24 | ||
=Настройка через etcnet= | =Настройка через etcnet= | ||
+ | |||
+ | ==Подготовка физических интерфейсов== | ||
+ | |||
+ | cd /etc/net/ifaces/ | ||
+ | |||
+ | ls ens20 | ||
+ | options | ||
+ | |||
+ | <pre> | ||
+ | cat ens20/options | ||
+ | BOOTPROTO=static | ||
+ | TYPE=eth | ||
+ | DISABLED=no | ||
+ | CONFIG_IPV4=yes | ||
+ | ON_BOOT=yes | ||
+ | </pre> | ||
+ | |||
+ | Должны быть только эти файлы и только такое содержимое в них. | ||
+ | |||
+ | Количество самих интерфейсов и их названия могут отличаться. | ||
+ | |||
+ | Дальнейшие примеры будут строиться на базе физического интерфейса | ||
+ | |||
+ | ens20 | ||
+ | |||
+ | ==Создаём конфигурацию для поднятия моста vmbr0 поверх ens20 средствами etcnet== | ||
+ | |||
+ | Далее будет использоваться синтаксис [https://ru.wikipedia.org/wiki/Heredoc-%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81 heredoc] для более удобного конфигурирования через копирование текста мышью из браузера в эмулятор терминала | ||
+ | |||
+ | Создаём мост vmbr0 поверх физического интерфейса ens20 с выводом трафика с виланов 100, 200, 999 через сетевой интерфейс ens20 во внешнюю сеть. | ||
+ | |||
+ | cd /etc/net/ifaces/ | ||
+ | |||
+ | mkdir vmbr0 | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > vmbr0/options | ||
+ | BOOTPROTO=static | ||
+ | TYPE=ovsbr | ||
+ | DISABLED=no | ||
+ | CONFIG_IPV4=yes | ||
+ | ON_BOOT=yes | ||
+ | HOST=ens20 | ||
+ | OVS_REMOVE=yes | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > vmbr0/ifup-post | ||
+ | ovs-vsctl set port ens20 trunks=100,200,999 | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | chmod +x vmbr0/ifup-post | ||
+ | |||
+ | systemctl restart network | ||
+ | |||
+ | Проверка | ||
+ | |||
+ | ovs-vsctl show | ||
+ | |||
+ | должна вернуть что-то типа | ||
+ | |||
+ | <pre> | ||
+ | 968569fe-451b-4b42-b191-65700538b36b | ||
+ | Bridge vmbr0 | ||
+ | Port ens20 | ||
+ | trunks: [100, 200, 999] | ||
+ | Interface ens20 | ||
+ | Port vmbr0 | ||
+ | Interface vmbr0 | ||
+ | type: internal | ||
+ | ovs_version: "2.17.8" | ||
+ | </pre> | ||
+ | |||
+ | Для вывода трафика из виланов на физические интерфейсы в файл | ||
+ | |||
+ | vmbr0/ifup-post | ||
+ | |||
+ | дополнительно можно добавить команды. Например для вывода вилана 100 и 200, соответственно в физические интерфейсы ens21 и ens22 файл можно создать так: | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > vmbr0/ifup-post | ||
+ | ovs-vsctl set port ens20 trunks=100,200,999 | ||
+ | ovs-vsctl set port ens21 tag=100 | ||
+ | ovs-vsctl set port ens22 tag=200 | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | ==Создаём конфигурацию для поднятия vlan интерфейса vlan999 с id=999 поверх моста vmbr0 средствами etcnet== | ||
+ | |||
+ | cd /etc/net/ifaces/ | ||
+ | |||
+ | mkdir vlan999 | ||
+ | |||
+ | <pre> | ||
+ | cat << 'EOF' > vlan999/options | ||
+ | BOOTPROTO=static | ||
+ | TYPE=ovsport | ||
+ | DISABLED=no | ||
+ | CONFIG_IPV4=yes | ||
+ | ON_BOOT=yes | ||
+ | BRIDGE=vmbr0 | ||
+ | VID=999 | ||
+ | EOF | ||
+ | </pre> | ||
+ | |||
+ | echo '10.10.10.2/24' > vlan999/ipv4address | ||
+ | |||
+ | systemctl restart network | ||
+ | |||
+ | Проверка | ||
+ | |||
+ | ovs-vsctl show | ||
+ | |||
+ | должна вернуть что-то типа | ||
+ | |||
+ | <pre> | ||
+ | 968569fe-451b-4b42-b191-65700538b36b | ||
+ | Bridge vmbr0 | ||
+ | Port vlan999 | ||
+ | tag: 999 | ||
+ | Interface vlan999 | ||
+ | type: internal | ||
+ | Port vmbr0 | ||
+ | Interface vmbr0 | ||
+ | type: internal | ||
+ | Port ens20 | ||
+ | trunks: [100, 200, 999] | ||
+ | Interface ens20 | ||
+ | ovs_version: "2.17.8" | ||
+ | </pre> | ||
+ | |||
+ | Проверяем все сетевые интерфейсы | ||
+ | |||
+ | <pre> | ||
+ | ip a | ||
... | ... | ||
+ | физический интерфейс ens20. Особое внимание на state UP | ||
+ | ... | ||
+ | 3: ens20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000 | ||
+ | link/ether 7a:ba:31:39:f3:47 brd ff:ff:ff:ff:ff:ff | ||
+ | altname enp0s20 | ||
+ | inet6 fe80::78ba:31ff:fe39:f347/64 scope link | ||
+ | valid_lft forever preferred_lft forever | ||
+ | ... | ||
+ | интерфейс ovs-system, который создаётся посредством openvswitch. state не имеет значения | ||
+ | ... | ||
+ | 18: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 | ||
+ | link/ether 7e:d8:51:8b:62:59 brd ff:ff:ff:ff:ff:ff | ||
+ | ... | ||
+ | мост vmbr0. state UNKNOWN -- это нормально | ||
+ | ... | ||
+ | 19: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
+ | link/ether c6:f3:66:f8:cf:4f brd ff:ff:ff:ff:ff:ff | ||
+ | inet6 fe80::c4f3:66ff:fef8:cf4f/64 scope link | ||
+ | valid_lft forever preferred_lft forever | ||
+ | ... | ||
+ | vlan интерфейс vlan999. state UNKNOWN -- это нормально. inet 10.10.10.2/24 -- это настроенный на нём статический ip-адрес | ||
+ | ... | ||
+ | 20: vlan999: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 | ||
+ | link/ether fa:52:f6:ff:05:87 brd ff:ff:ff:ff:ff:ff | ||
+ | inet 10.10.10.2/24 scope global vlan999 | ||
+ | valid_lft forever preferred_lft forever | ||
+ | inet6 fe80::f852:f6ff:feff:587/64 scope link | ||
+ | valid_lft forever preferred_lft forever | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | =Коллизии с одинаковыми MAC-адресами при работе в виртуальных стендах= | ||
+ | |||
+ | ==Проблема== | ||
+ | |||
+ | В виртуальных стендах используются клоны виртуальных машин. Следовательно, клоны могут вести себя одинаково. До такой степени одинаково, что openvswitch и etcnet могут поднимать сетевые интерфейсы с абсолютно одинаковыми MAC-адресами. | ||
+ | |||
+ | Например, на вилан-интерфейсах на разных машинах могут быть одинаковые MAC-адреса. Следовательно, ping между двумя такими машинами (с одинаковыми MAC-адресами) работать не будет. | ||
+ | |||
+ | ==Решение== | ||
+ | |||
+ | Для решения этой проблемы можно воспользоваться дополнительным конфигурационным файлом в каталоге etcnet. | ||
+ | |||
+ | Например, для интерфейса | ||
+ | |||
+ | vlan999 | ||
+ | |||
+ | можно задать другой MAC-адрес путём создания в каталоге | ||
+ | |||
+ | /etc/net/ifaces/vlan999 | ||
+ | |||
+ | файла | ||
+ | |||
+ | iplink | ||
+ | |||
+ | со следующем содержимым | ||
+ | |||
+ | address 0a:98:99:c0:e8:28 | ||
+ | |||
+ | , где | ||
+ | |||
+ | 0a:98:99:c0:e8:28 | ||
+ | |||
+ | -- это желаемый MAC-адрес | ||
+ | |||
+ | После создания файла необходимо перезапустить сервис network командой | ||
+ | |||
+ | systemctl restart network | ||
+ | |||
+ | После этого можно проверить вывод команды | ||
+ | |||
+ | ip a | ||
+ | |||
+ | и убедиться в том, что на сетевом интерфейсе поменялся MAC-адрес |
Текущая версия на 10:21, 10 октября 2024
Содержание
Введение
Данная статья написана и проверена для операционной системы Альт Сервер ветки P10.
С высокой долей вероятности описанные здесь способы будут работать и в более старших версиях дистрибутивов ОС "Альт".
Общие настройка
Включить сервис
systemctl enable --now openwsvitch
Настройки физических интерфейсов через etcnet на примере ens19
cat /etc/net/ifaces/ens19/options
BOOTPROTO=static TYPE=eth NM_CONTROLLED=no DISABLED=no CONFIG_WIRELESS=no SYSTEMD_BOOTPROTO=static CONFIG_IPV4=yes SYSTEMD_CONTROLLED=no ON_BOOT=yes
Остальные файлы в каталоге интерфейса (/etc/net/ifaces/ens19) должны отсутствовать
Далее в Alt Linux можно настроить Openvswitch либо посредством ovs-vsctl либо через конфигурационные файлы etcnet.
Оба способа описаны ниже. Предпочтительным является способ через etcnet, т.к. в таком случае сохраняются читабельные конфигурационные файлы в тексте.
Настройка через ovs-vsctl
Проверить конфигурацию
ovs-vsctl show
Очистить конфигурацию
ovs-vsctl emer-reset
Добавить мост
ovs-vsctl add-br vmbr0
Прикрепляем к мосту vmbr0 физический сетевой интерфейс ens20
ovs-vsctl add-port vmbr0 ens20 trunks=100,200,999
Если необходимо создать мост vmbr0 поверх физических интерфейсов ens19, ens20, ens21 и при этом транковые порты должны быть только на ens19, а физические порты ens20 и ens21 должны работать на виланах, соответственно, 100 и 200
ovs-vsctl add-port vmbr0 ens19 trunks=100,200,999 ovs-vsctl add-port vmbr0 ens20 tag=100 ovs-vsctl add-port vmbr0 ens21 tag=200
Если нужно удалить физический сетевой интерфейсens20 из моста vmbr0
ovs-vsctl del-port vmbr0 ens20
Чтобы создать интерфейс vlan999 (не физический) и привязать его к мосту vmbr0 и трафику с тегом 999 (для управления хостом)
ovs-vsctl add-port vmbr0 vlan999 tag=999 -- set Interface vlan999 type=internal
Далее интерфейс vlan999 настраивается аналогично физическому интерфейсу
cat /etc/net/ifaces/vlan999/options
BOOTPROTO=static TYPE=eth NM_CONTROLLED=no DISABLED=no CONFIG_WIRELESS=no SYSTEMD_BOOTPROTO=static CONFIG_IPV4=yes SYSTEMD_CONTROLLED=no ON_BOOT=yes
cat /etc/net/ifaces/vlan999/ipv4address
10.10.10.2/24
Настройка через etcnet
Подготовка физических интерфейсов
cd /etc/net/ifaces/
ls ens20 options
cat ens20/options BOOTPROTO=static TYPE=eth DISABLED=no CONFIG_IPV4=yes ON_BOOT=yes
Должны быть только эти файлы и только такое содержимое в них.
Количество самих интерфейсов и их названия могут отличаться.
Дальнейшие примеры будут строиться на базе физического интерфейса
ens20
Создаём конфигурацию для поднятия моста vmbr0 поверх ens20 средствами etcnet
Далее будет использоваться синтаксис heredoc для более удобного конфигурирования через копирование текста мышью из браузера в эмулятор терминала
Создаём мост vmbr0 поверх физического интерфейса ens20 с выводом трафика с виланов 100, 200, 999 через сетевой интерфейс ens20 во внешнюю сеть.
cd /etc/net/ifaces/
mkdir vmbr0
cat << 'EOF' > vmbr0/options BOOTPROTO=static TYPE=ovsbr DISABLED=no CONFIG_IPV4=yes ON_BOOT=yes HOST=ens20 OVS_REMOVE=yes EOF
cat << 'EOF' > vmbr0/ifup-post ovs-vsctl set port ens20 trunks=100,200,999 EOF
chmod +x vmbr0/ifup-post
systemctl restart network
Проверка
ovs-vsctl show
должна вернуть что-то типа
968569fe-451b-4b42-b191-65700538b36b Bridge vmbr0 Port ens20 trunks: [100, 200, 999] Interface ens20 Port vmbr0 Interface vmbr0 type: internal ovs_version: "2.17.8"
Для вывода трафика из виланов на физические интерфейсы в файл
vmbr0/ifup-post
дополнительно можно добавить команды. Например для вывода вилана 100 и 200, соответственно в физические интерфейсы ens21 и ens22 файл можно создать так:
cat << 'EOF' > vmbr0/ifup-post ovs-vsctl set port ens20 trunks=100,200,999 ovs-vsctl set port ens21 tag=100 ovs-vsctl set port ens22 tag=200 EOF
Создаём конфигурацию для поднятия vlan интерфейса vlan999 с id=999 поверх моста vmbr0 средствами etcnet
cd /etc/net/ifaces/
mkdir vlan999
cat << 'EOF' > vlan999/options BOOTPROTO=static TYPE=ovsport DISABLED=no CONFIG_IPV4=yes ON_BOOT=yes BRIDGE=vmbr0 VID=999 EOF
echo '10.10.10.2/24' > vlan999/ipv4address
systemctl restart network
Проверка
ovs-vsctl show
должна вернуть что-то типа
968569fe-451b-4b42-b191-65700538b36b Bridge vmbr0 Port vlan999 tag: 999 Interface vlan999 type: internal Port vmbr0 Interface vmbr0 type: internal Port ens20 trunks: [100, 200, 999] Interface ens20 ovs_version: "2.17.8"
Проверяем все сетевые интерфейсы
ip a ... физический интерфейс ens20. Особое внимание на state UP ... 3: ens20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000 link/ether 7a:ba:31:39:f3:47 brd ff:ff:ff:ff:ff:ff altname enp0s20 inet6 fe80::78ba:31ff:fe39:f347/64 scope link valid_lft forever preferred_lft forever ... интерфейс ovs-system, который создаётся посредством openvswitch. state не имеет значения ... 18: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 7e:d8:51:8b:62:59 brd ff:ff:ff:ff:ff:ff ... мост vmbr0. state UNKNOWN -- это нормально ... 19: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether c6:f3:66:f8:cf:4f brd ff:ff:ff:ff:ff:ff inet6 fe80::c4f3:66ff:fef8:cf4f/64 scope link valid_lft forever preferred_lft forever ... vlan интерфейс vlan999. state UNKNOWN -- это нормально. inet 10.10.10.2/24 -- это настроенный на нём статический ip-адрес ... 20: vlan999: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether fa:52:f6:ff:05:87 brd ff:ff:ff:ff:ff:ff inet 10.10.10.2/24 scope global vlan999 valid_lft forever preferred_lft forever inet6 fe80::f852:f6ff:feff:587/64 scope link valid_lft forever preferred_lft forever
Коллизии с одинаковыми MAC-адресами при работе в виртуальных стендах
Проблема
В виртуальных стендах используются клоны виртуальных машин. Следовательно, клоны могут вести себя одинаково. До такой степени одинаково, что openvswitch и etcnet могут поднимать сетевые интерфейсы с абсолютно одинаковыми MAC-адресами.
Например, на вилан-интерфейсах на разных машинах могут быть одинаковые MAC-адреса. Следовательно, ping между двумя такими машинами (с одинаковыми MAC-адресами) работать не будет.
Решение
Для решения этой проблемы можно воспользоваться дополнительным конфигурационным файлом в каталоге etcnet.
Например, для интерфейса
vlan999
можно задать другой MAC-адрес путём создания в каталоге
/etc/net/ifaces/vlan999
файла
iplink
со следующем содержимым
address 0a:98:99:c0:e8:28
, где
0a:98:99:c0:e8:28
-- это желаемый MAC-адрес
После создания файла необходимо перезапустить сервис network командой
systemctl restart network
После этого можно проверить вывод команды
ip a
и убедиться в том, что на сетевом интерфейсе поменялся MAC-адрес