Virtlab:Tunelovací server
Z VirtlabWiki
Tunelovací server je démon běžící na zvláštním serveru, jež je součástí Distribuované virtuální laboratoře a jeho úkolem je zajistit propojení (bridge) různých VLAN mezi jednotlivými lokálními virtuálními laboratořemi a také různých VLAN v rámci jednoho ethernetového segmentu.
Obsah |
Princip činnosti
Dané ethernetové rozhraní serveru je připojeno trunk linkou k příslušnému přepínači (Cisco 3550) nebo i jinému zařízení, které podporuje standard IEEE 802.1q. Tunelovacímu serveru je nakonfigurována tabulka (tabulka přesměrování), ve které je uvedeno vždy VLAN ID rámce z lokání sítě, nové VLAN ID kam bude rámec poslán a ip adresa vzdáleného (nebo i lokálního) tunelovacího serveru. Tunelovací server přepne rozhraní s trunk linkou do promiskuitního módu, což umožní přijímat veškerý provoz na trunk lince. Následně odchytává VLAN tagované ethernetové rámce a kontroluje, jestli jsou definovány v tabulce přesměrování. Pokud ano, je VLAN ID přečíslováno podle této tabulky a celý rámec je prostřednictvím UDP paketu odeslán na danou ip adresu. Zde jej tunelovací server příjme, vybalí a opět v syrové formě ethernetového rámce a odešle ven trunk linkou. Tímto způsobem dochází k virtuálnímu propojení ethernetu definovaných VLAN a to i vzdáleně (přes Internet), tedy vznikne ethernetový tunel.
Spuštění tunelovacího serveru
tun-server <interface> [-DBGLOGlevel=<level>]
- interface - například eth0
- DBGLOGlevel - stejně jako u všech ostatních serverů (od režimu DEBUG až po CRIT - viz. Logování a debugging)
Konfigurace
Démon, který má tunelování na starosti je možno konfigurovat prostřednictvím vzdálené řádkové konzole (CLI). Tato konzole standardně běží na portu 40001. Je tedy možno konfiguraci provést například programem telnet:
telnet tunelserver 40001
Příkazy se do konzole zadávají do jednoho řádku a za vlastním příkazem mohou následovat jeho argumenty. Vše je odděleno jednou mezerou. Příkazy, které můžeme použivat jsou uvedeny v následující tabulce:
Příkaz | Argumenty | Popis |
---|---|---|
exit | - | Ukončí konzoli |
help | název příkazu | Vypíše obecnou nápovědu, nebo nápovědu k příkazu |
show | - | Vypíše tabulku přesměrování |
redir | z_VLAN_ID na_VLAN_ID vzdaleny server | Přidá přesměrování do tabulky |
noredir | z_VLAN_ID | Vymaže přesměrování z tabulky |
Příklad konfigurace je uveden v popisu protokolu Tunelovacího serveru.
Poznámky k provozu
Zprovoznění USB-Ethernet převodníku
Rackovatelný server Abacus má dvě síťové karty, které však používají hardwarovou akceleraci a tím znemožňují přístup k číslu VLAN. Tohle číslo je ale pro tunelovací server nezbytné, proto s těmito kartami nedokáže pracovat.
Náhradní možnost je použít USB-Ethernet převodník (testováno s Edimax EU-4202). Ten se dá v linuxu (Debian s jádrem 2.6.8 a upgradovaný ze Sarge na Etch) velice jednoduše zprovoznit. Stačí příkaz modprobe usbnet. Karta se sice ze začátku "schovává" - tzn. ve vypisu ifconfig nebyla k nalezení, ale okamžiťe po připojení UTP kabelem do sítě se zobrazila jako eth2 a byla schopna práce.
Pro automatické zavádění modulu po startu systému je nutné ještě dopsat do souboru /etc/modules řádek usbnet. Dále jsem do souboru /etc/rc.local dopsal prikaz pro "nahozeni" rozhrani eth2 - ifconfig eth2 up
.
Pozor na Spanning-tree
Tunelovací server nedokáže pracovat, pokud "hlavním" switchi (tzn. switch, který je k tun-serveru přímo připojen) není vypnut protokol spanning-tree. Vzorová konfigurace tohoto switche je ulozena v SVN v souboru DISTR/src/spojovac/C3550-permanent.cfg.
Problém s omezením čísel VLAN
Na "hlavním" switchi je dále vhodné vypnout protokol VTP, přesněji řečeno přepnout jej do módu transparent.
SW(config)#vtp mode transparent
V opačném případě nebyly switche schopny pracovat s VLANy s číslem větším než 1001. Buď switch vypsal při nastavování tohoto čísla chybovou hlášku (non-ethernet vlan) nebo jen port zablokoval a LEDka svítila oranžovou barvou. V každém případě port nebyl schopen práce. (Asi daná verze VTP nepodporuje takováto čísla?)
V "ukázkové konfiguraci" v souboru DISTR/src/spojovac/C3550-permanent.cfg je vše dobře.