brctl: addif и addbr


Поддержка сетевых мостов есть в Linux для ядер 2.4 и старше. Необходимый для работы пакет bridge-utils доступен в репозиториях. Команды brctl addif и brctl addbr нужны при создании моста.



Фактически, бридж — виртуальный коммутатор — устройство второго уровня модели OSI, оперирующее MAC адресами.


Каждый создаваемый коммутатор выглядит в выводе ip a отдельным интерфейсом.



brctl addif и brctl addbr


Прежде всего установим пакет

apt-get install bridge-utils



Добавляем сетевой мост

brctl addbr br0



Интерфейсы (в примере, eth0) можно добавлять в бридж (br0) так:

brctl addif br0 eth0



Их имена можно узнать из вывода ip a (ip addr show).

brctl addbr


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



Несколько интерфейсов добавляются в мост в любом порядке

brctl addif br0 eth0 eth1



При необходимости так же интерфейс убирается:

brctl delif br0 eth1


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



Один интерфейс включается не больше, чем в один бридж.



У самого бриджа нет IP адреса, что делает невозможным подключение к нему извне. Если бриджей несколько можно настроить STP (spanning-tree-protocol), что предотвратит возникновение петель при коммутации.



При базовой конфигурации с одним сетевым мостом это не требуется.


Чтобы изменения сохранялись после перезагрузки нужно внести правки в /etc/network/interfaces


mcedit /etc/network/interfaces

Для DHCP:

# The loopback network interface
auto lo
iface lo inet loopback

# Set up interfaces manually, avoiding conflicts with, e.g., network manager
iface eth0 inet manual

iface eth1 inet manual

# Bridge setup
iface br0 inet dhcp
bridge_ports eth0 eth1



Затем выполняется ifup br0 чтобы поднять мост и все интерфейсы, в него включенные.


Для статического IP:

# The loopback network interface
auto lo br0
iface lo inet loopback

# Set up interfaces manually, avoiding conflicts with, e.g., network manager
iface eth0 inet manual

iface eth1 inet manual

# Bridge setup
iface br0 inet static
bridge_ports eth0 eth1
address 192.168.1.1
broadcast 192.168.4.255
netmask 255.255.255.0
gateway 192.168.1.1



Поддерживаются регулярные выражения — bridge_ports regex eth*



Опции, которые могут потребоваться при работе с сетевыми мостами:


bridge_stp off  — выключает Spanning Tree Protocol
bridge_waitport 0 — нулевая задержка при смене состояния порта
bridge_fd 0 — нулевая задержка при пересылке



Посмотреть информацию по всем сетевым мостам на машине можно так:

brctl show



 Пример добавления моста для LXC


После установки LXC полноценно пакет работать не будет если отсутствует сетевой мост. Добавляется он при этом очень легко.



Сначала нужно посмотреть имя моста:

cat /etc/lxc/default.conf

lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx



Затем добавить его

brctl addbr lxcbr0

brctl show

bridge name bridge id STP enabled interfaces
lxcbr0 8000.000000000000 no



brctl addif и добавление интерфейсов обычно не требуется, в /etc/network/interaces для моста прописывается сетевые настройки идентичные существующим для интерфейса, смотрящего во внешнюю сеть.


Читайте про LXC контейнеризацию.

Сказать спасибо