Виртуальные сетевые устройства в 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 сегмент, предоставляя тем самым им возможность обмена данными, а также подключения их, например, к внешней сети, благодаря объединению с физическим интерфейсом хоста в одну сеть.
Комбинируя Linux Bridge и VLAN можно создать несколько изолированных друг от друга широковещательных доменов, получив тем самым простой tenant networking для виртуальных машин/контейнеров. Это удобной способ на канальном уровне разделить сети виртуальных машин, например в целях безопасности.
Схема соединения может выглядеть следующим образом (упрощена):
Здесь виртуальные машины VM под номерами 1,2,4 образуют один L2 сегмент, трафик которого изолирован от трафика виртуальных машин 3 и 5 благодаря использованию VLAN интерфейсов с разными VID.
Достигнуть этого можно несколькими путями. Один из них выглядит следующим образом:
- Создать два sub-интерфейса физического интерфейса
eth0
с разными VIDeth0.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…