Вопрос или проблема
Я недавно установил Ubuntu 20.04 на виртуальную машину с двумя ethernet-портами. Я пытаюсь объединить эти два ethernet-порта, но не могу найти правильный способ. Например, кто-то говорит без netplan, другие с netplan, объединение с мостом и т.д.
Я новичок в этом, есть ли способ сделать простое объединение?
Обновление: Я дошел до этого:
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: false
eth2:
dhcp4: false
bonds:
bond0:
dhcp4: false
interfaces:
- eth1
- eth2
parameters:
mode: balance-rr
mii-monitor-interval: 100
bridges:
br0:
dhcp4: true
interfaces:
- bond0
И я не могу получить IP для br0
. То же самое происходит, если я использую только bond0
без br0
.
Спасибо
Как на вашем скриншоте, у вас три Ethernet: eth0, eth1, eth2
. У eth0
есть IP, значит, у вас есть какой-то конфиг для этого (например, через ifupdown
с конфигом /etc/network/interfaces
).
Надеюсь, eth1, eth2
не подключены к одному и тому же коммутатору и сети, для работы это требует дополнительных настроек.
Вы должны проверить, что никакие другие инструменты, такие как ifupdown
, не используются для поднятия eth1, eth2
и bond0
, br0
.
Не используйте эти инструменты с netplan.
Отключите интерфейсы eth1, eth2
– удалите строки с auto
для eth1, eth2
, добавьте только одну строку: iface eth1 inet manual
для каждого.
Или переименуйте или удалите файл /etc/network/interfaces
.
Если вы переименуете или удалите /etc/network/interfaces
, вы должны добавить конфигурацию eth0
в netplan.
Например, в моей конфигурации у меня есть Ethernet em1, em2
. bond0
объединяет их, и br0
поверх bond0
. br0
получает IP через DHCP. br0
необходим для доступа к сети с виртуальных машин на этом сервере.
Моя конфигурация:
network:
version: 2
renderer: networkd
ethernets:
em1:
dhcp4: no
dhcp6: no
em2:
dhcp4: no
dhcp6: no
bonds:
bond0:
dhcp4: no
dhcp6: no
interfaces:
- em1
- em2
macaddress: "xx:xx:xx:xx:2b:62"
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
transmit-hash-policy: layer2+3
bridges:
br0:
dhcp4: yes
dhcp6: yes
macaddress: "xx:xx:xx:xx:2b:62"
interfaces:
- bond0
Вы можете удалить часть с bridges
и установить dhcp4: yes, dhcp6: yes
для bond0
. Это также должно работать, и bond0
должен получить IP от DHCP.
Также я сделал рабочую конфигурацию для ifupdown2
(возможно, потому что старый ifupdown
не может обрабатывать зависимости интерфейсов, а ifupdown2
может).
Основываясь на вашей и моей собственной конфигурации, я бы предположил, что что-то подобное может работать:
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: false
eth2:
dhcp4: false
bonds:
bond0:
dhcp4: false
interfaces:
- eth1
- eth2
parameters:
mode: balance-rr
mii-monitor-interval: 100
bridges:
br0:
dhcp4: true
gateway4: your.gate.way.addr
interfaces:
- bond0
Ответ или решение
Настройка сетевого интерфейса с использованием технологии агрегирования каналов (bonding) и мостов (bridges) в Ubuntu 20.04 может показаться сложной задачей, особенно для новичков. Основная цель агрегирования состоит в объединении нескольких физических сетевых интерфейсов в один логический интерфейс для повышения пропускной способности и отказоустойчивости. Рассмотрим подробнее, как правильно настроить bonding и bridge в Ubuntu 20.04, чтобы избежать распространенных проблем.
Теория
Агрегация каналов (Bonding)
Bonding позволяет объединить несколько сетевых интерфейсов в один виртуальный интерфейс. Это повышает общую доступную полосу пропускания и обеспечивает отказоустойчивость, что особенно важно в виртуализированных средах, где недоступность сети может привести к потере связи с виртуальными машинами или сервисами.
Основные режимы агрегации:
- balance-rr (Round-Robin): Распределяет пакеты данных по всем интерфейсам равномерно, что повышает производительность.
- active-backup: Один интерфейс активен, другой служит резервом.
- 802.3ad (LACP): Использует протокол агрегации каналов для динамического управления линками. Требует поддержки соответствующей функции на коммутаторе.
Мосты (Bridges)
Мост позволяет объединить несколько сетевых интерфейсов на канальном уровне, предоставляя приложениям интерфейс, который выглядит как один физический интерфейс. Часто используются для виртуальных машин, чтобы соединять их с внешней сетью через один интерфейс.
Пример
Исходя из представленного YAML-конфига, вы настроили две сетевые карты (eth1 и eth2) и объединили их в один логический интерфейс bond0. Затем этот интерфейс подключен к мостовому интерфейсу br0, который должен получить IP-адрес через DHCP.
Вот ваш основной конфиг, скорректированный для устранения возможных проблем:
network:
version: 2
renderer: networkd
ethernets:
eth1:
dhcp4: false
eth2:
dhcp4: false
bonds:
bond0:
dhcp4: false
interfaces:
- eth1
- eth2
parameters:
mode: 802.3ad
mii-monitor-interval: 100
bridges:
br0:
dhcp4: true
interfaces:
- bond0
В этой конфигурации:
- Каждый из физических интерфейсов (eth1 и eth2) отключен от получения IP-адресов через DHCP.
- Используется режим агрегации 802.3ad, который требует корректной настройки на коммутаторе.
- Мост br0 связывает агрегированный интерфейс bond0, предоставляя возможность получать IP-адрес через DHCP.
Применение
Шаги для настройки
-
Проверьте конфигурационные файлы: Убедитесь, что нет конфликтов с другими системами управления сетью, такими как ifupdown. Избавьтесь от файла
/etc/network/interfaces
или переместите его в другую директорию. -
Обновите netplan: После внесения изменений в файл конфигурации
/etc/netplan/01-netcfg.yaml
, примените их с помощью команды:sudo netplan apply
-
Проверка статуса: Убедитесь, что интерфейсы поднимаются корректно, используя:
ip a
-
Проверьте настройки коммутатора: Убедитесь, что ваш коммутатор поддерживает выбранный режим агрегации (например, LACP) и настроен соответствующим образом.
Основные советы
- Изучение документации: Ознакомьтесь с официальной документацией Ubuntu и netplan. Часто там можно найти много примеров и случаев использования.
- Логирование и диагностика: Используйте системные логи, чтобы выявлять и исправлять ошибки. Команда
journalctl -u systemd-networkd
может быть полезной. - Постепенное развертывание: Чтобы минимизировать риски, начните с тестовой среды перед применением изменений в продуктивной.
Таким образом, следуя изложенной методике и рекомендациям, вы сможете успешно настроить bonding и bridge в Ubuntu 20.04, обеспечивая необходимую производительность и надежность вашей сетевой инфраструктуры.