Ubuntu настройка моста между сетями

Обновлено: 06.07.2024

Начиная с Ubuntu 18.04 конфигурирование сети выполняется с помощью утилиты netplan. В других системах на базе deb, например, Debian, она может быть установлена командой:

apt-get install netplan

В данной статье рассмотрим принцип и примеры настройки сети с помощью netplan.

Конфигурационный файл

Файл для настройки сети находится в каталоге /etc/netplan/. Имя файла может быть любым, на конце должно быть расширение yaml, например:

* чаще всего, это файл 50-cloud-init.yaml или 01-netcfg.yaml.

Простая настройка сети

Разберем пример настройки 3-х сетевых интерфейсов. Два из них будут с IP-адресами назначенными вручную (static IP), один — по DHCP.

Приводим файл к следующему виду:

  • 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 <опции> <команда>

Для проверки нашего конфигурационного файла вводим:

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:
<имя WiFi сети (SSID)>:
password: wifi_password

  • wifis — определяет настойки для WiFi.
  • wlp2s0b1 — настройка для беспроводного сетевого адаптера.
  • dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса.
  • addresses, gateway4, nameservers — настройка сети (IP-адрес, шлюз, сервер DNS).
  • access-points — настройка для подключения к беспроводной сети.
  • <имя WiFi сети (SSID)> — имя беспроводной сети, к которой будем подключаться.
  • 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, они должны иметь одинаковое количество пробелов.

Вывод: использование протокола STP – это использование для нахождения кратчайшего пути между двумя ethernet-сетями и для удаления колец из топологий сетей ethernet

Данная заметка покажет, как использовать bridge в системе Ubuntu 12.04.5 Server:

$ sudo apt-get update && sudo apt-get upgrade -y

Выводим какие сетевые карты сейчас определены системой и их MAC-адреса:

$ ifconfig -a | grep -r 'eth1'

eth0 Link encap:Ethernet HWaddr 08:00:27:7a:16:e5

eth1 Link encap:Ethernet HWaddr 08:00:27:ce:63:2c

Далее устанавливаем в систему пакет ответственный за использование bridge:

$ sudo apt-get install bridge-utils -y

После создаем bridge воспользовавшись командой brctl с аргументом addbr:

$ sudo brctl addbr br0

С целью предотвращения появления в сети “петель” включаю протокол связующего дерева STP:

$ sudo brctl stp br0 on

Чтобы определить мост для текущий сетевых интерфейсов в системе их нужно освободить от выданных адресов и выключить на время добавления в мост (данные действия нужно проводить подключившись к системе локально либо с использование средств удаленного администрирования (iLo,ipmi,KVM), либо в системе имеется еще одна сетевая карта)

$ sudo ifconfig eth0 0.0.0.0 down

$ sudo ifconfig eth1 0.0.0.0 down

Теперь создаем мост для выключенных сетевых интерейсов , после чего он заработает полностью через совсем малый промежуток времени, в течение которого будет происходит изучение трафика проходящего через него)

$ sudo brctl addif br0 eth0

$ sudo brctl addif br0 eth1

Вот теперь уже можно включить сетевые интерфейсы (eth0 & eth1) и конечно же наш мост (br0)

$ sudo ifconfig eth0 up

$ sudo ifconfig eth1 up

$ sudo ifconfig br0 up

В моем случаем после включения моста ему не присвоился сетевой адрес от DHCP сервера автоматически, потребовалось вручную запросить:

$ sudo dhclient br0

br0 Link encap:Ethernet HWaddr 08:00:27:7a:16:e5

inet addr:10.7.8.154 Bcast:10.7.8.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1266 errors:0 dropped:6 overruns:0 frame:0

TX packets:31 errors:0 dropped:0 overruns:0 carrier:0

RX bytes:89888 (89.8 KB) TX bytes:4910 (4.9 KB)

Дальнейшие действия настройки к примеру статики и динамики также сводятся к правке конфигурационного файла : ekzorchik@srv-mon:

$ sudo nano /etc/network/interfaces

iface eth0 inet static

iface eth1 inet static

iface br0 inet static

bridge_ports eth0 eth1

iface eth0 inet dhcp

iface eth1 inet dhcp

iface br0 inet dhcp

bridge_ports eth0 eth1

После изменения настроек перезапускаем сетевую часть:

$ sudo /etc/init.d/networking restart

Waiting for br0 to get ready (MAXWAIT is 32 seconds)

то это значит что очень долго поднимается мост, чтобы этого избежать можно в файл /etc/network/interfaces добавить следующую строку:

$ sudo nano /etc/network/interfaces

iface br0 inet static

bridge_ports eth0 eth1

Следом после сохранения снова перезапустить сетевую подсистему и проблема будет решена.

Получить информацию о bridge можно так:

$ sudo brctl show

bridge name bridge id STP enabled interfaces

br0 8000.0800277a16e5 yes eth0

Получить информацию о STP:

$ sudo brctl showstp br0

bridge id 8000.0800277a16e5

designated root 8000.0800277a16e5

root port 0 path cost 0

max age 20.00 bridge max age 20.00

hello time 2.00 bridge hello time 2.00

forward delay 15.00 bridge forward delay 15.00

ageing time 300.00

hello timer 1.74 tcn timer 0.00

topology change timer 0.00 gc timer 67.99

port id 8001 state forwarding

designated root 8000.0800277a16e5 path cost 4

designated bridge 8000.0800277a16e5 message age timer 0.00

designated port 8001 forward delay timer 0.00

designated cost 0 hold timer 0.74

port id 8002 state blocking

designated root 8000.0800277a16e5 path cost 4

designated bridge 8000.0800277a16e5 message age timer 19.80

designated port 8001 forward delay timer 0.00

designated cost 0 hold timer 0.00

В процессе Вам также может понадобиться расширенная справка по использование утилиты brctl

Программа brctl предназначена для создания, сопровождения и просмотра конфигурации модуля Ethernet-моста bridge в ядре Linux.

Ethernet-мост это устройство используемое для соединения разных Ethernet-сетей между собой так, что эта сеть видится как единая для членов сети.

Каждая сеть, участвующая в соединении, соответствует одном интерфейсу, подключённому к мосту. Эти отдельные сети ethernet связываются в большую логическую сеть. Этой сети соответствует сетевой интерфейс моста.

Команда brctl addbr <name> создаёт новый экземпляр ethernet-моста. Сетевой интерфейс, соответствующий этому мосту, будет называться name.

Команда brctl delbr <name> удаляет экземпляр моста, который называется name. Сетевой интерфейс, соответствующий мосту, нужно сначала выключить, прежде чем удалять этот мост.

Команда brctl show показывает все экземпляры ethernet-мостов.

У каждого моста есть подключённые к нему порты. Трафик, который приходит через любой из этих портов, прозрачно отправляется на другие; мост остаётся невидимым для остальной сети (в частности, его не видно через traceroute).

Команда brctl addif <brname> <ifname> делает сетевой интерфейс <ifname> портом моста <brname>. Это означает, что все кадры, полученные через интерфейс <ifname> будут обрабатываться, как если они пришли на этот мост. И наоборот, когда кадр приходит на мост <brname>, интерфейс <ifname> рассматривается как потенциальный порт для отправки трафика.

Команда brctl delif <brname> <ifname> отключает интерфейс <ifname> от бриджа <brname>.

Команда brctl show <brname> показывает информацию про мост подключённые к нему порты.

Мост отслеживает какие адреса были на каждом порту. Когда нужно передать кадр, адрес получателя (заданный в кадре) которого был замечен на каком-то порту, он передаётся только на этот порт. В результате не создаётся множество лишних кадров.

Местоположение ethernet это не статические данные. Машины могут переходить на другие порты, сетевые карты могут меняться (и соответственно, будут меняться MAC-адреса) и т.д.

brctl showmacs <brname> показывает список изученных (learned) MAC-адресов для этого моста.

brctl setageingtime <brname> <time> задаёт время жизни (ageing time) MAC-адреса, в секундах. Если в течение времени <time> секунд мост не видит кадров с определённого адреса, этот адрес удаляется из базы данных Forwarding DataBase (fdb).

brctl setgcint <brname> <time> задаёт период сбора мусора (garbage collection interval) для моста <brname> равным <time> секунд. Это значит, что bridge будет проверять forwarding database на наличие устаревших записей каждые <time> секунд.

Spanning Tree Protocol (Протокол основного дерева)

Несколько ethernet-мостов могут быть соединены друг с другом ethernet-сетями и образовывать ещё большую сеть. В таких сетях обычно работает протокол 802.1d (или аналогичный). Это протокол используется для нахождения кратчайшего пути между двумя ethernet-сетями и для удаления колец из топологий сетей ethernet. Поскольку это стандарт, мосты Linux будут нормально взаимодействовать с мостами третьих производителей. Мосты взаимодействуют друг с другом при помощи отправки BPDU (Bridge Protocol Data Units). Эти BPDU можно узнать по Ethernet-адресу получателя 01:80:c2:00:00:00.

Протокол spanning tree можно выключить совсем (в тех случаях, когда в его использовании нет никакого смысла, например, когда Linux-машина это единственный мост в сети или если если вы уверены, что петель в топологии не будет наверняка).

Программа brctl может настраивать некоторые параметры протокола spanning tree. Объяснение, что обозначают эти параметры можно найти в спецификации IEEE 802.1d. Настройки по умолчанию должны хорошо работать в большинстве случаев. Если вы не знаете, что означают эти параметры, скорее всего вы и не захотите их менять.

Из дополнительной информации по использованию bridge подчерпнул для своего развития, что мосты использующиеся в Ubuntu системе более продвинутей по сравнению с простыми аппаратными мостами и коммутаторами, все дело в том, что они могут отфильтровывать и регулировать трафик. Просто часто в организациях в которых работаешь просто нет финансовой возможности приобретать дорогую железку, если Вы как специалист и объяснили своему руководству, что оно может существенно съекономить для решения поставленной задачи задействовав не аппаратную сторону, а программную. А вы как раз такой специалист который в своей системе (Ubuntu системе) может это сделать, задокумментировать и объяснить коллегам, как он этого добился. На этом заметка завершена, в последствии опираясь на нее я покажу ее использование в дальнейшем, а пока всё, до встречи с уважением автор блога – ekzorchik.

2 комментария

А у Вас не получится сделать br0 и поместить в него eth0 + wlan0. Вроде так не работает. С такой задачей дело не имел.

Comments are closed.

Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:

Поблагодари автора и новые статьи

будут появляться чаще :)

Карта МКБ: 4432-7300-2472-8059

Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.

network-logo

Сегодня рассмотрим пример по Настройки сетевого моста в Ubuntu Server 18.04/20.04 LTS при помощи утилиты Netplan.

Обновление системы

Для начала давайте обновим систему, для этого в терминале набираем:

После смотрим какие интерфейсы у нас присутствуют в системе:

У меня имеются три сетевых интерфейса: enp0s3, enp0s8 и enp0s9.

enp0s3 − смотрит в интернет;
enp0s8 и enp0s9 − смотрят в локальную сеть 1 и 2 соответственно

Настройка сетевого моста в Ubuntu Server

Открываем на редактирование файл 50-cloud-init.yaml расположенный в /etc/netplan

И вносим в него изменения. Вот пример моего файла.

Не забываем, что файл теперь чувствителен к лишним пробелам и табуляциям

IP адреса меняем на свои, а также названия интерфейсов

Также блок routes можете удалить, я привел его для общего понимания настройки сети в ubuntu server 18.04/20.04.

Он необходим для того, чтобы настроить маршрутизацию. Например: имеется сеть 10.5.7.0 на сервере, к которому подключается мой сервер через интерфейс enp0s3 или же у вас в локальной сети имеется дополнительные сервера, то прописав данную конфигурацию наш сервер будет знать о сети 10.5.7.0 и пакеты из сети 10.10.10.0 смогут попасть в сеть 10.5.7.0 через сервер с IP адресом 10.5.5.1

После внесения изменений ваш конфигурационные файл можно протестировать следующей командой:

Если все отлично, то через 120 секунд конфигурация применится автоматом. Убедимся, что все в порядке.

У меня вывод вот такой:

Как видим все не так уж и трудно :)

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВК или подписаться на Twitter. Ссылки в шапки страницы.
Заранее всем спасибо.


Когда вы настраиваете и используете мостовую сеть, гостевые операционные системы получают доступ к внешней сети, подключенной непосредственно к хост-машине. Мост можно создать либо с помощью диспетчера виртуальных машин, либо с помощью инструмента командной строки virsh , либо путем прямого редактирования сетевых сценариев, либо с помощью инструментов управления сетью Linux.

Шаг 1. Создание мостовой сети с помощью диспетчера виртуальных машин.

Выполните следующие действия, чтобы создать мост Linux из диспетчера виртуальных машин (GUI). В вашей системе должен быть установлен KVM.

Откройте диспетчер виртуальных машин и перейдите в меню «Правка»> «Сведения о подключении»> «Виртуальные сети».

Настройте новый сетевой интерфейс, щелкнув + в нижней части окна. Дайте виртуальной сети имя.

Выберите тип сети и политику пересылки.

Завершите настройку и сохраните свои конфигурации. Новая виртуальная сеть должна отображаться на странице обзора.

Для сети автоматически создается мост в хост-системе.

Шаг 2: Создайте мост KVM с помощью команды virsh.

Создайте новый XML-файл моста.

Добавьте в файл детали моста.

Чтобы определить сеть из файла XML без его запуска, используйте:

Чтобы запустить (ранее определенную) неактивную сеть, используйте:

Чтобы настроить автоматический запуск сети при запуске службы:

Подтвердите создание моста и IP-адрес.

Шаг 3: Создайте мост, отредактировав сетевые скрипты (CentOS / RHEL / Fedora):

Ниже скрипт создаст мост под названием br10.

Конфигурация интерфейса eth0, к которому я подключаюсь, будет следующей:

Перезагрузите сетевой демон.

Шаг 4: Создайте мост, отредактировав сетевые сценарии (Debian / Ubuntu):

Настроить интерфейс Bridging:

Отключите все строки в разделе интерфейса eth0, чтобы они выглядели примерно так:

Перезапустите сетевую службу.

Шаг 5: Использование инструмента Nmcli

Используйте nmcli инструмент командной строки управления сетью, чтобы создать мост Linux на желаемом интерфейсе. Давайте сначала перечислим все доступные подключения.

Поскольку мой мост будет создан на втором устройстве enp7s0 , я удалю существующее соединение, а затем создам мост с этим устройством.

1. Сохраните информацию, связанную с мостом, в переменных.

  • BR_NAME: имя создаваемого моста.
  • BR_INT: физическое сетевое устройство, которое будет использоваться в качестве ведомого моста.
  • SUBNET_IP: IP-адрес и подсеть, назначенные созданному мосту.
  • GW: IP-адрес шлюза по умолчанию.
  • DNS1 и DNS2: IP-адреса DNS-серверов, которые будут использоваться.

2. Определите новое мостовое соединение.

3. Измените мост, чтобы добавить IP-адрес, шлюз и DNS

4. Добавьте сетевое устройство как подчиненное устройство моста.

Шаг 6. Подключите сетевой мост

После того, как соединение с сетевым мостом будет создано, активируйте его.

Просмотрите детали моста, запустив его.

Команда ip addr должна выдать результат, аналогичный приведенному ниже.

Поздравляю . Вы успешно создали и настроили мостовую сеть для KVM в системе Linux.

Читайте также: