Совместное использование нескольких сетевых интерфейсов в Ubuntu, Debian.
«Склеивание» сетевых интерфейсов (NIC Teaming / Bonding) — не что иное, как слияние нескольких сетевых соединений в одно параллельное. Это позволяет увеличить пропускную способность канала и повысить отказоустойчивость сети в случае отказа одной из сетевых карт.
Ядро linux идет со встроенным драйвером для агрегирования нескольких сетевых интерфейсов в один, называемый bond0. В данном руководстве будет объяснено как настроить данный интерфейс под debian-based системой на конкретном примере.
В примере используется следующее оборудование:
- 2 x PCI-e Gig сетевые карты c поддержкой Jumbo-кадров
- RAID 6 w/ 5 enterprise grade 15k SAS жесткие диски
- Debian Linux 6.0.2 amd64
Также хочу заметить, что эта инструкция будет работать и на Ubuntu Server. Ниже команды даны, исходя из того, что вы открыли root консоль, используя su или sudo -i.
Рекомендуемое программное обеспечение.
Ifenslave используется для присоединения сетевых карт к bond-интерфейсу. Bond0 будет считаться в системе как обычный сетевой интерфейс, но будет посылать пакеты через присоединенные (slave) устройства, используя планировщик на алгоритме round-robin. Это позволит обеспечить простую и сбалансированную систему. Установим данное ПО с помощью команды:
apt-get install ifenslave*
Настройка Linux bounding драйвера.
Создадим файл /etc/modprobe.d/bonding.conf
nano /etc/modprobe.d/bonding.conf
Со следующим содержимым:
alias bond0 bonding
options bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12
Сохраним и закроем файл. В данном случае опции обозначают:
- mode=0 : Установить политики «склеивания» в значение balance-rr (round robin). Это значение по умолчанию.
- arp_interval=100 : Установить ARP link monitoring частоту в 100 миллисекунд. Без этой опции вы получите предупреждение, когда будете запускать bond0 через /etc/network/interfaces.
- arp_ip_target=192.168.1.254, 192.168.1.12 : 192.168.1.254 (router ip) и 192.168.1.2 IP адреса как ARP monitoring пиры, когда arp_interval > 0. Это используется для наблюдения за состоянием соединения. Для наблюдения за несколькими ip адресами разделяйте их знаком запятой. Как минимум 1 адрес должен быть указан для функций ARP monitoring. Максимально можно указать до 16 адресов.
Теперь загрузим драйвер, используя следующие команды:
modprobe -v bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12
Проверьте журнал и наличие в системе интерфейса bond0.
tail -f /var/log/messages
ifconfig bond0
Настройка сетевых интерфейсов на совместное использование.
Первым делом остановим eth0 и eth1 (не делайте так в ssh сессии):
/etc/init.d/networking stop
Отредактируем /etc/network/interfaces, сделав его резервную копию (на всякий случай):
cp /etc/network/interfaces /etc/network/interfaces.bak
nano /etc/network/interfaces
Удалив из содержимого eth0 и eth1 конфигурацию и приведя файл к следующему виду:
Сохраняем и выходим. В данном случае опции означают:
- address 192.168.1.10 : ip адрес для bond0.
- netmask 255.255.255.0 : маска сети для bond0.
- network 192.168.1.0 : сетевой адрес для bond0.
- gateway 192.168.1.254 : шлюз по умолчанию для bond0.
- slaves eth0 eth1 : настройка bond0 и привязка двух настоящих сетевых интерфейсов (eth0 and eth1) к нему.
- mtu 9000 : Установка MTU до размера 9000. Смотрите Настройка Linux JumboFrames configuration для подробной информации.
- bond-mode balance-rr : Установка профиля в значение «Load balancing and fault tolerance». Смотрите ниже для более подробной информации.
- bond-miimon 100 : Установка MII link частоты наблюдения в 100 миллисекунд. Это значение определяет как часто будет проверяться состояние соединения на каждом из интерфейсов.
- bond-downdelay 200 : Устанавливает время в 200 миллисекунд ожидания, прежде чем отключить slave в случае отказа соединения. Эта опция действует только на bond-miimon.
- bond-updelay 200 : Устанавливает время в 200 миллисекунд ожидания, прежде чем включить slave после восстановления соединения. Эта опция действует только на bond-miimon.
- dns-nameservers 192.168.1.254 : Устанавливает 192.168.1.254 как dns сервер.
- dns-search nixcraft.net.in : Устанавливает nixcraft.net.in как host-name lookup сервер по умолчанию (опционально).
Немного о других Bonding Policies.
Чуть выше мы установили bounding policy (mode) в значение 0, что означает balance-rr. Другие значения могут быть:
- active-backup или 1: Только один slave активен в единицу времени. Второй slave активируется после аварии с первым slave. Данный режим обеспечивает только отказоустойчивость.
- balance-xor или 2: Применяется хеш политика в виде MAC-источника XOR MAC-получателя. Данный режим обеспечивает отказоустойчивость и балансировку нагрузки.
- broadcast или 3: Передача идёт через все slave. Данный режим обеспечивает только отказоустойчивость.
- 802.3ad или 4: Должен применятся только если коммутатор поддерживает IEEE 802.3ad Dynamic link aggregation.
- balance-tlb или 5: Не требуется поддержка со стороны коммутатора. Исходящий трафик распределяется в зависимости от текущей нагрузки каждого slave. Входящий трафик поступает на текущий slave и если он отказывает, то другой slave берёт работу на себя.
- balance-alb или 6: alb — Adaptive load balancing. Работает как balance-tlb + балансировка нагрузки rlb для IPv4.
Запуск bond0 интерфейса.
После внесения всех изменений в конфигурационные файлы необходимо запустить или перезапустить сервисы сети:
/etc/init.d/networking restart
или перезагрузка хоста.
Проверка работы.
Вводим в терминал следующую команду:
ifconfig
Вывод будет примерно следующим:
Используем cat, чтобы посмотреть текущее состояние bond драйвера и сетевых соединений:
В случае успеха вывод будет примерно следующим:
Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.
Одновременная работа двух сетевых карт
Всем привет. Дебиан 9. Две сетевые карты
привязываю к ним интерфейсы eth0 и eth1
если в /etc/network/interfaces прописать сразу оба интерфейса, то активен и пингуется только eth0
если прописывать по отдельности, то работает и eth0 и eth1 соответственно.
auto eth0 iface eth0 inet static address 192.168.0.121 gateway 192.168.0.228 netmask 255.255.252.0
auto eth1 iface eth0 inet static address 192.168.0.122 netmask 255.255.252.0
Подозреваю, что дело в шлюзе, так? Вроде бы шлюз прописывается только для первого интерфейса, а для второго надо прописывать маршрут. Но никак не могу разобраться, как правильно. Подскажите, пожалуйста, что сделать, чтобы заработало )
Зачем две сетевые карты? Тем более в одной подсети IPv4? Если нужна избыточность, то нужна агрегация LACP, если нужно два айпишника, то можно привязать к одной сетевухе, алиасингом или еще чем-то.
Опечатка же во втором конфиге?
auto eth1 iface eth0 inet static address 192.168.0.122 netmask 255.255.252.0
Русские форумы такие форумы?
Только тут тебе расскажут, почему ты -мудак- не прав?
Раскажи чего ты хочешь этим добиться?
Чтобы понять почему идея гавно, надо чутка почитать как именно линукс роутит пакеты, в реальном мире, для каждого сконфигурированного интерфейса создаётся маршрут x.x.x.x/netmask означающий, что на адреса в этой подсети слать пакеты напрямую получателям, в твоём примере создастся: 192.168.0.0/22 dev eth0 proto kernel scope link src 192.168.0.121
Это значит, что всё исходящее в 192.168.0.0/22 должно уходить с eth0, а всё приходящее на eth0 из 192.168.0.0/22 адресовано нам. Когда ты создаешь второй интерфейс с адресом в той же сети, ещё один маршрут для подсети 192.168.0.0/22 создасться не может, т.к. её уже обслуживает eth0. Все входящие пакеты на 192.168.0.122 будут приходить на eth1, а в соотвествии с таблицей маршрутизации за 192.168.0.0/22 ответственный eth0, такие пакеты по дефолту считаются не парвильными и называются «марсианскими» (martian), если проверишь dmesg то наверняка увидишь там такие записи. Кароче в реальном мире твоя схема кривая и работать не должно, но обойти эти ограничения можно, но это ппц костыли и я бы за такое ими тебя и ***покарал***, например ты можешь включить Promiscuous режим на eth1, тогда ядро будет пропускать марсианские пакеты и твоё поделие начнёт подавать признаки жизни, но исходящий трафик всё равно будет ходить через eth0 по умолчанию.
Re: Русские форумы такие форумы?
На украинских форумах такая же история, на англоязычных ресурсах также песня.
но исходящий трафик всё равно будет ходить через eth0 по умолчанию
А что мешает сделать «ip ro add 192.168.0.32/28 dev eth1 scope link src 192.168.0.122» ? Пусть к .32-.47 ходят через eth1 !
PS любимые грабли нужно знать по именам: rp_filter, arp_accept, arp_announce, arp_filter, arp_ignore
Чёта не понял про грабли))) Я бы в ситуации ТС создал ещё одну таблицу маршрутизации в /etc/iproute2/rt_tables и загнал туда eth1 правилом. Хотя всё равно решение плохое и так делать не надо
Я бы в ситуации ТС создал ещё одну таблицу маршрутизации
Он пока с одной не разобрался.
В такой ситуации ТС может просто реализовать только статическую схему, в которой часть хостов в сети будет адресоваться через eth0, а часть через eth1, просто добавив маршруты. Например, dgw через eth1, а все остальное через eth0, или половину сети через один интерфейс, а остальных через другой.
Но ему нужно пройти грабли которые специально разложены на пути для тех, кто начинает использовать несколько самостоятельных интерфейсов в одной подсети. Это не запрещено, но ты должен доказать системе, что ты понимаешь на что подписался. Это как раз и нужно выразить через sysctl net.ipv4.conf.
Re: Русские форумы такие форумы?
А белорусы с казахами чё ?
Re: Русские форумы такие форумы?
- мудаком его никто не называл
- неправым тоже
- но, о ужас! презренные хелперы-помогаторы дерзнули объяснять, как может (должно) сделать и стали требовать дополнительных пояснений (ну, тупые, ага)
- да — «Русские форумы такие форумы» ©