Linux bridge

Proč bychom měli využít bridge?

V minulých kapitolách jsme se nejprve dopodrobna věnovali základů síťování v Linuxu, který, věříme, že Vám, čtenářům, poskytl pevný základ pro další vzdělávání se. Pokračovali jsme další kapitolou věnující se síťovému bondingu, tedy spojování více síťových rozhraní do jednoho.

V této kapitole na všechny nabyté zkušenosti navážeme. A ani se tolik od samotného network bondingu z předchozí kapitoly nevzdálíme. Jak již víme, network bonding nám umožňuje sdružovat více síťových rozhraní do jednoho. Díky tomu můžeme získat vyšší propustnost linky v komunikaci směrem k a od klientů a také možnost zastupitelnosti jednotlivých rozhraní v případě selhání jednoho nebo více z nich.

Bridge v operačním systému Linux Vám bude připadat poměrně podobný network bondingu. Abychom ale si ale nepletli jablka s hruškami, uveďme, že narozdíl bridging se od bondingu liší v zásadě v tom, že umožńuje vytvářet virtuální sítě a ty propojovat, aby klienti z obou sítí mezi sebou mohli libovolně komunikovat a ideálně třeba ani nepoznali, že vzájemně pochází z jiných sítí.

Zatímco network bonding zajišťoval propojení dvou a více sítí převážně proto, abychom získali možnost redundance nebo vyšší propustnosti převážně pro přístup klientů připojených na více síťových rozhraních, sdružených v jedno (díky bondingu), k jednomu hlavnímu/pro ně centrálnímu prvku v síti, zpravidla například k serveru, Linuxový bridge toto nedělá. Naopak jednotlivé sítě propojuje pro vzájemnou komunikaci a cílem klientů není připojení k nějakému serveru, který umožňuje bridging (nebo bonding v předchozím případě), ale k dalšímu klientu, ke kterému právě díky přemostění získá přístup, jako by obě zařízení byla v jedné síti.

Možná mohou předchozí odstavce znít poněkud zmatečně, zkusíme si to vysvětlit ještě jinak. Představme si, že máme několik aplikací, které běží v polovirtualizovaném prostředí - kontejneru - Docker, každá z nich má na hlavním supervizorovi vlastní síťové rozhraní. V jednom z kontejnerů běží webový aplikační server, který potřebuje přistupovat k MySQL databázi běžící ve druhém Docker kontejneru.

Z bezpečnostních důvodů nemusíme chtít pustit obě instance k dalším kontejnerům a případně i jiným zařízením v jiných sítích. Vytvoříme proto mezi oběma síťovými rozhraní tzv. most. Díky tomu budou moci obě aplikace vzájemně komunikovat v jakémsi uzavřeném prostředí, které až poté vyvedeme například do sítě Internet skrze nyní už fyzické síťové rozhraní.

To je tedy v jednoduchosti princip fungování bridge v rámci Linuxu. Pojďme se nyní dozvědět o přemostění více.

Fungování bridge

Z řádků výše si lze velmi snadno odvodit, že bridge zastává vlastně funkci jakéhosi routeru. Abychom byli přesní, jde spíše o chytrou variantu hubu nebo switche. Zatímco chytrý router pracuje na 3. vrstvě přímo s IP adresami, bridge funguje na nižší úrovní, konkrétně na 2. síťové vrstvě, a operuje tedy proto s MAC adresami. IP adresy bridge vůbec nezajímají.

Nelze však konstatovat, že bridge a switch je totéž, byť samozřejmě jeden v softwarové a druhý v hardwarové podobě. Není to jediný rozdíl, těch rozdílů je zde mnoho. Switch se stará o správné směrování dat z různých vstupních fyzických portů na správný port. K tomu využívá tzv. MAC tabulku, do níž si ukládá na jakém portu se nachází zařízení s jakou hardwarovou MAC adresou.

Naproti tomu bridge se stará pouze o rozdělení již existující sítě na menší segmenty, které vzájemně propojuje - zpravidla zařízení z více sítí (která nechceme, aby se potkala v jedné velké sítí).

Dalším zásadním rozdílem je, že bridge může disponovat zpravidla pouze dvěma nebo čtyřmi porty – však přeci pouze přemosťuje komunikaci bodu A do bodu B. Nesměruje provoz a už vůbec jej neroutuje. Pouze vytváří virtuální spojení mezi dvěma body, kterým umožňuje komunikaci.

Stejně tak se bridge nestará o další věci, které jsou u switche samozřejmostí, mezi které patří třeba kontrola správnosti paketů a jejich zahazování.

Konfigurace síťového mostu

Vytvořit nové bridge rozhraní je v Linuxu pomocí příkazové řádky velmi snadné. Nejprve si musíme nainstalovat potřebné programové vybavení, a to balíček bridge-utils.

sudo apt install bridge-utils

Pokud bychom chtěli později provádět pokročilejší konfigurace, konkrétně pro konfiguraci TAP, je vhodné si z repozitáře nainstalovat také balíček uml-utilities, ale pro nastavení bridge to není nutné.

sudo apt install uml-utilities

Přidání nového bridge

Jak už známe z předchozích kapitol o síťování a network bondingu, budeme si nejprve muset vytvořit nové síťové rozhraní typu bridge. Využijeme k tomu rovnou nově nainstalovaný balík bridge-utils a v něm obsažený příkaz brctl, který je zkratkou pro „bridge control“, tedy „ovládání bridge“.

brctl addbr br0

Zažitou konvencí pro síťová rozhraní typu bridge je pojmenovávat je ve stylu brXX, kde XX je vzestupně rostoucí číslo jdoucí od nuly.

Přidání rozhraní do bridge

Nyní budeme chtít to nejdůležitější – přidat síťová rozhraní, která chceme mezi sebou propojit, tzv. přemostit. V našem případě, kdy se jedná o rozhraní eth0 a eth1, to provedeme následovně

brctl addif br0 eth0
brctl addif br0 eth1

Nahození bridge

Nově vytvořený interface ale zatím nefunguje a je shozený (tzn. ve stavu down). Abychom jej nahodili do stavu up, použijeme příkaz

ip link set dev br0 up

Stejným způsobem jej můžeme i shodit, a to příkazem

ip link set dev br0 down

Výpis síťových mostů

Pro ověření, že vše funguje tak, jak má, si můžeme vypsat veškeré existující bridge. Učiníme tak pomocí jednoduchého příkazu

brctl show

Smazání bridge

Pokud vytvořený bridge již nechceme využívat, můžeme jej jednoduše smazat pomocí

brctl delbr br0

results matching ""

    No results matching ""