Поддержка сетевых мостов есть в 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 контейнеризацию.