Агрегирование каналов на Linux или же bonding – это процесс объединения нескольких сетевых каналов для повышения пропускной способности и надежности соединения в операционной системе Linux. В данном контексте агрегирование каналов позволяет эффективно использовать доступные сетевые ресурсы, увеличивая скорость передачи данных и обеспечивая отказоустойчивость путем распределения трафика между несколькими соединениями.
Этот процесс может быть осуществлен с использованием различных технологий и протоколов, таких как Link Aggregation (IEEE 802.3ad), Bonding (Linux bonding driver) и другие.
Подготовим сервер
Представьте, что вашим прокси-сервером или маршрутизатором является Linux и вам необходимо повысить скорость передачи данных по каналу связи, но физические возможности не позволяют выбрать оптоволокно или иные варианты связи. В данном случае мы можем воспользоваться агрегированием каналов связи! Создав единый логический интерфейс и настроив его, мы сможем принимать соединение с двух физических каналов, тем самым повысив производительность и отказоустойчивость сети.
Для этого создадим VPS сервер в Serverspace. Перейдем на вкладку левого меню к серверам, предварительно выбрав облачную платформу и нажмем на кнопку Создать сервер.
В его настройках добавим два сетевых интерфейса, которые в дальнейшем объединим и настроим на совместное использование!
Подготовка к агрегированию каналов
Перейдем к серверу, предварительно подключившись по инструкции, которая описана рядом с панелью управления. Если вы используете собственную виртуальную машину, то пропустите следующую команду. Интерфейсы автоматически конфигурируются, благодаря скриптам, для того чтобы использовать их в ручном режиме перейдем файл облачной настройки. И пропишем отключение сетевой синхронизации конфигурации:
Перезагрузим сетевые службы для, того чтобы настройки применились:
Проверим сетевые настройки и далее отключим сетевые адаптеры, которые необходимы в агрегировании:
В моем случае это интерфейсы enp0s5 и enp0s6, которые необходимо отключить соответствующей командой:
Не забудем установить соответствующее ПО для агрегации каналов:
Так же вы можете указать конкретную версию, при установке пакета, если он совместим с вашей системой. В данном случаем последняя версия пакета устанавливает модуль позволяющий управлять сетевым подключением и в том числе агрегировать каналы связи!
Настройка агрегации через утилиту
В Linux есть два варианта применения настроек к машине: через утилиты, настройки которых обычно действуют до перезагрузки и через конфигурационные файлы. Вторые уже считываются каждый раз, при запуске машины. Однако никто не запрещает использовать утилиту для создания агрегированного канала, через скрипты автозагрузки!
Для настройки первого случая, создадим bond0 интерфейс командой:
Для того, чтобы назначить интерфейсы в агрегацию каналов необходимо включить новый виртуальный интерфейс и прописать для него, предварительно отключенные интерфейсы для агрегации:
В зависимости от того какие интерфейсы вы агрегировали, теперь необходимо выбрать IP-адрес для того, чтобы узлы могли к вам обращаться. Если вы добавили сетевой кабель или же виртуальный интерфейс к одной подсети, то укажите тот же IP-адрес! Если вы объединяете два интерфейса из двух разных подсетей, то обратите внимание, что теперь у вас будет один адрес на две сети и скорее всего смысл сегментации пропадет, необходимо использовать иную конфигурацию c HSRP или иными протоколами связи. Добавим адрес к интерфейсу;
И сразу просмотрим результат конфигурации:
На скриншоте мы можем увидеть состояние двух агрегированных интерфейсов, как SLAVE, то есть в подчинении интерфейса bond0. У которого указан параметр master, позволяющий синхронизовано управлять каналами. Однако эти настройки будут действовать только до перезагрузки, рассмотрим вариант постоянной конфигурации.
Настройка агрегации через конфиг
Изначально перейдем в файл конфигурации и посмотрим настройки до изменений. В каждой ОС пути к конфигурации и его вид могу быть разными, учитывайте это при настройке. Для пользователей Serverspace необходимо перейти по пути и открыть файл:
Для остальных пользователей ОС Debian, можно так же перейти в общий файл с настройками:
И вставить следующую конфигурацию:
iface bond0 inet static
address 10.0.3.1/24
slaves enp0s6 enp0s7
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 100
Необходимо обязательно заменить поля address, slaves, в которых вы указываете сетевые интерфейсы для агрегации и новый IP для виртуального интерфейса. Каждое из остальных полей так же имеет свое обозначение:
- auto bond0 – строка предназначена для поднятия интерфейса, при запуске системы;
- iface bond0 inet static – для интерфейса bond0 выбираем статические настройки;
- bond-mode – данный параметр определяет логику работы виртуального интерфейса и может определять вид балансировки траффика, обнаружение и управление состоянием соединения, отказоустойчивости;
- bond-miimon – определяет интервал мониторинга состояния подчиненных интерфейсов;
- bond-downdelay – определяет пороговое значение задержки ответа перед тем, как считать интерфейс недоступным;
- bond-updelay – определяет пороговое значение задержки поднятия интерфейса.
Теперь необходимо перезагрузить сетевую службу для применения настроек из файла, предварительно сохранив комбинацией Ctrl + O:
После завершения настройки, необходимо перезагрузить сетевую службу для применения изменений. Теперь каналы связи будут агрегированы и работать согласно заданным параметрам.
Агрегирование каналов в Linux является мощным инструментом для повышения производительности и надежности сети, и правильная настройка позволяет эффективно использовать доступные ресурсы.