Debian настройка сетевого моста

Обновлено: 07.07.2024

Вывод: использование протокола 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.

Бридж (англ. bridge, мост) - это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.

Термины коммутатор, мост и бридж могут использоваться на данной странице как взаимознаменяемые.

Код bridge в Linux является частичной реализацией стандарта ANSI/IEEE 802.1d. Впервые бриджинг в Linux появился в 2.2, затем код был переписан Леннертом Буйтенхеком (Lennert Buytenhek). Код bridge интегрирован в ядра серий 2.4 и 2.6. Железо - Intel Pentum 133 - RAM 32 mb - hdd 1024 mb - 2 сетевые карты 100 Mbps или 1000 Mbps (можно и больше, но желательно одинаковые).

Установка ПО Ставим Linux Debian с минимумом пакетов, сеть не настраиваем. После установки Debian ставим несколько необходимых пакетов:


Настройка моста Узнаем где наши сетевые карты Код:

Настройки сети в Linux Debian находятся в файле /etc/network/interfaces У меня на мосте он имеет такой вид: Код:


Создаём скрипт /etc/network/if-up.d/bridge Код:

  1. Чистим настройки от предыдущего запуска скрипта
  1. Запускаем бридж
  1. Задаём IP моста, для дальнейшего управления им через ssh
  1. Удаляем IP сетевых карт
  1. Поднимаем интерфейсы сетевых карт и моста

В принципе мост готов к использованию, надо только перезагрузить компьютер или выполнить скрипт (не забудьте его сделать запускаемым от имени root 774 Код:

Может возникнуть необходимость указать с какой стороны находится тот или иной компьютер. Дописываем в наш скрипт следующие команды:

  1. Сообщаем что ip 192.168.110.200 находится со стороны eth1
  1. Сообщаем что ip 192.168.88.250 находится со стороны eth2
  1. Сообщаем мосту с какой стороны сеть 192.168.55.0/24 (255.255.255.0)

После таких настроек ваш мост станет немного умнее. Теперь для проверки маршрутизации набираем команду: Код:

Удалённое управление мостом


Теперь можно работать с мостом как с настольным компьютером в текстовом режиме.

Основную настройку сети можно выполнить, редактируя конфигурационный файл interfaces, который располагается в /etc/network/interfaces. Здесь Вы можете задать IP адресс сетевой карты (или использовать DHCP), настроить маршрутизацию, IP masquerading, установить маршрут по умолчанию и многое другое.

Для того что бы интерфейс автоматически инициализировался при загрузке, не забудьте добавить строчку 'auto'.

Полный список опций можно найти в man interfaces.

Автоматическое конфигурирование интерфейса с использованием DHCP

Если Вы хотите использовать DHCP вам необходимо написать следующие:

Ручное конфигурирование интерфейса

Если Вы хотите сконфигурировать вручную, например задать шлюз по умолчанию (так же опционально можно задать: сеть, широковещательный адрес или шлюз):

Если вы хотите добавить IPv6 адрес, то напишете следующие:

Полный список опций можно найти в man interfaces.

Настройка скорости и дуплекса

Частые ошибки автоматического согласования режимов работы, свидетельствуют о проблемах с кабелем. Следует проверить физическое состояние кабельного оборудования (отсутствие повреждений итп), прежде чем предполагать несовместимость алгоритмов автосогласования. Если Вы выключите автосогласование и установите скорость и дуплекс вручную, то интерфейс на другом конце кабеля будет считать что автосогласование не поддерживается и установит скорость 10Mbs и полудуплексный режим передачи. Для того чтобы не было ошибок в работе, при ручной настройки Вам необходимо убедиться что оба интерфейса работают на одинаковых скоростях и установлен одинаковый режим дуплекса.

Переключение интерфейса в режим моста без IP адреса

Чтобы создать сетевой интерфейс без IP адреса используйте ручной метод и команды pre-up и post-down

В большинстве ситуаций необходимо отредактировать файлы конфигураций этих программ.

В более сложных ситуациях, более правильным будет использование программы resolvconf, но для простых конфигураций она избыточена.

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

Конфигурационный файл resolv.conf располагается в /etc/resolv.conf, и содержит информацию которая позволяет компьютеру подсоединяться к сети преобразовывать имя в адрес. (Прим. Не путайте этот конфигурационный файл с программой resolvconf , которая по неудачному стечению обстоятельств имеет такое же название.)

Файл resolv.conf обычно содержит IP адреса серверов имён (DNS) которые будут пытаться перевести имена в адрес для любого узла доступного в сети. Там будут строчки содержащие, примерно, следующие:

В этом примере, система исопользует сервера имён с IP адресами 12.34.56.78 и 12.34.56.79. Просто отредактируйте этот файл и введите IP адреса нужных Вам серверов, после слова nameserver. Можно добавить ещё строчки, если у Вас больше 2 серверов имён.

Не используйте этот метод если у Вас установлена программа resolvconf

Конфигурационный файл resolv.conf имеет множество других опций для определения режимов преобразования имён. См. man resolv.conf.

Программа resolvconf

Программа resolvconf следит за информацией о доступных на данных момент серверов имён. Не следует путать её с одноимённым конфигурационным файлом resolv.conf. Программа resolvconf является опциональной для систем Debian.

Конфигурационный файл resolv.conf содержит информацию о серверах имён, которые используются в системы. Однако, когда множеству программ необходимо динамически изменять файл resolv.conf они начинают мешать друг другу и файл становиться не синхронизируемым (out-of-sync). Программа resolvconf решает эту проблему. Она является посредником между программами которые поставляют информацию о серверах имён (например dhcp клиент) и программами которые используют эту информацию (например резолвер).

Если resolvconf правильно установлена, конфигурационный файл resolv.conf заменяется символьной ссылкой на файл /etc/resolvconf/run/resolv.conf и резолвер использует файл, который динамически генерируется программой resolvconf.

Программа resolvconf, в общем случае, необходима когда в системе присутствуют программы которым необходимо часто изменять информацию о серверах имён. В простых системах где нет таких программ, достаточно просто файла resolv.conf.

Если программа resolvconf установлена, то Вам не следует вручную редактировать файл resolv.conf , так как он будет динамически меняться программами в системе. Если Вам необходимо вручную задать сервера имён (например при статически сконфигурированном интерфейсе), добавьте в конфигурационный файл interfaces следующую строчку:

Разместите эту строчку в описании интерфейса iface, сразу после указания шлюза gateway. IP адрес сервера имёны необхожимо ввести после слова dns-nameservers. Если IP адресов несколько то они разделяются пробелом. Не забудьте написать "s" в конце слова dns-nameservers.

Программа resolvconf была добавлена в Debian сравнительно недавно и многие старые программы необходимо обновить и переконфигурировать для правильно работы. Если у Вас возникли проблемы, смотрите файл /usr/share/doc/resolvconf/README. Он содержит полную информацию по работе resolvconf с другими программами.

Конфигурирование DNS для network-manager

Если Вы используете NetworkManager, настройки располагаются в файле /etc/sysconfig/network-scripts/ifcfg-*. Например так:

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

В этой статье будет рассмотрена настройка сети Debian 9. Мы разберем как настроить имя хоста, сетевые интерфейсы и получить IP адреса для них. Эта инструкция подойдет как для обычных компьютеров, так и для серверов.

1. Имя компьютера

Чтобы посмотреть текущее имя хоста вы можете использовать команду hostname:


Установить новое имя хоста очень просто, для этого достаточно передать его команде hostname в качестве параметра:


После перезагрузки имя хоста не сохранится, поэтому вам нужно отредактировать файл /etc/hostname и добавить туда новое имя хоста, уже это имя останется даже после перезагрузки:


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

127.0.0.1 localhost debian-pc


2. Список сетевых интерфейсов

Перед тем как мы сможем настроить сеть нужно посмотреть какие сетевые интерфейсы подключены к вашей системе и какие имена им присвоены. Для этого наберите:


Также можно посмотреть только имена интерфейсов, в папке /sys/class/net:


3. Настройка сетевого интерфейса

Для настройки сетевых интерфейсов в операционных системах, основанных на Debian, используется файл /etc/network/interfaces. Здесь должно находится описание для каждого интерфейса, способ получения IP а другие параметры. В одном файле может быть настроено несколько интерфейсов. Описание каждого интерфейса начинается со слова auto после которого идет имя интерфейса.

Это означает, что указанный интерфейс должен быть запущен при выполнении ifup с опцией -a, именно она используется при инициализации системы. После строки auto идут другие строки настроек, которые касаются именно этого интерфейса. Вот так, например, выглядит строка для включения локального интерфейса:


Перед тем как рассматривать все более подробно, поговорим про опции, которые можно использовать:

  • pre-up - выполнить команду перед запуском интерфейса;
  • post-up - выполнить команду после запуска интерфейса;
  • up - выполнить команду при запуске интерфейса;
  • pre-down - команда перед отключением;
  • post-down - команда после отключения;
  • iface - указывает имя интерфейса;
  • inet - указывает
  • description - создать имя синоним для устройства;
  • address - устанавливает ip адрес для статического соединения;
  • netmask - установка маски сети;
  • broadcast - широковещательный адрес;
  • metric - приоритет для шлюза по умолчанию;
  • gateway - шлюз по умолчанию;
  • hwaddress - установить MAC адрес;
  • mtu - размер одного пакета.

Это далеко не все опции, которые можно использовать, но основные из них и уже с помощью этого можно настроить большинство из того, что нужно. Дальше рассмотрим различные варианты настройки интерфейсов, самый часто используемый на домашних компьютерах - это получение ip адреса по DHCP, в таком случае, ip адрес может меняться при каждом запуске. Рассмотрим его первым.

Настройка динамического IP

Мы будем получать IP адрес через DHCP сервер, оттуда же будут получены шлюзы и DNS сервер, поэтому для работы достаточно добавить две строчки. Например, настроем получение IP по DHCP для интерфейса eth0:

auto eth0
iface eth0 inet dhcp

Но если необходимо, то вы можете установить вручную ip адрес DNS сервера:

Для локального интерфейса настройка будет выполняться таким образом:

auto lo
iface lo inet loopback

Здесь мы не получаем адрес по DHCP, но присваиваем локальный адрес 127.0.0.1.

Настройка статического IP адреса

Если вы хотите установить именно статический IP, то здесь все будет немного сложнее. Нам нужно знать не только этот свободный IP адрес, но и шлюз, маску сети и DNS сервер. Для настройки используется такой набор строк:

iface eth0 inet static
address 192.168.1.15
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.0.255
dns-nameserver 8.8.8.8


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

Настройка виртуальных интерфейсов

В некоторых случаях нам может понадобиться создать виртуальный интерфейс. Это позволяет добавить еще один IP адрес к интерфейсу. Чтобы создать такой интерфейс достаточно дописать его номер после двоеточия:

auto eth0:0
iface eth0:0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8


Имя интерфейса, для которого создается виртуальный интерфейс должно совпадать с реальным.

Настройка мостов

Сетевые мосты между виртуальными интерфейсами в системе позволяют настроить полноценный доступ к интернету из виртуальных машин. Они могут применяться для KVM,qemu,XEN и других конфигураций. Для настройки моста используйте:

auto br0
iface br0 inet static
address 192.168.1.20
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0


Здесь мы указываем имя интерфейса br0, дальше выполняем стандартную настройку получения статического IP адреса, затем связываем этот мост с интерфейсом eth0.

Перезагрузка сети

После внесения всех изменений необходимо перезапустить сеть, чтобы сетевые настройки debian вступили в силу, для этого наберите:

sudo systemctl restart networking

Выводы

В этой статье мы рассмотрели как выполняется настройка сети Debian 9. Конечно, это еще далеко не все, что возможно настроить, но с помощью этих команд можно в большинстве случаев заставить работать сеть. настройка сети из консоли debian дело сложное, в графическом интерфейсе все делается намного проще, с помощью NetworkManager все настраивается автоматически. Надеюсь, эта информация была полезной для вас.

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