linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Сеть: L2 / L3/bonding-and-teaming

kb/network-l2-l3 ── Сеть: L2 / L3 ── advanced

Bonding и teaming - объединение интерфейсов

Bonding объединяет несколько физических интерфейсов в один логический. Режимы: active-backup (один активный), 802.3ad/LACP (LAG со свитчем), balance-xor (хэш по MAC). Используется для HA и удвоения throughput.

view as markdownaka: bonding, teaming, link-aggregation, lacp, bond0

Зачем bonding

Один сетевой интерфейс - один SPOF. На серверах ставят 2-4 NIC и объединяют:

  • High availability - один порт лёг, второй держит линк (active-backup)
  • Throughput - 2×10G физически, до 20G на один логический интерфейс (LACP с правильным хэшированием)
  • Load balancing - распределить пропускную способность между исходящими сессиями

Linux реализует это через драйвер bonding, создающий bond0 поверх физических slave'ов. Альтернатива - team (более модульная), но bonding исторически популярнее.

Режимы

modeИмяОписание
0balance-rrround-robin: пакеты по очереди в каждый slave. Хорош для throughput, плох для порядка - reorder вызывает retransmit'ы
1active-backupодин активный, остальные standby. Свитч не нужно настраивать. Универсальный default
2balance-xorхэш(src-MAC ^ dst-MAC) → slave. Стабильный «один поток - один путь»
3broadcastвсё во все slave'ы. Для special HA-кейсов
4802.3ad (LACP)агрегация по стандарту, нужен LAG на свитче
5balance-tlbTransmit Load Balancing - исходящий по slave с меньшей загрузкой
6balance-albто же + входящий через ARP-tricks (без поддержки свитча)

Самые распространённые: mode 1 (active-backup) для простоты и mode 4 (LACP) для производительности.

active-backup (mode 1)

Простой и универсальный - со свитчем настраивать ничего не надо.

bash
ip link add bond0 type bond mode active-backup miimon 100
ip link set eth0 master bond0
ip link set eth1 master bond0
ip link set bond0 up
ip addr add 10.0.0.5/24 dev bond0
  • miimon 100 - проверять линк каждые 100мс через MII (PHY-status)
  • При обрыве линка на active slave - failover за ~200мс на backup
  • MAC-адрес bond'а = MAC активного slave'а (при failover может смениться - ARP-update в сеть)

LACP (mode 4) - 802.3ad

Стандартный механизм. На свитче настраивается port-channel / LAG с теми же портами:

bash
ip link add bond0 type bond mode 802.3ad miimon 100 \
    lacp_rate fast xmit_hash_policy layer3+4
  • lacp_rate fast - LACPDU каждую секунду (vs 30с по дефолту)
  • xmit_hash_policy layer3+4 - хэш по src/dst IP + порт. Один поток идёт по одному slave'у, разные потоки распределяются.

Важно: один TCP-flow всегда через один slave. То есть от 1 клиента получишь максимум 10G на 2×10G LACP. Несколько клиентов - до 20G.

Hash policy

xmit_hash_policyХэш
layer2src+dst MAC
layer2+3+ IP-адреса
layer3+4IP + порт (наиболее распределяет)

layer3+4 нарушает 802.3ad строго, но в реальности всё работает - свитчам пофиг как ты выбираешь slave для исходящего.

Конфигурация в systemd-networkd

ini
# /etc/systemd/network/10-bond.netdev
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=802.3ad
LACPTransmitRate=fast
TransmitHashPolicy=layer3+4
MIIMonitorSec=100ms
# /etc/systemd/network/20-bond-eth0.network
[Match]
Name=eth0
[Network]
Bond=bond0
# /etc/systemd/network/30-bond-ip.network
[Match]
Name=bond0
[Network]
Address=10.0.0.5/24
Gateway=10.0.0.1

Bonding + VLAN

Чтобы поднять VLAN'ы поверх bond'а - сначала bond, потом VLAN:

bash
ip link add bond0 type bond mode 802.3ad
ip link add link bond0 name bond0.10 type vlan id 10

Получаешь LACP-агрегацию + теги [[vlan-and-trunk|802.1Q]] поверх.

Bonding + bridge

В виртуализации (KVM, libvirt): bond + bridge - стандартная конфигурация. VM'ы видят br0, наружу через bond:

eth0 ──┐
       ├─ bond0 ── br0 ── (vnetX к VM'кам)
eth1 ──┘

Когда что-то пошло не так

  • LACP не сходится - на свитче LAG не настроен / не active mode. Проверить: cat /proc/net/bonding/bond0 показывает per-slave LACP-state
  • Нет роста throughput - один TCP-flow, hash policy layer2. Сменить на layer3+4 + несколько потоков
  • Failover медленный - miimon слишком велик; ставь 100ms
  • MAC меняется при failover - использовать fail_over_mac=active (новый MAC) или fail_over_mac=follow (всегда MAC primary)
  • Bridge поверх bond ругается - net.ipv4.conf.all.arp_filter=1 или arp_ignore=1 нужны на bonding-интерфейсе

§ команды

bash
cat /proc/net/bonding/bond0

Полный статус bond'а: режим, slaves, LACP info, активный slave

bash
ip -d link show bond0

-d показывает bond-параметры: mode, miimon, hash policy

bash
ethtool eth0 | grep -E 'Speed|Link'

Проверить физический линк перед/после добавления в bond

bash
ip link set eth0 master bond0

Добавить slave; интерфейс должен быть DOWN при добавлении в некоторых режимах

bash
ip link set bond0 type bond miimon 50

Динамически изменить miimon - не требуется пересоздавать bond

§ см. также

  • ethernet-frameEthernet frameEthernet-frame - единица передачи на L2: dst-MAC, src-MAC, ethertype, payload (обычно IP-пакет), FCS-checksum. Стандартный MTU = 1500 байт.
  • mac-addressMAC addressMAC - 48-битный аппаратный адрес сетевой карты, формат `aa:bb:cc:dd:ee:ff`. Уникален в пределах L2-сегмента, используется в [[ethernet-frame]] для адресации L2.
  • vlan-and-trunkVLAN и trunk - 802.1QVLAN - логическое разделение одного физического свитча на несколько L2. Tag 802.1Q добавляет 4 байта в Ethernet-frame с VLAN-ID (12 бит, до 4094 VLAN). Trunk = много VLAN на порте, access = один.
  • linux-bridgeLinux bridge - программный свитчBridge - программный L2-свитч в ядре Linux. Учит MAC в FDB, форвардит фреймы между интерфейсами. Основа Docker default network, KVM bridge, libvirt. С vlan_filtering эмулирует управляемый свитч.
  • cmd-tctc - traffic control`tc` управляет очередями пакетов на сетевых интерфейсах: лимиты bandwidth, задержки, потери, классификация. Часть iproute2.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки