Резервирование сети (bonding, ifensklave)

Инструкция настройки Bonding

Объединение сетевых карт в Linux можно осуществить с помощью драйвера bonding, он предоставляет методы для агрегирования нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (отказоустойчивости) или в режиме балансировки нагрузки.

1 Сборка ядра Linux
Я собирал на облачной машине oracle ubuntu архитекруры aarch64

1.1 Подготовка сборочной машины
Для сборки ядра понадобится установить пакеты с необходимым для сборки ПО:
$sudo apt update && sudo apt install build-essential libncurses5-dev fakeroot lzop bc git
Если вы собираете ядро для Wiren Board 6 и новее, нужно установить компилятор для arm-linux-gnueabihf:
$sudo apt install gcc-arm-linux-gnueabihf

1.2 Получение исходного кода
Исходный код ядра Linux с правками от команды Wiren Board хранится в репозитории на Github. Чтобы получить его на свой компьютер, выполните команды:
$sudo git clone https://github.com/wirenboard/linux
$cd linux
$sudo git submodule update --init --recursive

1.3 Настройка ядра
Конфигурация по-умолчанюи при этом берётся из файлов в arch/arm/configs/, например imx6_wirenboard_defconfig.
Чтобы поменять конфигурацию, запустите make с необходимыми параметрами:
$sudo make KBUILD_OUTPUT=.build-wb6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

В секци «Devices Drivers»/«Network device support» выбрать «Bonding driver support» (В скобочкаж должна появиться буква [M]).
Сохраните файл настроек как .config, выйдите из меню конфигураций.

1.4 Сборка
$sudo make mrproper
$sudo KERNEL_FLAVOUR=wb6 ./scripts/package/wb/do_build_deb.sh
При сборке программа задаст вопрос:
#Use wirenboard7_defconfig instead? (y/N)
Ответье клавишей “N”, чтобы использовать новую конфигурацию, вместо конфигурации по-умолчанию.
После сборки в корне появятся файлы пакетов (пример для Wiren Board 6):

linux-image-wb6*.deb - образ ядра, модули и dtbs;
linux-headers-wb6*.deb - нужен для разработки
linux-libc-dev*.deb - нужен для разработки
На контроллер достаточно скопировать файл пакета linux-image-wb6, в нём уже содержится всё необходимое.

1.5 Скопируйте Linux-image*.deb на WB6
Любым способом скопируйте linux-image-wb6*.deb в /root и введите команды
$dpkg -i linux-image-wb6*.deb
$reboot
Установка нового ядра завершена.
Можно убедиться в наличии модуля командой
$ modinfo bonding
filename: /lib/modules/5.13.0-1036-oracle/kernel/drivers/net/bonding/bonding.ko
author: Thomas Davis, tadavis@lbl.gov and many others
description: Ethernet Channel Bonding Driver
license: GPL
alias: rtnl-link-bond
srcversion: 3295908B5F7C79DD4B98336
depends: tls
intree: Y
name: bonding
vermagic: 5.13.0-1036-oracle SMP mod_unload modversions aarch64
sig_id: PKCS#7
signer: Build time autogenerated kernel key
sig_key: 70:EB:8F:07:FC:E5:2E:6D:98:5E:C0:76:6A:5E:9E:ED:E5:E5:97:13
sig_hashalgo: sha512

2 Настройка Bonding на WB6
Чтобы использовать объединение каналов для повышения надежности сделайте следующее. Для настройки понадобится доступ в интернет.
2.1. Установите пакет ifenslave
$apt install ifenslave

2.2. Создайте файл /etc/modprobe.d/bonding.conf командой:
$nano /etc/modprobe.d/bonding.conf
Запишите следующее содержимое:
alias bond0 bonding
options bonding mode=0 miimon=100 downdelay=200 updelay=200
Сохраните файл клавишами Сtrl+X

2.3. Запустите драйвер командами:

$modprobe -v bonding mode=5 miimon=100 downdelay=200 updelay=200
$tail -f /var/log/messages
$ifconfig bond0

2.4. Откройте файл /etc/network/interfaces
$nano /etc/network/interfaces
Запишите следующее содержимое в место старых конфигураций eth0 и eth1:
auto bond0
iface bond0 inet static
address 192.168.0.18
netmask 255.255.255.0
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 200
slaves eth0 eth1
Сохраните файл.
2.5 перезапустите службу сети:
$/etc/init.d/networking restart

2.6 Чтобы проверить статус соединения, выполните команду:
$cat /proc/net/bonding/bond0
Готово!

1 Like