Linux Debian Network Protocol CLI Docs Bonding Reliability Performance Shell

🧭 Настройка и виды сетевых бондов (bonding) в Linux


📑 Содержание


Что такое Bonding

Bonding (или Teaming) — это технология объединения нескольких сетевых интерфейсов в один логический интерфейс (bond0), чтобы увеличить пропускную способность, повысить отказоустойчивость или распределять нагрузку между интерфейсами.

Применяется на серверах, маршрутизаторах, в виртуализации и кластерах.


⚙️ Основные преимущества bonding


🌐 Пример сети

Параметр Значение
Подсеть 10.0.0.0/28
Маска 255.255.255.240
IP сервера 10.0.0.38
Шлюз 10.0.0.1
Интерфейсы eth0, eth1
Bond-интерфейс bond0

🧩 Настройка bonding через /etc/network/interfaces

Для систем без NetworkManager (например, Debian, Ubuntu Server, Astra Linux).

[!TIP] Перед настройкой bond необходимо установить пакет ifenslave


📄 Базовая структура файла /etc/network/interfaces

# Loopback
auto lo
iface lo inet loopback

# Интерфейсы, входящие в bond
auto eth0 eth1 bond0
iface eth0 inet manual
iface eth1 inet manual

# Основная конфигурация bond0
iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-slaves eth0 eth1

🔍 Объяснение параметров

Параметр Значение
bond-mode 802.3ad режим агрегации каналов (LACP)
bond-miimon 100 проверка состояния линка каждые 100 мс
bond-downdelay 200 задержка перед деактивацией порта
bond-updelay 200 задержка перед активацией порта
bond-lacp-rate slow частота обмена LACP-пакетами (slow = 30 сек, fast = 1 сек)
bond-xmit-hash-policy 1 метод балансировки (по IP, MAC или портам)
bond-slaves eth0 eth1 интерфейсы, входящие в бонд

[!NOTE] Для работы LACP требуется, чтобы свич или маршрутизатор также поддерживал 802.3ad и был соответствующим образом настроен. —

🧱 Режимы bonding (0–6)

Linux поддерживает 7 режимов работы bonding. Ниже — подробные описания и готовые конфиги для каждого.


🟢 mode=0 — balance-rr (Round Robin)

Пакеты отправляются последовательно по всем интерфейсам.

Плюсы: максимальная пропускная способность Минусы: может вызывать нарушение порядка пакетов (нужно LACP на свиче)

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode balance-rr
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-slaves eth0 eth1

🟡 mode=1 — active-backup

Один интерфейс активен, второй в режиме ожидания. При сбое активного — резервный становится активным.

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode active-backup
    bond-primary eth0
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-slaves eth0 eth1

✅ Не требует настройки коммутатора. 💡 Самый часто используемый режим в серверах и системах с одной сетью.


🔵 mode=2 — balance-xor

Балансировка по XOR-хешу (по MAC, IP или портам).

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode balance-xor
    bond-xmit-hash-policy layer3+4
    bond-miimon 100
    bond-slaves eth0 eth1

💡 Требует поддержки агрегирования каналов на коммутаторе.


⚫ mode=3 — broadcast

Отправляет все пакеты по всем интерфейсам. Используется для критически важных соединений, где важна отказоустойчивость.

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode broadcast
    bond-miimon 100
    bond-slaves eth0 eth1

🟣 mode=4 — 802.3ad (LACP)

Стандарт IEEE для динамической агрегации каналов. Требует настройки LACP (Link Aggregation) на коммутаторе.

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode 802.3ad
    bond-lacp-rate fast
    bond-xmit-hash-policy layer3+4
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
    bond-slaves eth0 eth1

🟠 mode=5 — balance-tlb (Transmit Load Balancing)

Распределяет исходящий трафик между интерфейсами без участия свича.

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode balance-tlb
    bond-miimon 100
    bond-slaves eth0 eth1

🔴 mode=6 — balance-alb (Adaptive Load Balancing)

Сочетает TLB + входящую балансировку через ARP. Работает без поддержки коммутатора.

iface bond0 inet static
    address 10.0.0.38
    netmask 255.255.255.240
    network 10.0.0.0
    gateway 10.0.0.1
    bond-mode balance-alb
    bond-miimon 100
    bond-slaves eth0 eth1

🔧 Активация bonding и проверка

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

    sudo modprobe bonding
    
  2. Добавить в автозагрузку:

    echo "bonding" | sudo tee -a /etc/modules
    
  3. Перезапустить сеть:

    sudo systemctl restart networking
    
  4. Проверить состояние:

    cat /proc/net/bonding/bond0
    

🧭 Сводная таблица режимов bonding

Mode Название Требует свич Балансировка Резерв Описание
0 balance-rr Перебор интерфейсов
1 active-backup Резервирование
2 balance-xor Балансировка по MAC/IP
3 broadcast Дублирование трафика
4 802.3ad (LACP) Агрегация IEEE 802.3ad
5 balance-tlb ✔ (Tx) Без настройки свича
6 balance-alb ✔ (Tx/Rx) Адаптивная балансировка

🧰 Настройка bonding через nmcli (NetworkManager)

Для современных систем (Ubuntu 22+, Debian 12, RHEL 8+, Astra Linux Common Edition 2.12+).


🔹 1. Создание bond-интерфейса

sudo nmcli connection add type bond ifname bond0 mode 802.3ad

🔹 2. Добавление интерфейсов (слейвов)

sudo nmcli connection add type ethernet ifname eth0 master bond0
sudo nmcli connection add type ethernet ifname eth1 master bond0

🔹 3. Настройка IP-параметров

sudo nmcli connection modify bond0 ipv4.addresses 10.0.0.38/28
sudo nmcli connection modify bond0 ipv4.gateway 10.0.0.1
sudo nmcli connection modify bond0 ipv4.method manual

🔹 4. Установка дополнительных параметров bonding

sudo nmcli connection modify bond0 bond.options "miimon=100,mode=802.3ad,lacp_rate=fast,xmit_hash_policy=layer3+4"

🔹 5. Активация соединения

sudo nmcli connection up bond0

Проверка:

cat /proc/net/bonding/bond0

✅ Вывод

Bonding — мощный инструмент для серверов Linux, позволяющий:

Про параметр bond-xmit-hash-policy

Это как раз то, что часто упускают про bonding — параметр bond-xmit-hash-policy радикально влияет на распределение нагрузки и эффективность работы бонда. Вот подробное объяснение всех возможных значений этого параметра (актуально для Linux bonding-драйвера ifenslave и bonding.ko).


⚙️ bond-xmit-hash-policy — Политика хеширования исходящих пакетов

Этот параметр определяет, как ядро Linux вычисляет хеш (ключ) для выбора интерфейса, через который будет отправлен исходящий пакет в многоканальном бонде (balance-xor, 802.3ad, balance-tlb, balance-alb и т.д.).


📘 Общий синтаксис

bond-xmit-hash-policy <режим>

Добавляется в секцию интерфейса /etc/network/interfaces или задаётся командой:

echo <режим> > /sys/class/net/bond0/bonding/xmit_hash_policy

📊 Возможные значения (режимы хеширования)

Политика Поддержка Алгоритм Описание Где использовать
layer2 ✅ (по умолчанию) MAC-адреса Хешируется MAC-адрес источника и назначения Простая локальная сеть, без IP-балансировки
layer2+3 MAC + IP Хешируется MAC + IP источника и назначения Более равномерное распределение, поддержка IP
layer3+4 IP + порты Хешируется IP и порты TCP/UDP Оптимально для LACP (802.3ad) и балансировки по сессиям
encap2+3 ⚙️ (новый) IP под туннелем Аналог layer2+3, но учитывает инкапсуляцию (VXLAN, GRE) Современные виртуализированные среды
encap3+4 ⚙️ (новый) IP + порты под туннелем Аналог layer3+4, но с поддержкой туннелей LACP + overlay сети (OpenStack, K8s)
vlan+srcmac ⚙️ VLAN ID + MAC Использует VLAN и MAC для хеша Multi-VLAN среда, например, на trunk-портах
vlan+ip ⚙️ VLAN + IP Комбинированный режим для tagged сетей Когда один bond обслуживает несколько VLAN
vlan+ip+port ⚙️ VLAN + IP + порт Максимально точный, требует ядро ≥5.10 Multi-tenant инфраструктуры, балансировка сессий
layer3+4+srcmac ⚙️ IP + порт + MAC Учитывает MAC и IP/порт источника Когда балансировка зависит от MAC клиента

📖 Подробное объяснение режимов


🔹 layer2 — Балансировка на канальном уровне (L2)

Хеширование только по MAC-адресам.

Принцип:

hash = MAC(src) XOR MAC(dst)

Плюсы:

Минусы:

Пример:

bond-xmit-hash-policy layer2

🔹 layer2+3 — MAC + IP

Добавляет IP-адреса в хеш, повышая разнообразие потоков.

Принцип:

hash = (MAC(src) ⊕ MAC(dst)) ⊕ (IP(src) ⊕ IP(dst))

Плюсы:

Минусы:

Пример:

bond-xmit-hash-policy layer2+3

🔹 layer3+4 — IP и порты TCP/UDP

Самый сбалансированный вариант для современных сетей. Хеширует комбинацию IP и портов.

Принцип:

hash = (IP(src) ⊕ IP(dst)) ⊕ (PORT(src) ⊕ PORT(dst))

Плюсы:

Минусы:

Пример:

bond-xmit-hash-policy layer3+4

🔹 encap2+3 и encap3+4 — Для туннельных интерфейсов

Используются при работе через GRE, VXLAN, GENEVE и другие инкапсулированные протоколы.

Принцип:

Плюсы:

Пример:

bond-xmit-hash-policy encap3+4

🔹 VLAN-aware политики (vlan+*)

Актуальны для trunk-интерфейсов, когда на bond навешиваются VLAN-интерфейсы (bond0.100, bond0.200 и т.д.)

Преимущества:

Пример:

bond-xmit-hash-policy vlan+ip+port

🧭 Рекомендации по выбору политики

Среда Рекомендуемый режим Примечание
Простая локальная сеть layer2 Не требует LACP
Несколько IP-клиентов layer2+3 Оптимально для DHCP/разных IP
LACP (802.3ad) layer3+4 Лучший выбор
GRE/VXLAN (виртуализация) encap3+4 Для OpenStack/KVM/VMWare
VLAN trunk vlan+ip или vlan+ip+port Если bond содержит VLAN-интерфейсы
Контейнеры / k8s layer3+4+srcmac Для уникальности потоков

🧩 Проверка текущей политики

cat /proc/net/bonding/bond0 | grep "Transmit Hash"

Пример вывода:

Transmit Hash Policy: layer3+4 (2)

🧠 Итого

Условия для работы бондов


1. bonding.ko

В большинстве современных дистрибутивов Linux модуль bonding.ko действительно включён в ядро и доступен по умолчанию, но есть нюансы:


1.1. Проверка наличия модуля

Можно проверить, доступен ли модуль в системе:

modinfo bonding

Если вывод есть — модуль доступен.

Также можно проверить, загружен ли он сейчас:

lsmod | grep bonding

1.2. Загрузка модуля

Если модуль есть, но ещё не загружен:

sudo modprobe bonding

После этого можно создавать bond-интерфейсы.

2. ifenslave

ifenslave bond0 eth0 eth1

3. Важные моменты

  1. Не нужен отдельный пакет на каждый bond.

    • Модуль ядра (bonding.ko) и утилита (ifenslave) один раз ставятся для всей системы.
  2. Конфигурация бондов делается через конфиги сети (/etc/network/interfaces, nmcli, systemd-networkd или netplan) для каждого bond отдельно.
  3. Поддержка разных режимов bonding (active-backup, LACP, balance-alb и т.д.) встроена в модуль ядра, нет необходимости ставить что-то дополнительно.

Вывод: