Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • 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:


  1. Загрузить модуль ядра 8021q:

    Command
    sudo modprobe 8021q


  2. Убедиться, что модуль загружен:

    Command
    lsmod | grep 8021q


  3. Добавить в сетевые настройки (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

  1. Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);
  2. Правой кнопкой мыши нажать на апплет NetworkManager:
  3. В появившемся списке выбрать пункт "Изменить соединения":
  4. Для создания нового соединения нажать кнопку с символом "+";
  5. Выбрать тип соединения VLAN и нажать кнопку "Создать":
  6. В открывшейся форме:
    1. В закладке VLAN задать параметры, относящиеся к VLAN:
      1. Указать имя соединения;
      2. Выбрать родительский интерфейс;
      3. Указать идентификатор VLAN;
      4. По необходимости заполнить остальные параметры:
    2. В остальных закладках указать параметры, как для обычных сетевых соединений.
    3. Нажать кнопку "Сохранить";

Создание и настройка VLAN с помощью службы networking

Для настройки интерфейса VLAN с помощью службы networking

  1. Войти в сессию администратора (для Astra Linux Special Edition с включенным МКЦ — администратора с высоким уровнем целостности);

  2. Проверить список имеющихся сетевых интерфейсов:

    Command
    Titleip link show

    1: 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:00

    2: 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;

  3. В файл конфигурации сетевого интерфейса добавить строки:

    Блок кода
    # 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>;

  4. Включить сетевые интерфейсы:

    Command
    sudo ifup eth0.500


  5. Проверить состояние интерфейса:

    Command
    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

Если хост используется в качестве гипервизора, то выполнить настройку сети:

  1. Разрешить в конфигурации сети пересылку пакетов. Для этого создать в каталоге /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


  2. Загрузить конфигурацию:

    Command
    sudo sysctl -p


Включение и настройка VXLAN

Базовые команды

  1. Создание устройства VXLAN:

    Command
    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;

  2. Удаление устройства VXLAN:

    Command
    sudo ip link delete vxlan0


  3. Получение информации об устройстве VXLAN:

    Command
    sudo ip -d link show vxlan0


Управление таблицами пересылки VXLAN выполняется с помощью команды bridge:

  1. Создать правило в таблице пересылки:

    Command
    sudo bridge fdb add to 00:17:42:8a:b4:05 dst 192.19.0.2 dev vxlan0


  2. Удалить правило пересылки:

    Command
    sudo bridge fdb delete 00:17:42:8a:b4:05 dev vxlan0


  3. Получение информации о правилах пересылки:

    Command
    sudo bridge fdb show dev vxlan0


Проверить состояние устройства VXLAN можно командой ifconfig:

Command
sudo ifconfig vxlan0

Проверить таблицу маршрутизации можно командой:

Command
sudo route -n

Простейшую проверку работоспособности можно сделать, выполнив команду ping с адресом VXLAN другого устройства:

Command
ping 10.0.0.107

Примеры

Простейший VXLAN "точка-точка"

Описание стенда:

  • Сервер 1:
    • IP-адрес: 172.31.0.106;
    • VXLAN-адрес: 10.0.0.106;
  • Сервер 2:
    • IP-адрес: 172.31.0.107;
    • VXLAN-адрес: 10.0.0.107;

Настройка стенда:

  1. Настройка Сервера 1:
    1. Добавить интерфейс VXLAN:

      Command
      sudo ip link add vxlan0 type vxlan id 1 remote 172.31.0.107 dstport 4789 dev eth0


    2. Включить добавленный интерфейс:

      Command
      sudo ip link set vxlan0 up


    3. Назначить интерфейсу адрес:

      Command
      sudo ip addr add 10.0.0.106/24 dev vxlan0


  2. Настройка Сервера 2 выполняется аналогично, отличаются только адреса:

    Command
    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 можно командой:

Command
sudo apt install bridge-utils

При установке docker на компьютере по умолчанию создается специальный сетевой интерфейс - мост docker0, которому присваивается IP-адрес 172.17.0.1/16. Это сетевой мост, соединяющий контейнеры. Проверить параметры интерфейса:

Command
Title sudo ifconfig docker0
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

IP-адреса контейнеров docker назначаются автоматически начиная с адреса 172.17.0.2. Чтобы зафиксировать адреса сетевых интерфейсов контейнеров, используемых далее в примере, необходимо при запуске контейнеров использовать параметр --ip. Использование это параметра поддерживается только на дополнительных сетях docker, и такую сеть нужно создать на каждой из хост-машин:

Command
docker network create --subnet 172.18.0.0/16 mynetwork

Проверить список сетей:

Command
Title docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
265dff745581   bridge      bridge    local
ddf7301657ff   host        host      local
a28625161bb9   mynetwork   bridge    local
b74b0b0796bb   none        null      local

При создании сети будет создан новый сетевой интерфейс br-... типа "мост":

Command
Title sudo ifconfig
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

Теперь при запуске контейнера можно указать сеть и фиксированный IP-адрес, для первой хост-машины:

Command
docker run -itd --net mynetwork --ip 172.18.0.2 wiki/astralinux:se

Для второй хост-машины:

Command
docker run -itd --net mynetwork --ip 172.18.0.3 wiki/astralinux:se

Контейнер также можно запустить в сети docker, принятой "по умолчанию", с автоматическим присвоением адреса:

Command
docker run -itd wiki/astralinux:se

Теперь на хост-машинах имеются следующие сетевые интерфейсы:

  • 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, например:

Command
Titlesudo brctl show          
br-a28625161bb9         8000.0242e9f0e9a0       no              veth1675dd1
docker0         8000.0242a95e6f00       no              vethe587b2d

Далее создадим сетевые интерфейсы VXLAN в каждой из хост-машин, и подключим их к мосту docker. Сетевые пакеты из контейнера будут доставляться в мост docker, инкапсулироваться в сообщения VXLAN и пересылаться на вторую хост-машину. На второй хост-машине сообщения VXLAN пересылаются в контейнер docker через мост второй хост-машины.

  1. Настройка первой хост-машины:
    1. Создать интерфейс VXLAN с идентификатором (VNI) 2000 и названием vxlan_docker. Параметры похожи на использованные в предыдущем примере:

      Command
      sudo ip link add vxlan_docker type vxlan id 200 remote 172.31.0.107 dstport 4789 dev eth0


    2. Включить созданный интерфейс VLAN:

      Command
      sudo ip link set vxlan_docker up


    3. Подключить созданный интерфейс к мосту docker:

      Command
      sudo brctl addif br-3231f89d69f6 vxlan_docker


  2. Настройка второй хост-машины выполняется аналогично:

    Command
    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, выполняемой в контейнере:

Command
ping 172.18.0.2