Подробный гайд по агрегации каналов (bonding) в Debian 13 - Часть 1
Важно:
Если вы настраиваете сервер удалённо и используемые интерфейсы являются единственным каналом управления, лучше иметь консоль, IPMI/KVM/serial-доступ или второй независимый канал. Ошибка в конфигурации сети может оборвать SSH.
1. Что такое bonding
Bonding — это объединение нескольких физических сетевых интерфейсов в один логический интерфейс, например bond0.
Цели:
- отказоустойчивость: при падении одного линка трафик идёт через другой;
- увеличение пропускной способности: распределение трафика по нескольким физическим каналам;
- единая логическая сетевая точка: один IP, один MAC, один маршрут.
Пример:
bond0
├── enp3s0
└── enp4s0
IP-адрес назначается на bond0, а не на физические интерфейсы.
2. Основные режимы bonding
В Linux есть несколько режимов. Выбор режима зависит от коммутатора и задачи.
| Режим | Название | Назначение | Требования к коммутатору | Комментарий |
|---|---|---|---|---|
0 |
balance-rr |
Round-robin | Желательна поддержка агрегации | Редко рекомендуется для TCP-трафика |
1 |
active-backup |
Активный и резервный канал | Не требуются | Самый простой и надёжный режим для отказоустойчивости |
2 |
balance-xor |
Распределение по hash | Желательна статическая агрегация | Хорош, если коммутатор поддерживает статический LAG |
3 |
broadcast |
Отправка во все порты | Специфичные сценарии | Редко используется |
4 |
802.3ad |
LACP | Обязательна поддержка LACP на коммутаторе | Стандартный вариант для динамической агрегации |
5 |
balance-tlb |
Adaptive transmit load balancing | Обычно не требует настройки коммутатора | Балансировка исходящего трафика |
6 |
balance-alb |
Adaptive load balancing | Обычно не требует настройки коммутатора, но возможны нюансы | Балансировка входящего и исходящего трафика через ARP |
Практические рекомендации
- Нужна только отказоустойчивость?
Используйте:
mode=active-backup
- Коммутатор поддерживает LACP?
Используйте:
mode=802.3ad
- Коммутатор поддерживает только статическую агрегацию без LACP?
Обычно используют:
mode=balance-xor
- Нет управляемого коммутатора, но хочется балансировку исходящего трафика?
Можно рассмотреть:
mode=balance-tlb
mode=balance-alb
Но режимы 5 и 6 имеют особенности и подходят не всегда.
3. Подготовка системы
3.1. Обновите систему
apt update
apt upgrade
3.2. Установите полезные пакеты
apt install ethtool
Пакет ifenslave в современных системах часто не обязателен, так как ядро и iproute2 умеют управлять bonding напрямую, но в Debian он может использоваться некоторыми старыми сценариями.
apt install ifenslave || true
Если пакет не найден — ничего страшного, дальше можно работать через ip link.
3.3. Определите имена сетевых интерфейсов
ip -br link
Пример вывода:
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp3s0 UP 52:54:00:aa:bb:01 <BROADCAST,MULTICAST,UP,LOWER_UP>
enp4s0 UP 52:54:00:aa:bb:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
В примерах дальше будут использоваться:
enp3s0
enp4s0
Замените их на свои реальные интерфейсы.
3.4. Посмотрите состояние линков
ethtool enp3s0
ethtool enp4s0
Обратите внимание на:
Speed:
Duplex:
Link detected:
Желательно, чтобы интерфейсы были подключены к одному коммутатору или к согласованным портам, имели одинаковую скорость и дуплекс.
4. Быстрая проверка bonding без перезагрузки
Перед сохранением конфигурации полезно проверить режим вручную.
4.1. Загрузите модуль bonding
modprobe bonding
Проверка:
lsmod | grep bonding
4.2. Освободите интерфейсы
Перед добавлением в bond интерфейсы должны быть без IP-адресов и не должны состоять в другом bridge/bond/team.
ip addr flush dev enp3s0
ip addr flush dev enp4s0
ip link set enp3s0 down
ip link set enp4s0 down
4.3. Пример ручного создания active-backup
Создаём bond0 в режиме active-backup:
ip link add bond0 type bond mode active-backup miimon 100
Добавляем интерфейсы:
ip link set enp3s0 master bond0
ip link set enp4s0 master bond0
Поднимаем:
ip link set enp3s0 up
ip link set enp4s0 up
ip link set bond0 up
Назначаем IP:
ip addr add 192.168.10.10/24 dev bond0
Если нужен маршрут по умолчанию:
ip route replace default via 192.168.10.1 dev bond0
Проверка:
cat /proc/net/bonding/bond0
5. Постоянная настройка через ifupdown
Классический способ для серверных редакций Debian — файлы:
/etc/network/interfaces
/etc/network/interfaces.d/
5.1. Сделайте резервную копию
cp -a /etc/network/interfaces /root/interfaces.backup.$(date +%F)
Если используете каталог:
mkdir -p /root/network-backup
cp -a /etc/network/interfaces.d /root/network-backup/ 2>/dev/null || true
5.2. Проверьте подключение каталога
Файл /etc/network/interfaces обычно содержит строку:
source /etc/network/interfaces.d/*
Проверить:
grep -R "source /etc/network/interfaces.d" /etc/network/interfaces
Если строки нет, добавьте:
echo "source /etc/network/interfaces.d/*" >> /etc/network/interfaces
6. Пример: active-backup со статическим IP
Это самый простой отказоустойчивый режим. Один интерфейс активен, второй — резервный.
Создайте файл:
nano /etc/network/interfaces.d/bond0
Содержимое:
auto enp3s0
iface enp3s0 inet manual
auto enp4s0
iface enp4s0 inet manual
auto bond0
iface bond0 inet static
address 192.168.10.10/24
gateway 192.168.10.1
bond-mode active-backup
bond-miimon 100
bond-primary enp3s0
bond-slaves enp3s0 enp4s0
Пояснения:
auto enp3s0,auto enp4s0— поднимать интерфейсы при загрузке;inet manual— не назначать им IP напрямую;bond0— логический интерфейс;bond-mode active-backup— режим отказоустойчивости;bond-miimon 100— проверка состояния линка каждые 100 мс;bond-primary enp3s0— предпочтительный интерфейс;bond-slaves enp3s0 enp4s0— список физических интерфейсов.
Применение:
ifdown enp3s0 || true
ifdown enp4s0 || true
ifup bond0
Если вы работаете по SSH и эти интерфейсы являются вашим текущим каналом, лучше выполнять действия через консоль или использовать осторожный поэтапный план.
Проверка:
ip -br addr show bond0
cat /proc/net/bonding/bond0
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.