- Совместное использование нескольких сетевых интерфейсов в Ubuntu, Debian.
- Рекомендуемое программное обеспечение.
- Настройка Linux bounding драйвера.
- Настройка сетевых интерфейсов на совместное использование.
- Немного о других Bonding Policies.
- Запуск bond0 интерфейса.
- Проверка работы.
- Объединение сетевых интерфейсов в Linux. Настройка bonding
- Агрегация сетевых интерфейсов в Ubuntu и Debian
- Режимы работы
- Объединение сетевых интерфейсов в CentOS, RHEL и Fedora
- Заключение
- Настройка сети в Linux с помощью netplan
- Конфигурационный файл
- Простая настройка сети
- Применение настроек
- Статический маршрут
- Объединение интерфейсов (bonds)
- Сетевой мост (bridge)
- Отключение netplan и возврат к interfaces
- Возможные ошибки
- 1. Error in network definition *.yaml line xxx column yyy: expected mapping
Совместное использование нескольких сетевых интерфейсов в 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 разрешает печатать данный текст.
Источник
Объединение сетевых интерфейсов в Linux. Настройка bonding
Объединение сетевых интерфейсов(Bonding) – это механизм, используемый Linux-серверами и предполагающий связь нескольких физических интерфейсов в один виртуальный, что позволяет обеспечить большую пропускную способность или отказоустойчивость в случае повреждения кабеля. В данном руководстве мы разберем реализацию объединения интерфейсов в Linux для Ubuntu/Debian и CentOS/RHEL/Fedora.
Агрегация сетевых интерфейсов в Ubuntu и Debian
Важно! Если у вас используется Ubuntu версии 17.10 и выше, то необходимо установить пакет ifupdown или настраивать агрегацию каналов нужно через netplan
Прежде всего нужно установить модуль ядра для поддержки объединения и при помощи команды modprobe проверить, загружен ли драйвер.
В более старых версиях Debian или Ubuntu может потребоваться установка пакета ifenslave:
Для создания связанного интерфейса из двух физических сетевых карт вашей системы выполните следующую команду. К сожалению, при использовании такого метода объединение интерфейсов не сохраняется после перезагрузки системы:
Для создания постоянного связанного интерфейса типа mode 0 (ниже мы разберем эти типы более подробно), нужно отредактировать файлы конфигурации сетевых интерфейсов. Откройте с помощью любого текстового редактора, например nano, файл /etc/network/interfaces , как показано в следующем фрагменте (замените IP-адрес, маску подсети, шлюз и DNS-серверы на используемые в вашей сети).
Чтобы активировать объединенный интерфейс, перезапустите сетевую службу, отключите физические интерфейсы и включите объединенный интерфейс, либо перезагрузите машину, чтобы ядро определило новый объединенный интерфейс.
Настройки связанного интерфейса можно проверить при помощи следующих команд:
Подробную информацию об объединенном интерфейсе можно получить, просмотрев содержимое следующего файла ядра командой cat:
Для отладки ошибок можно использовать команду tail
Проверку параметров сетевой карты можно выполнить при помощи инструмента mii-tool:
Режимы работы
mode=0 (balance-rr)
При этом методе объединения трафик распределяется по принципу «карусели»: пакеты по очереди направляются на сетевые карты объединённого интерфейса. Например, если у нас есть физические интерфейсы eth0, eth1, and eth2, объединенные в bond0, первый пакет будет отправляться через eth0, второй — через eth1, третий — через eth2, а четвертый снова через eth0 и т.д.
mode=1 (active-backup)
Когда используется этот метод, активен только один физический интерфейс, а остальные работают как резервные на случай отказа основного.
mode=2 (balance-xor)
В данном случае объединенный интерфейс определяет, через какую физическую сетевую карту отправить пакеты, в зависимости от MAC-адресов источника и получателя.
mode=3 (broadcast) Широковещательный режим, все пакеты отправляются через каждый интерфейс. Имеет ограниченное применение, но обеспечивает значительную отказоустойчивость.
mode=4 (802.3ad)
Особый режим объединения. Для него требуется специально настраивать коммутатор, к которому подключен объединенный интерфейс. Реализует стандарты объединения каналов IEEE и обеспечивает как увеличение пропускной способности, так и отказоустойчивость.
mode=5 (balance-tlb)
Распределение нагрузки при передаче. Входящий трафик обрабатывается в обычном режиме, а при передаче интерфейс определяется на основе данных о загруженности.
mode=6 (balance-alb)
Адаптивное распределение нагрузки. Аналогично предыдущему режиму, но с возможностью балансировать также входящую нагрузку.
Объединение сетевых интерфейсов в CentOS, RHEL и Fedora
Создайте новый файл bonding.conf в директории /etc/modprobe.d/ . Имя может быть любым, но расширение должно быть .conf. Вставьте в этот файл следующую строку:
Такая строка в файле /etc/modprobe.d/bonding.conf требуется для каждого bond интерфейса.
Для агрегации интерфейсов создайте в директории /etc/sysconfig/network-scripts/ файл конфигурации с именем ifcfg-bond0. Вот пример содержимого файла конфигурации (IP-адреса в вашей системе могут отличаться):
После создания объединённого интерфейса нужно настроить его и связанные с ним сетевые карты, добавив в файлы конфигурации директивы MASTER и SLAVE. Для всех связанных интерфейсов эти файлы могут быть почти одинаковыми. Например, у двух интерфейсов eth0 и eth1, связанных в один, они могут иметь следующий вид. Отредактируйте их, как показано ниже.
Для eth0
Значение этих директив следующее:
DEVICE: определяет имя устройства
USERCTL: определяет, может ли пользователь управлять интерфейсом (в данном случае нет)
ONBOOT: определяет, включать ли интерфейс при загрузке
MASTER: есть ли у этого устройства ведущий интерфейс (здесь это bond0)
SLAVE: работает ли это устройство каки ведомое
BOOTPROTO: Определяет получение IP-адреса по DHCP. При статическом IP-адресе устанавливается значение none
Перезагрузите сетевую службу и проверьте конфигурацию командой ifconfig.
Заключение
Объединение сетевых интерфейсов — удобный и функциональный механизм для обеспечения качественной и бесперебойной работы вашей сети. Надеемся, данное руководство было полезным. Более подробную информацию об используемых командах можно получить в соответствующих man-страницах.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Настройка сети в Linux с помощью netplan
Начиная с Ubuntu 18.04 конфигурирование сети выполняется с помощью утилиты netplan. В других системах на базе deb, например, Debian, она может быть установлена командой:
apt-get install netplan
В данной статье рассмотрим принцип и примеры настройки сети с помощью netplan.
Конфигурационный файл
Файл для настройки сети находится в каталоге /etc/netplan/. Имя файла может быть любым, на конце должно быть расширение yaml, например:
* чаще всего, это файл 50-cloud-init.yaml или 01-netcfg.yaml.
YAML представляет из себя текстовый формат файла. Вложенные параметры должны иметь отступы табуляциями или пробелами, количество которых имеет важное значение (если поставить лишний пробел у одного из нескольких параметров, мы получим сообщение об ошибке «expected mapping»).
Простая настройка сети
Разберем пример настройки 3-х сетевых интерфейсов. Два из них будут с IP-адресами назначенными вручную (static IP), один — по DHCP.
Приводим файл к следующему виду:
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: true
ens7:
dhcp4: no
addresses: [192.168.122.195/24]
gateway4: 192.168.122.1
mtu: 1500
nameservers:
addresses: [8.8.8.8, 77.88.8.8]
search: [ dmosk.local ]
ens9:
dhcp4: no
addresses: [192.168.1.10/24, 192.168.1.20/24]
nameservers:
addresses:
— 8.8.8.8
— 77.88.8.8
search: [ dmosk.local, dmosk.ru ]
- version — версия YAML. На момент обновления статьи, была 2.
- renderer — менеджер сети (networkd или NetworkManager).
- ethernets — настройка сетевых адаптеров ethernet.
- ens3, ens7, ens9 — настройки для соответствующих сетевых адаптеров. В данном примере мы настраиваем 3 сетевых адаптера.
- dhcp4 — будет ли получать сетевой адаптер IP-адрес автоматически. Возможны варианты yes/true — получать адрес автоматически; no/false — адрес должен быть назначен вручную.
- addresses — задает IP-адреса через запятую.
- gateway4 — шлюз по умолчанию. В данном примере указывается только для интерфейса ens7.
- mtu — при желании, можно задать значение MTU.
- nameservers — настройка серверов имен (DNS).
- nameservers addresses — указываем серверы DNS. Обратите внимание на разный формат записи для ens7 и ens9. Приемлемы оба варианта.
- nameservers search — дописывает окончание домена, если мы обращаемся к узлу сети только по его имени. Стоит обратить внимание, что мы можем указать несколько доменов через запятую.
Применение настроек
Для применения настроек необходимо запустить команду netplan. Ее синтаксис:
Для проверки нашего конфигурационного файла вводим:
netplan —debug generate
Для применения настроек вводим:
* данную команду мы вводим также для перечитывания настроек и перезапуска сети (вместо привычных restart и reload).
Статический маршрут
Статический маршрут задается для конкретного интерфейса, также в конфигурационном файле netplan, например:
network:
version: 2
renderer: networkd
ethernets:
ens9:
dhcp4: no
addresses: 192.168.1.10/24
nameservers:
addresses:
— 8.8.8.8
— 77.88.8.8
routes:
— to: 192.168.0.0/24
via: 192.168.1.1
on-link: true
* в данном примере мы настроили маршрут для сетевого интерфейса ens9. Данная настройка задается параметром routes:
- to — направление маршрута (в какую сеть мы должны попадать). В данном примере, 192.168.0.0/24.
- via — через какой шлюз мы попадаем в сеть to.
- on-link — активация маршрута при поднятии линка на сетевом интерфейсе.
Объединение интерфейсов (bonds)
С помощью bonds мы можем объединить интерфейсы с целью обеспечения отказоустойчивости и/или повышения пропускной способности.
network:
version: 2
renderer: networkd
ethernets:
ens2f0: <>
ens2f1: <>
bonds:
bond0:
dhcp4: no
interfaces:
— ens2f0
— ens2f1
parameters:
mode: active-backup
addresses:
— 192.168.122.195/24
gateway4: 192.168.122.1
mtu: 1500
nameservers:
addresses:
— 8.8.8.8
— 77.88.8.8
* в данном примере мы объединяем физические интерфейсы ens2f0 и ens2f1; настройка parameters mode указываем на тип объединения — доступны варианты:
- balance-rr (задействуются оба интерфейса по очереди, распределение пакетов по принципу Round Robin).
- active-backup (используется только один интерфейс, второй активируется в случае неработоспособности первого).
- balance-xor (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy).
- broadcast (задействуются оба интерфейса одновременно, пакеты передаются все интерфейсы).
- 802.3ad (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy)
- balance-tlb (задействуются оба интерфейса по очереди, пакеты распределяются в соответствии с текущей нагрузкой)
Сетевой мост (bridge)
Сетевой мост позволяет пропускать сетевой трафик через другой сетевой адаптер. Это можно применить, например, для организации хоста виртуальных машин (для трансфера трафика к виртуальным машинам KVM через единственный сетевой интерфейс сервера).
network:
version: 2
renderer: networkd
ethernets:
ens2f0: <>
bridges:
br0:
macaddress: ce:ce:ce:45:45:45
interfaces:
— ens2f0
addresses:
— 192.168.1.15/24
gateway4:
nameservers:
addresses:
— 77.88.8.8
— 8.8.8.8
mtu: 1500
parameters:
stp: true
forward-delay: 4
dhcp4: false
dhcp6: false
- bridges — настройки для интерфейсов bridge.
- bridges br0 — настройка интерфейса br0.
- macaddress — физический адрес (MAC) интерфейса. Настройка важна для некоторых провайдеров VPS — без нее бридж может не заработать.
- interfaces — перечисление интерфейсов, из которых собираем мост. В данном примере ens2f0.
- addresses, gateway4, nameservers — сетевые настройки (IP-адрес, шлюз, сервер имен).
- mtu — одноименный параметр. Для сетей ethernet обычно равен 1500.
- parameters stp — включает или отключает устранение петель в сети. В данном примере включено.
- parameters forward-delay — время в секундах в течение которого мост будет оставаться в состояниях «Listening» и «Learning».
- dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса. В нашем случае, отключает.
Подробнее про настройку сетвого моста для KVM в инструкции Настройка KVM на Ubuntu Server.
Также мы можем настроить тегированный интерфейс vlan:
network:
version: 2
renderer: networkd
ethernets:
ens3: <>
vlans:
vlan5:
id: 5
link: ens3
dhcp4: no
addresses: [10.0.0.15/24]
gateway: 10.0.0.1
* в данном примере мы настроили интерфейс с тегом 5 на физическом адаптере ens3.
Для подключения к беспроводной сети задаем следующие настройки:
network:
version: 2
renderer: networkd
wifis:
wlp2s0b1:
dhcp4: no
dhcp6: no
addresses: [192.168.2.10/24]
gateway4: 192.168.2.1
nameservers:
addresses: [192.168.2.1, 77.88.8.8]
access-points:
:
password: wifi_password
- wifis — определяет настойки для WiFi.
- wlp2s0b1 — настройка для беспроводного сетевого адаптера.
- dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса.
- addresses, gateway4, nameservers — настройка сети (IP-адрес, шлюз, сервер DNS).
- access-points — настройка для подключения к беспроводной сети.
- — имя беспроводной сети, к которой будем подключаться.
- password — пароль для подключения к беспроводной сети.
Отключение netplan и возврат к interfaces
При желании, мы можем вернуть привычный принцип настройки сети. Для этого выполним несколько шагов.
1. Открываем настройку grub:
2. Находим опцию GRUB_CMDLINE_LINUX и дописываем в нее параметр:
* если GRUB_CMDLINE_LINUX содержит другие настройки, то наш параметр добавляем через пробел.
3. Устанавливаем пакет ifupdown:
apt-get install ifupdown
4. Настраиваем сеть в файле:
auto lo
iface lo inet loopback
auto ens5
iface ens5 inet dhcp
* в данном примере мы настраиваем сетевой интерфейс ens5 на автоматическое получение IP-адреса.
5. Применяем настройки загрузчика:
И перезагружаем систему:
Возможные ошибки
1. Error in network definition *.yaml line xxx column yyy: expected mapping
Ошибка появляется при проверке (generate) или применении (apply) настроек сети.
Причина: ошибка синтаксиса YAML.
Решение: внимательно смотрим на количество отступов, которое сделано для строки xxx. Количество пробелов должно точно соответствовать количеству в других строках. Если параметр вложенный, он также должен отделяться от родителя нужным количеством пробелов. Пример неправильной настройки:
network:
version: 2
renderer: networkd
* обратите внимание, что version имеет 4 пробела для отступа, а renderer — 2. Так как version и renderer равнозначные параметры для родителя network, они должны иметь одинаковое количество пробелов.
Источник