Введение
В статье рассматриваются приемы включения и настройки сетевых служб VLAN и VXLAN.
- VLAN ( Virtual Local Area Network ) — виртуальная локальная компьютерная сеть (виртуальный изолированный широковещательный домен). Позволяет группе сетевых устройств взаимодействовать так, как если бы они были подключены к единой изолированной от других сетей локальной сети независимо от физического местонахождения этих устройств. VLAN представляется участникам группы как отдельная физическая локальная сеть, обеспечивает передачу данных между участниками группы и изолирует их от устройств, не входящих в группу. Для идентификации принадлежности сетевых пакетов тому или иному VLAN-у используется двенадцатибитный идентификатор (VLAN ID), т.е. максимальное количество VLAN-ов в одной сети — 4096. Подробнее см. RFC-3069 VLAN Aggregation for Efficient IP Address Allocation и документацию по стандартам IEEE 802.1q. В Astra Linux реализован как модуль ядра (модуль 8021q);
- VXLAN (Virtual Extensible LAN) — технология сетевой виртуализации, предназначенная для обеспечения масштабируемости больших система облачных вычислений. VXLAN использует схожую с VLAN технику для инкапсуляции кадров Ethernet второго уровня в в пакеты UDP.
VXLAN обеспечивает функционирование до 16 миллионов изолированных логических сетей второго уровня, позволяя им одновременно существовать в одной сети передачи данных. Представляет собой протокол туннелирования, разработанный для преодоления ограничения в 4096 идентификаторов, установленного в стандарте IEEE 802.1q (VLAN). Размер идентификатора VXLAN увеличен до 24 бит (16 777 216 идентификаторов). Подробнее см. RFC 7348 и стандарт IEEE 802.1ad. В Astra Linux реализован как модуль ядра (модуль vxlan).
Включение и настройка VLAN
Настройка сетевых интерфейсов VLAN подобна настройке обычных сетевых интерфейсов. Важным отличием является то, что интерфейс VLAN привязывается к существующему «родительскому» интерфейсу. Далее в примерах будет выполняться настройка с использованием в качестве родительского простого сетевого интерфейса eth0, однако VLAN может быть настроен с использованием в качестве родительских таких интерфейсов, как объединение (bond или team) или мост (bridge).
Загрузка модуля ядра
- Загрузить модуль ядра 8021q:
echo "500 firsttable" | sudo tee -a /etc/iproute2/rt_tables echo "501 firsttable" | sudo tee -a /etc/iproute2/rt_tables"
Для того, чтобы модуль загружался автоматически при загрузке ОС, можно создать в каталоге /etc/modules-load.d/ файл с именем, например, /etc/modules-load.d/vlan.conf, и перечислить в нём названия загружаемых модулей:
Настройка VLAN
Создание и настройка VLAN с помощью NetworkManager
- Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);
- Правой кнопкой мыши нажать на апплет NetworkManager:
- В появившемся списке выбрать пункт «Изменить соединения»:
- Для создания нового соединения нажать кнопку с символом «+»;
- Выбрать тип соединения VLAN и нажать кнопку «Создать»:
- В открывшейся форме:
- В закладке VLAN задать параметры, относящиеся к VLAN:
- Указать имя соединения;
- Выбрать родительский интерфейс;
- Указать идентификатор VLAN;
- По необходимости заполнить остальные параметры:
- В остальных закладках указать параметры, как для обычных сетевых соединений.
- Нажать кнопку «Сохранить»;
- В закладке VLAN задать параметры, относящиеся к VLAN:
Создание и настройка VLAN с помощью службы networking
Для настройки интерфейса VLAN с помощью службы networking
- Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);
- Проверить список имеющихся сетевых интерфейсов:
ip link show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:64:d9:e8 brd ff:ff:ff:ff:ff:ff
Далее для настройки будет использоваться интерфейс eth0;
# The first VLAN interface auto eth0.500 iface eth0.500 inet static address 172.20.20.10 netmask 255.255.255.240 gateway 172.20.20.1 dns-nameservers 8.8.8.8 8.8.4.4
При необходимости можно добавить несколько интерфейсов VLAN
# The second VLAN interface auto eth0.501 iface eth0.501 inet static address 172.21.10.0 netmask 255.255.255.0
Если хост используется в качестве гипервизора, то выполнить настройку сети:
- Разрешить в конфигурации сети пересылку пакетов:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.conf.all.arp_filter=0" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.conf.all.rp_filter=2" | sudo tee -a /etc/sysctl.conf
Включение и настройка VXLAN
Базовые команды
Управление таблицами пересылки VXLAN выполняется с помощью команды bridge:
- Создать правило в таблице пересылки:
Проверить состояние устройства VXLAN можно командой ifconfig:
Проверить таблицу маршрутизации можно командой:
Простейшую проверку работоспособности можно сделать, выполнив команду ping с адресом VXLAN другого устройства:
Примеры
Простейший VXLAN «точка-точка»
- Сервер 1:
- IP-адрес: 172.31.0.106;
- VXLAN-адрес: 10.0.0.106;
- IP-адрес: 172.31.0.107;
- VXLAN-адрес: 10.0.0.107;
- Настройка Сервера 1:
- docker0 — мост, созданный при установке docker. Сеть 172.17.0.0/16, IP-адрес интерфейса 172.17.0.1;
- br-xxxx — мост сети, созданной для реализации примера. Сеть 172.18.0.0/16, IP-адрес интерфейса 172.18.0.1;
- vethxxxx — интерфейсы контейнеров. Создаются при создании (запуске) каждого контейнера. Интерфейс eth0 контейнера соответствует интерфейсу veth;
- Добавить интерфейс VXLAN:
sudo ip link add vxlan0 type vxlan id 1 remote 172.31.0.106 dstport 4789 dev eth0
sudo ip link set vxlan0 up
sudo ip addr add 10.0.0.107/24 dev vxlan0VXLAN между контейнерами Docker
Далее используются две хост-машины:
По умолчанию контейнеры на каждой хост-машине подключены к одному сетевому мосту и могут коммуницировать друг с другом, а контейнеры на разных хост-машинах не могут коммуницировать друг с другом (для коммуникации может использоваться специальное ПО, как, например k8s). В настоящем примере для установления связи между контейнерами на разных хост-машинах используются стандартные сетевые интерфейсы docker и VXLAN.
Материалы по установке docker и созданию контейнеров см. Применение системы изоляции приложений docker в ОС Astra Linux Special Edition 1.7. Далее в примере используется образ wiki/astralinux:se.
Далее используется команда brctl из пакета bridge-utils. Установить пакет bridge-utils можно командой:
При установке docker на компьютере по умолчанию создается специальный сетевой интерфейс — мост docker0, которому присваивается IP-адрес 172.17.0.1/16. Это сетевой мост, соединяющий контейнеры. Проверить параметры интерфейса:
sudo ifconfig docker0
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:a9:5e:6f:00 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0IP-адреса контейнеров docker назначаются автоматически начиная с адреса 172.17.0.2. Чтобы зафиксировать адреса сетевых интерфейсов контейнеров, используемых далее в примере, необходимо при запуске контейнеров использовать параметр —ip. Использование это параметра поддерживается только на дополнительных сетях docker, и такую сеть нужно создать на каждой из хост-машин:
docker network ls
NETWORK ID NAME DRIVER SCOPE
265dff745581 bridge bridge local
ddf7301657ff host host local
a28625161bb9 mynetwork bridge local
b74b0b0796bb none null localsudo ifconfig
br-a28625161bb9: flags=4099 mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:e9:f0:e9:a0 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0Контейнер также можно запустить в сети docker, принятой «по умолчанию», с автоматическим присвоением адреса:
При этом на каждой хост-машине работает контейнер.
Получить список мостов и их интерфесов можно командой brctl, например:
sudo brctl show
br-a28625161bb9 8000.0242e9f0e9a0 no veth1675dd1
docker0 8000.0242a95e6f00 no vethe587b2dДалее создадим сетевые интерфейсы VXLAN в каждой из хост-машин, и подключим их к мосту docker. Сетевые пакеты из контейнера будут доставляться в мост docker, инкапсулироваться в сообщения VXLAN и пересылаться на вторую хост-машину. На второй хост-машине сообщения VXLAN пересылаются в контейнер docker через мост второй хост-машины.
- Настройка первой хост-машины:
- Создать интерфейс VXLAN с идентификатором (VNI) 2000 и названием vxlan_docker. Параметры похожи на использованные в предыдущем примере:
sudo ip link add vxlan_docker type vxlan id 200 remote 172.31.0.106 dstport 4789 dev eth0
sudo ip link set vxlan_docker up
sudo brctl addif br-f4b35af34313 vxlan_dockerДалее можно проверить соединение с помощью команды ping, выполняемой в контейнере: