🧭 Настройка и виды сетевых бондов (bonding) в Linux
📑 Содержание
- Что такое Bonding
- Основные преимущества bonding
- Пример сети
- Настройка bonding через /etc/network/interfaces
- Режимы bonding (0–6)
- Активация bonding и проверка
- Сводная таблица режимов bonding
- Настройка bonding через nmcli (NetworkManager)
- Вывод
- Параметр bond-xmit-hash-policy
- Условия для работы бондов
- Вывод по пакетам и модулям
Что такое Bonding
Bonding (или Teaming) — это технология объединения нескольких сетевых интерфейсов в один логический интерфейс (bond0), чтобы увеличить пропускную способность, повысить отказоустойчивость или распределять нагрузку между интерфейсами.
Применяется на серверах, маршрутизаторах, в виртуализации и кластерах.
⚙️ Основные преимущества bonding
- ✅ Увеличение скорости передачи (агрегация каналов)
- ✅ Отказоустойчивость (резервирование)
- ✅ Гибкость настройки (7 режимов работы)
- ✅ Поддержка большинства дистрибутивов Linux
🌐 Пример сети
| Параметр | Значение |
|---|---|
| Подсеть | 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 и проверка
-
Загрузить модуль:
sudo modprobe bonding -
Добавить в автозагрузку:
echo "bonding" | sudo tee -a /etc/modules -
Перезапустить сеть:
sudo systemctl restart networking -
Проверить состояние:
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)
Плюсы:
- Простая, надёжная схема.
- Хорошая совместимость со свичами.
Минусы:
- Если все пакеты идут к одному MAC, весь трафик идёт через один интерфейс.
- Плохая балансировка при работе с одним шлюзом.
Пример:
bond-xmit-hash-policy layer2
🔹 layer2+3 — MAC + IP
Добавляет IP-адреса в хеш, повышая разнообразие потоков.
Принцип:
hash = (MAC(src) ⊕ MAC(dst)) ⊕ (IP(src) ⊕ IP(dst))
Плюсы:
- Лучше распределяет трафик по интерфейсам.
- Совместима с VLAN и LACP.
Минусы:
- Немного увеличивает нагрузку на CPU.
Пример:
bond-xmit-hash-policy layer2+3
🔹 layer3+4 — IP и порты TCP/UDP
Самый сбалансированный вариант для современных сетей. Хеширует комбинацию IP и портов.
Принцип:
hash = (IP(src) ⊕ IP(dst)) ⊕ (PORT(src) ⊕ PORT(dst))
Плюсы:
- Отличная балансировка множества соединений.
- Подходит для высоконагруженных серверов и балансировщиков.
- Рекомендуемый режим для
bond-mode=802.3ad.
Минусы:
- Коммутатор должен поддерживать LACP с таким же хешем.
Пример:
bond-xmit-hash-policy layer3+4
🔹 encap2+3 и encap3+4 — Для туннельных интерфейсов
Используются при работе через GRE, VXLAN, GENEVE и другие инкапсулированные протоколы.
Принцип:
encap2+3: MAC + IP из полезной нагрузки (внутри туннеля)encap3+4: IP + порты TCP/UDP внутри туннеля
Плюсы:
- Корректная балансировка для overlay-сетей.
- Поддержка виртуализации и контейнеризации.
Пример:
bond-xmit-hash-policy encap3+4
🔹 VLAN-aware политики (vlan+*)
Актуальны для trunk-интерфейсов, когда на bond навешиваются VLAN-интерфейсы (bond0.100, bond0.200 и т.д.)
Преимущества:
- Разделение трафика по VLAN ID.
- Оптимизация в multi-tenant сетях.
Пример:
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)
🧠 Итого
bond-xmit-hash-policyопределяет, на основе чего выбирается интерфейс для исходящего трафика.- При использовании LACP (
mode=4) нужно согласовать хеш с коммутатором (обычноlayer3+4). - Для автономных режимов (
mode=2,5,6) можно использовать любые политики — ядро решает локально.
Условия для работы бондов
1. bonding.ko
- Это ядро-модуль Linux, который реализует функциональность bonding (объединения нескольких сетевых интерфейсов в один логический).
- Нужен только один раз для всей системы.
- Когда модуль загружен (
modprobe bonding), ты можешь создавать сколько угодно bond-интерфейсов (bond0,bond1и т.д.). - В пакетах дистрибутива он обычно идёт как часть
kernel-modulesили отдельно какkernel-modules-extra(название зависит от дистрибутива).
В большинстве современных дистрибутивов Linux модуль bonding.ko действительно включён в ядро и доступен по умолчанию, но есть нюансы:
1.1. Проверка наличия модуля
Можно проверить, доступен ли модуль в системе:
modinfo bonding
Если вывод есть — модуль доступен.
Также можно проверить, загружен ли он сейчас:
lsmod | grep bonding
1.2. Загрузка модуля
Если модуль есть, но ещё не загружен:
sudo modprobe bonding
После этого можно создавать bond-интерфейсы.
2. ifenslave
- Это пользовательская утилита, которая привязывает физические интерфейсы к bond-интерфейсу.
- Утилита тоже одна на систему, а не на каждый bond.
- С её помощью ты выполняешь команды типа:
ifenslave bond0 eth0 eth1
- Можно создать несколько bond-интерфейсов, и для всех них используется один и тот же ifenslave.
3. Важные моменты
-
Не нужен отдельный пакет на каждый bond.
- Модуль ядра (
bonding.ko) и утилита (ifenslave) один раз ставятся для всей системы.
- Модуль ядра (
- Конфигурация бондов делается через конфиги сети (
/etc/network/interfaces,nmcli,systemd-networkdилиnetplan) для каждого bond отдельно. - Поддержка разных режимов bonding (active-backup, LACP, balance-alb и т.д.) встроена в модуль ядра, нет необходимости ставить что-то дополнительно.
bonding.ko— один модуль для всей системы.ifenslave— одна утилита для всей системы.