Виртуальные сетевые устройства в Linux: Linux Bridge

High level описание некоторых виртуальных сетевых устройств доступных в ядре Linux.

Linux Bridge

Уровень: L2

Команды:

  • brctl addbr|delbr <name> - создание и удаление;
  • brctl addif|delif <brname> <ifname> -добавление интерфейса;
  • brctl showmacs <brname> отобразить таблицу коммутации;
  • brctl show-список устройств.

Описание:

Как и физический мост, linux bridge позволяет объединить два или более ethernet сегментов в одну L2 сеть, образуя тем самым широковещательный домен, в котором каждое из устройств указаниемMACадреса (пр. broadcast адрес FF:FF:FF:FF:FF:FF) сможет обмениваться фреймами с другими устройствами из этой же сети.

Кроме того, linux bridge имеет таблицу коммутации, которая строится в ходе его работы и поддержку STP протокола для предотвращения образования петель, поэтому корректнее все таки сравнивать с физическим коммутатором, а не мостом.

Для начала работы, достаточно создать bridge используя набор утилит из пакета bridge-utils, и подключить в качестве портов необходимые физические или виртуальные интерфейсы хоста, объединив тем самым их в один сегмент.

Этот шаг отсоединит интерфейсы от сетевого стека ядра Linux и подключит их в качестве L2 интерфейсов (портов) моста, сбросив при этом их ip адреса.

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

Использование на практике:

Одно из частых применений — объединение виртуальных машин или контейнеров (пр. docker0) в один L2 сегмент, предоставляя тем самым им возможность обмена данными, а также подключения их, например, к внешней сети, благодаря объединению с физическим интерфейсом хоста в одну сеть.

Объединение в L2 сегмент трех виртуальных машин и физического интерфейса eth0 внешней сети хоста.

Комбинируя Linux Bridge и VLAN можно создать несколько изолированных друг от друга широковещательных доменов, получив тем самым простой tenant networking для виртуальных машин/контейнеров. Это удобной способ на канальном уровне разделить сети виртуальных машин, например в целях безопасности.

Схема соединения может выглядеть следующим образом (упрощена):

Виртуальные машины двух физических хостов разделенных на два широковещательных L2 домена RED и BLUE.

Здесь виртуальные машины VM под номерами 1,2,4 образуют один L2 сегмент, трафик которого изолирован от трафика виртуальных машин 3 и 5 благодаря использованию VLAN интерфейсов с разными VID.

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

  1. Создать два sub-интерфейса физического интерфейса eth0 с разными VID eth0.1 и eth0.2 :
ssh root@host1 and root@host2

vconfig add eth0 1 # BLUE TENANT
vconfig add eth0 2 # RED TENANT

2. Создать два моста br1 и br2, каждый из которых будет объединять в L2 сегмент виртуальные машины принадлежащие одному tenant’у: RED или BLUE

ssh root@host1 and root@host2brctl add br1    # BLUE TENANT's bridge
brctl add br2 # RED TENANT's bridge

3. Добавить интерфейсы виртуальных машин vm_eth0 и sub-интерфейсы eth0 к соответствующему мосту в зависимости от принадлежности к tenant’у:

ssh root@HOST1# BLUE TENANT
brctl addif br1 vm1_eth0
brctl addif br1 vm2_eth0
brctl addif br1 eth0.1
# RED TENANT
brctl addif br2 eth0.2
brctl addif br2 vm3_eth0
------------------------------------ssh root@HOST2# BLUE TENANT
brctl addif br1 vm4_eth0
brctl addif br1 eth0.1
# RED TENANT
brctl addif br2 eth0.2
brctl addif br2 vm5_eth0

Таким образом, для host1 схема соединения будет выглядеть следующим образом:

To be continued…

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade