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). Добавляется обычно 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 контейнеризацию.