Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Введение
В статье рассматриваются приемы включения и настройки сетевых служб 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).
Загрузка модуля ядра
Для использования VLAN:
Загрузить модуль ядра 8021q:
sudo modprobe 8021qУбедиться, что модуль загружен:
lsmod | grep 8021qДобавить в сетевые настройки (iptables) разрешения на создание таблиц маршрутизации:
echo "500 firsttable" | sudo tee -a /etc/iproute2/rt_tables echo "501 firsttable" | sudo tee -a /etc/iproute2/rt_tables"
Здесь и далее используются VLAN ID 500 и 501;
Для того, чтобы модуль загружался автоматически при загрузке ОС, можно создать в каталоге /etc/modules-load.d/ файл с именем, например, /etc/modules-load.d/vlan.conf, и перечислить в нём названия загружаемых модулей:
8021q
Настройка VLAN
Создание и настройка VLAN с помощью NetworkManager
- Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);
- Правой кнопкой мыши нажать на апплет NetworkManager:
- В появившемся списке выбрать пункт "Изменить соединения":
- Для создания нового соединения нажать кнопку с символом "+";
- Выбрать тип соединения VLAN и нажать кнопку "Создать":
- В открывшейся форме:
- В закладке VLAN задать параметры, относящиеся к VLAN:
- Указать имя соединения;
- Выбрать родительский интерфейс;
- Указать идентификатор VLAN;
- По необходимости заполнить остальные параметры:
- В остальных закладках указать параметры, как для обычных сетевых соединений.
- Нажать кнопку "Сохранить";
- В закладке VLAN задать параметры, относящиеся к VLAN:
Создание и настройка VLAN с помощью службы networking
Для настройки интерфейса VLAN с помощью службы networking
Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);
Проверить список имеющихся сетевых интерфейсов:
ip link show1: lo: <LOOPBACK,UP,LOWER_UP> 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:002: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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 должно иметь форму <имя_интерфейса>.<VLAN_ID>;
Включить сетевые интерфейсы:
sudo ifup eth0.500Проверить состояние интерфейса:
sudo ifconfig eth0.500
При необходимости можно добавить несколько интерфейсов VLAN
# The second VLAN interface auto eth0.501 iface eth0.501 inet static address 172.21.10.0 netmask 255.255.255.0
Если хост используется в качестве гипервизора, то выполнить настройку сети:
Разрешить в конфигурации сети пересылку пакетов. Для этого создать в каталоге /etc/sysctl.d/ файл с любым именем и расширением .conf. Например:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.d/net.conf echo "net.ipv4.conf.all.arp_filter=0" | sudo tee -a /etc/sysctl.d/net.conf echo "net.ipv4.conf.all.rp_filter=2" | sudo tee -a /etc/sysctl.d/net.conf
Загрузить конфигурацию:
sudo sysctl -p
Включение и настройка VXLAN
Базовые команды
Создание устройства VXLAN:
sudo ip link add vxlan0 type vxlan id 42 group 239.1.1.1 dev eth0 dstport 4789Указанная команда создает новое устройство с именем vxlan0. Это устройство использует широковещательную группу 239.1.1.1 и родительское устройство eth0 для обработки трафика, не имеющего правил обработки в таблице пересылки (форвардинга) пакетов. Целевой порт 4789 выбран в соответствии со стандартом IANA;Удаление устройства VXLAN:
sudo ip link delete vxlan0Получение информации об устройстве VXLAN:
sudo ip -d link show vxlan0
Управление таблицами пересылки VXLAN выполняется с помощью команды bridge:
Создать правило в таблице пересылки:
sudo bridge fdb add to 00:17:42:8a:b4:05 dst 192.19.0.2 dev vxlan0Удалить правило пересылки:
sudo bridge fdb delete 00:17:42:8a:b4:05 dev vxlan0Получение информации о правилах пересылки:
sudo bridge fdb show dev vxlan0
Проверить состояние устройства VXLAN можно командой ifconfig:
Проверить таблицу маршрутизации можно командой:
Простейшую проверку работоспособности можно сделать, выполнив команду ping с адресом VXLAN другого устройства:
Примеры
Простейший VXLAN "точка-точка"
Описание стенда:
- Сервер 1:
- IP-адрес: 172.31.0.106;
- VXLAN-адрес: 10.0.0.106;
- Сервер 2:
- IP-адрес: 172.31.0.107;
- VXLAN-адрес: 10.0.0.107;
Настройка стенда:
- Настройка Сервера 1:
Добавить интерфейс VXLAN:
sudo ip link add vxlan0 type vxlan id 1 remote 172.31.0.107 dstport 4789 dev eth0Включить добавленный интерфейс:
sudo ip link set vxlan0 upНазначить интерфейсу адрес:
sudo ip addr add 10.0.0.106/24 dev vxlan0
Настройка Сервера 2 выполняется аналогично, отличаются только адреса:
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 vxlan0
VXLAN между контейнерами Docker
Далее используются две хост-машины:
- Хост-машина 1:
- IP-адрес: 172.31.0.106;
- Хост-машина 2:
- IP-адрес: 172.31.0.107;
По умолчанию контейнеры на каждой хост-машине подключены к одному сетевому мосту и могут коммуницировать друг с другом, а контейнеры на разных хост-машинах не могут коммуницировать друг с другом (для коммуникации может использоваться специальное ПО, как, например k8s). В настоящем примере для установления связи между контейнерами на разных хост-машинах используются стандартные сетевые интерфейсы docker и VXLAN.
Материалы по установке docker и созданию контейнеров см. статью Установка и администрирование Docker в Astra Linux Special Edition. Далее в примере используется образ wiki/astralinux:se.
Далее используется команда brctl из пакета bridge-utils. Установить пакет bridge-utils можно командой:
docker0: flags=4099<UP,BROADCAST,MULTICAST> 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 0
NETWORK ID NAME DRIVER SCOPE
265dff745581 bridge bridge local
ddf7301657ff host host local
a28625161bb9 mynetwork bridge local
b74b0b0796bb none null local
br-a28625161bb9: flags=4099<UP,BROADCAST,MULTICAST> 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
- 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;
При этом на каждой хост-машине работает контейнер.
Получить список мостов и их интерфесов можно командой brctl, например:
br-a28625161bb9 8000.0242e9f0e9a0 no veth1675dd1
docker0 8000.0242a95e6f00 no vethe587b2d
- Настройка первой хост-машины:
Создать интерфейс VXLAN с идентификатором (VNI) 2000 и названием vxlan_docker. Параметры похожи на использованные в предыдущем примере:
sudo ip link add vxlan_docker type vxlan id 200 remote 172.31.0.107 dstport 4789 dev eth0Включить созданный интерфейс VLAN:
sudo ip link set vxlan_docker upПодключить созданный интерфейс к мосту docker:
sudo brctl addif br-3231f89d69f6 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, выполняемой в контейнере: