Co jsou to VLAN a jak fungují, implementace v Mikrotiku
V dnešním článku bych rád uživatelsky vysvětlil, co jsou to VLANy, jak fungují a následně popsal způsoby implementace v Mikrotiku a jeho RouterOS.
Úvod
Jelikož jsem zjistil, že v implementaci a znalostech VLAN "plove" docela hodně lidí, včetně mnoha uživatelů Poradny, rozhodl jsem se, že na toto téma napíšu článek, ve kterém se pokusím uživatelsky vysvětlit, oč jde, jak to funguje, proč a jak se to používá a nakonec bych rád zabrousil (bez vybrušování ) do mírně specifické implementace v Mikrotiku.
Trocha nutné teorie
V první řadě: co je to VLAN? Je to zkratka "Virtual Local Area Network", čili Virtuální síť, jejíž standard je definován jako IEEE 802.1q. Hezký název, ale věřím, že mnohým z vás to nic neřekne. Budeme se držet nejčastější implementace, kterou je implementace na bázi ISO/OSI Layer2 ethernet portu (pro úplnost, další možnosti je implementace na základě ověření Radius nebo podle MAC adresy, což je "metoda Radius pro chudé"). Technicky vzato, jedná se o logické rozdělení (nejen) fyzických portů switche do různých, navzájem oddělených "virtuálních switchů", kdy zařízení připojená k virtuálnímu switchi A nebudou moci jakkoli komunikovat se zařízeními připojenými k virtuálnímu switchi B. Tyto virtuální switche a jejich porty se v rámci fyzického switche odlišují tzv. VLAN ID, tedy identifikátorem VLAN, což je číslo v rozsahu od 1 do 4096, každé z nich reprezentuje jeden virtuální switch.
Dobře, ale k čemu mi budou virtuální switche, když nakonec je stejně budu potřebovat nějak řízeně propojit, nebo budu potřebovat "roztáhnout" tyto virtuální switche přes více fyzických switchů, nebo dokonce switchů umístěných v odlehlých místech? Mít speciální propoj pro každou VLAN je velmi nepraktické, někdy i nemožné či extrémně nákladné. Pro takové případy existuje řešení, které popíšu v následujícím odstavci.
Každý fyzický port switche je možné nastavit do dvou režimů, které se jmenují ACCESS a TRUNK.
Access port je takový port, který má přiřazenu právě jednu VLAN ID (dále už jen VLAN) a zároveň tato VLAN není tagovaná (co to je, to vysvětlíme dále). Typické použití je pro koncová zařízení, jako PC, tiskárny apod.
Trunk port je takový port, který má přiřazeny alespoň dvě VLAN a logicky platí, že jedna z nich nemusí být tagovaná a zbytek tagován být musí. Obecně se ale počítá spíše s tím, že tagované jsou všechny VLAN (více dále).
Pokud má trunk port mix tagovaných a netagovaných VLAN, jedná se o tzv. Hybridní port. Čistý trunkport se používá na propojení routerů, switchů a případně serverů. Hybridní port je specifický a používá se k připojení zařízení, která při svém startu nemají informaci o tom, že budou použity VLANy, typicky se jedná o Wifi AP připojené ke Wireless kontrolérům, jež konfiguraci do AP "ládují" až během jejich startu.
Tagování je proces, kterým switch (i připojené koncové zařízení) opatřuje všechny odchozí pakety VLAN tagem. Naopak u portů, které jsou typu Access, dochází na straně switche k odstranění těchto tagů. A právě tagy na paketech určují, do kterého virtuálního switche daný paket patří. Z tohoto důvodu je u Trunkportů nutné, aby každý paket měl "vyplněnou" VLAN. V případě Access portu je příchozí (z pohledu switche) paket opatřen tagem podle toho, do jaké VLAN daný port patří (a logika switche jej následně na tomto základě zpracuje. Podobně to funguje u Hybrid portů, kde příchozí pakety jsou buďto již opatřeny VLAN tagem, nebo ne, a pak je switch otaguje na základě toho, jaké PVID má port nastaveno - což je poslední parametr, který je pro nastavení VLAN u portu důležitý. Pokud switch obdrží na vstupu portu paket, který patří do jiné VLAN než má port nastavené a zároveň se nejedná o hybridní port, NEBO pokud se objeví tagovaný paket na Access portu, bude takový paket zahozen.
Vzato prakticky:
- zařízení připojená Access portem "neví", že něco jako VLAN v síti funguje. Switch naopak všechny pakety, jdoucí na toto zařízení, tagů zbavuje.
- zařízení připojená k Trunk portu "musí vědět," že v síti jsou nasazeny VLANy, a tedy musí tagovat. Switch pouze kontroluje, zda tagy v paketech odpovídají nakonfigurovaným tagům na portu switche.
- zařízení připojená k Hybrid portu fungují i v případě, že o VLAN "neví", nicméně pouze ve VLAN, na kterou je na daném portu switche nastaveno PVID. Aby mohla využít dalších VLAN, musí začít tagovat. Switch u VLANy s PVID je schopen fungovat obojakým způsobem, tedy tagy odebírat i ponechávat.
Tento odstavec je asi nejdůležitější "praktické" shrnutí, na jehož bázi a znalosti budete schopni vytvořit téměř jakoukoli konfiguraci týkající se VLAN.
Vzorový příklad
Mějme větší síť ve dvou budovách, sestavenou ze dvou switchů, s implementovanou bezdrátovou sítí realizovanou pomocí kontroléru a několika AP, která obsahuje 3 segmenty: segment pro standardní uživatele, segment pro hosty a segment pro nebezpečné pokusy šíleného ajtíka. Do všech tří sítí jsou zavedeny bezdrátové sítě, jejichž SSID budiž "Users", "Guests" a "ITMordor" (jejich jména jsou významově popisná ). Všechny sítě budou připojeny do internetu pomocí jednoho routeru, který bude ve firewallu zohledňovat, ze které sítě komunikace přichází.
Jak je patrno, jde o klasické řešení pro VLAN. Určíme si jednotlivé VLAN-ID:
- uživatelská VLAN: 100
- hostovská VLAN: 120
- ajtíkova VLAN: 500
- management VLAN: 10
Proč je tam najednou čtvrtá síť? Tuto síť využijeme pro všechna zařízení, která budou použita pro vlastní sestavení sítě, tedy v této VLAN budou umístěny IP adresy switchů, wifi kontroléru a APček. Důvod je prostý - běžní uživatelé na tato zařízení přistupovat nepotřebují, naopak je žádoucí, aby management byl omezen na jednoznačně daná zařízení a uživatele, kteří budou mít fyzický přístup do této sítě.
Nyní sestavíme kostru sítě. Tou budou switche a router. Protože tyto komponenty budou součástí všech sítí, musí být členy všech VLAN. Toho docílíme tím, že použijeme vzájemné propojení pomocí Trunkportů, které budou obsahovat všechny VLANy. V našem případě využijeme pro propoj switchů optických modulů v portech 25 switchů a propoj s routerem pomocí portu č.1 switche A. Router připojíme pomocí LAN portu, na kterém také nastavíme totožný Trunk. Protože nastavujeme čistý trunk, nemusíme řešit PVID. Tím je kostra hotova.
Pokračujeme dalším krokem, nastavením Access portů pro počítače a další síťová zařízení v jednotlivých sítích. Na switchi A vyhradíme port č.2 pro VLAN 10, což bude management port pro správce sítě. Porty 3-8 na obou switchích plus port č.1 a 2 na switchi B zařadíme do ajtíkovy VLAN 500. Porty 9-20 na obou switchích budou vyhrazeny pro uživatelskou VLAN. Hostovská VLAN nebude mít přiřazeny žádné access porty, protože pro hosty v zasedacích místnostech se počítá pouze s pokrytím wifi. Na obou switchích tak máme rezervu 4 portů, které ponecháme v defaultní VLAN1 (nebo pro tyto účely můžeme vytvořit VLAN 4000, což je z pohledu bezpečnosti vhodnější řešení).
Na routeru nakonfigurujeme všechny sítě (doporučuji např. 192.168.100.0/24, 192.168.120.0/24, 10.5.0.0/24 a 192.168.10.0/24, což je řešení vhodné z hlediska mnemotechniky) pro dané VLANy v trunkportu, nastavíme DHCP scopes pro všechny sítě, nastavíme DNS a firewall.
Tím máme hotovu jednodušší část. Přikročíme k implementaci a zapojení bezdrátové sítě. K tomuto účelu využijeme dosud nepřiřazené porty 20-24 switche. Zapojení WLC do portu 21 switche A bude mít dvě varianty: Pokud je WLC pouhý administrátor nastavení AP, postačí, když bude připojen Access portem do management VLAN 10. Pokud ovšem zajišťuje spojení klientům (např. řeší přístup k internetu apod.), je nutné jej připojit Trunkportem, se všemi potřebnými VLAN tak, aby přes něj mohla proudit komunikace do potřebné sítě; v takovém případě bude ovšem nutné vytvořit ještě další "interní" VLAN pro síť mezi AP a WLC, my pro jednoduchost budeme uvažovat pouze základní řešení spočívající v pouhé administraci AP). Na samotném WLC pak zkonfigurujeme tři bezdrátové sítě, které budou mít nastaven tagging svých paketů do adekvátních VLAN 100, 120 a 500, čímž zajistíme, že bezdrátová komunikace bude po přechodu z AP zařazena do správné sítě na switchích.
K dispozici máme 5 AP, z nichž 2 kusy umístíme v budově A (porty 22 a 23) a 3 kusy v budově B (porty 21-23). Tyto porty nastavíme jako Hybrid porty, kde VLANy 100,120 a 500 budou tagged a VLAN 10 bude untagged. PVID nastavíme na VLAN 10. Tím zajistíme, že APčko bude při svém startu, kdy ještě "neví", že má používat VLANy, připojeno (jako access port) do VLAN 10, ve které je umístěn WLC, ze kterého získá během startu konfiguraci a seznam VLAN.
Výsledek bude vypadat takto:
Na závěr této kapitoly zrekapitulujeme, co jsme vytvořili:
- Spojili jsme dva switche a jeden router do jednoho logického celku
- tento celek jsme rozdělili na 4 samostatné virtuální sítě
- všechny sítě jsou připojeny k internetu, volitelně lze na routeru routovat i mezi těmito virtuálními sítěmi (a to třeba tak, že z management sítě lze dosáhnout všechny ostatní, ale obráceně to neplatí)
- přiřadili jsme porty k jednotlivým sítím a pro speciální zařízení typu AP jsme ustavili další trunkporty
Aplikace VLAN v Mikrotiku
Donedávna (do verze 6.41, ve které došlo k zásadním změnám) platilo, že Mikrotik řešil VLANy prakticky výlučně na úrovni svého procesoru, tj. pro každou VLAN bylo třeba na úrovni RouterOS vytvořit bridge, do které se přidaly access porty. Trunkport se pak řešil tak, že se tvořily virtuální ethernet porty nad fyzickým portem Mikrotiku, kterým se přiřazovalo VLAN ID a následně došlo k přidání do Bridge. Platilo, že pokud port neměl nastavenou VLAN, byl brán za access port a samotná VLAN byla emulovaná Bridgem. V našem případě by tedy např. port 1 switche A měl vytvořeny 3 virtuální adaptéry. Jde tedy o řešení analogické Linuxovým systémům, kde jsou VLANy řešeny právě takovým způsobem.
Níže je názorný příklad starého konceptu, ve kterém je použit malý Mikrotik v režimu sekundárního routeru, kdy jedna (hostovská) bezdrátová síť je vysunuta na rozhraní WAN a v LAN je "skryta" vnitřní síť organizace s privátní wifi. Zároveň je port ethernet2 použit jako trunkport k vyvedení obou sítí na další AP v rámci komplexu budov. Stav je tedy takový, že ve VLAN1 je WAN port Ethernet1, port bezdrátu Guest a trunkport E2. Ve VLAN2 alias LAN jsou pak porty E3 a E4, bezdrát Private a konečně opět trunkport E2. Výpis konfigurace níže popisuje vytvoření obou Bridgů, vytvoření dvou virtuálních VLAN portů nad rozhraním E2 s ID 1 a 2 a následné rozřazení portů do bridgů.
/interface bridge
add name=bridge_vlan1_WAN
add name=bridge_vlan2_LAN
/interface vlan
add interface=ether2 l2mtu=1594 name=vlan1_e2 vlan-id=1
add interface=ether2 l2mtu=1594 name=vlan2_e2 vlan-id=2
/interface bridge port
add bridge=bridge_vlan1_WAN interface=ether1
add bridge=bridge_vlan1_WAN interface=vlan1_e2
add bridge=bridge_vlan1_WAN interface=wlan_GUEST
add bridge=bridge_vlan2_LAN interface=vlan2_e2
add bridge=bridge_vlan2_LAN interface=wlan_PRIVATE
add bridge=bridge_vlan2_LAN interface=ether3
add bridge=bridge_vlan2_LAN interface=ether4
Nové paradigma od verze 6.41 zavádí u zařízení, která toho jsou po HW stránce schopna, tzv. HW offloading, tj. řešení VLAN operací na úrovni čipsetu switche (tam, kde to nelze, bude vše řešit nadále procesor) a v rámci jednoho Bridge - tedy velmi podobně, jak je to řešeno ve switchích konkurenčních značek. Velká výhoda tkví v tom, že nyní není problém s protokoly běžícími na L2, jako je STP/RSTP, stejně tak IGMP snooping.
Konfigurace tedy vypadá následovně - všechny porty jsou v jednom bridgi, je nastaven HW offloading (funguje pouze pro některé modely Mikrotik, zejména ty s gigabitovými porty). Vše podstatné se děje v menu Bridge - nejprve do bridge přidáme všechny porty a následně si nastavíme, do které VLAN bude port patřit. Pokud vycházíme z defaultní konfigurace, je Bridge1 již vytvořen, zkontrolujeme jen, že jsou v něm všechny potřebné porty a úvodní vytváření bridge přeskočíme, v takovém případě ale musíme ručně ponastavovat PVID u všech portů, které nejsou čistým trunkem. Zároveň je třeba nastavit ručně PVID u Bridge1.
#-------------------------------------------------------
# Vytvoříme Bridge
#-------------------------------------------------------
/interface bridge
add name=bridge1 igmp-snooping=no protocol-mode=none pvid=10
/interface bridge port
add bridge=bridge1 interface=ether1 hw=yes
add bridge=bridge1 interface=ether2 hw=yes pvid=10
add bridge=bridge1 interface=ether3 hw=yes pvid=500
add bridge=bridge1 interface=ether4 hw=yes pvid=500
add bridge=bridge1 interface=ether5 hw=yes pvid=500
add bridge=bridge1 interface=ether6 hw=yes pvid=500
add bridge=bridge1 interface=ether7 hw=yes pvid=500
add bridge=bridge1 interface=ether8 hw=yes pvid=500
add bridge=bridge1 interface=ether9 hw=yes pvid=100
add bridge=bridge1 interface=ether10 hw=yes pvid=100
add bridge=bridge1 interface=ether11 hw=yes pvid=100
add bridge=bridge1 interface=ether12 hw=yes pvid=100
add bridge=bridge1 interface=ether13 hw=yes pvid=100
add bridge=bridge1 interface=ether14 hw=yes pvid=100
add bridge=bridge1 interface=ether15 hw=yes pvid=100
add bridge=bridge1 interface=ether16 hw=yes pvid=100
add bridge=bridge1 interface=ether17 hw=yes pvid=100
add bridge=bridge1 interface=ether18 hw=yes pvid=100
add bridge=bridge1 interface=ether19 hw=yes pvid=100
add bridge=bridge1 interface=ether20 hw=yes pvid=100
add bridge=bridge1 interface=ether21 hw=yes pvid=10
add bridge=bridge1 interface=ether22 hw=yes pvid=10
add bridge=bridge1 interface=ether23 hw=yes pvid=10
add bridge=bridge1 interface=ether24 hw=yes pvid=4000
add bridge=bridge1 interface=sfp-sfpplus1 hw=yes
add bridge=bridge1 interface=sfp-sfpplus2 hw=yes pvid=4000
#-------------------------------------------------------
# Rozdělíme porty dle VLAN
#-------------------------------------------------------
/interface bridge vlan
add bridge=bridge1 tagged=sfp-sfpplus1,ether1,ether22,ether23 untagged=ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,ether17,ether18,ether19,ether20 vlan-ids=100
add bridge=bridge1 tagged=sfp-sfpplus1,ether1,ether22,ether23 vlan-ids=120
add bridge=bridge1 tagged=sfp-sfpplus1,ether1,ether22,ether23 untagged=ether3,ether4,ether5,ether6,ether7,ether8 vlan-ids=500
add bridge=bridge1 tagged=sfp-sfpplus1,ether1,ether22,ether23 untagged=ether2 vlan-ids=10
add bridge=bridge1 untagged=ether24,sfp-sfpplus2 vlan-ids=4000
#-------------------------------------------------------
# Nastavíme IP adresu
#-------------------------------------------------------
/ip address
add address=192.168.1.2/24 interface=bridge1 network=192.168.1.0
#-------------------------------------------------------
# Nakonec aktivujeme samotné VLANy
#-------------------------------------------------------
/interface bridge set bridge1 vlan-filtering=yes
A jak to vypadá z pohledu GUI? Vše je opět vidět v menu Bridge, rozkliknutím jednotlivých VLAN ID vidíte porty které jsou tagged i které jsou untagged a zároveň i porty, které jsou aktivní. Vpravo je vidět aktivace samotného režimu VLAN (VLAN Filtering) a PVID pro Bridge1:
Obecně doporučuji začínat vždy s čistým zařízením, nepoužívat výchozí konfiguraci, základem je mít WinBox.
Další informace najdete na MKT wiki: https://wiki.mikrotik.com/wiki/Manual:Interface/Bridge
Závěr
V příloze najdete ukázkovou konfiguraci switche A, kterou stačí nahrát do switche (drag&drop do okna "Files" - pokud je v něm složka "flash", tak rovnou do ní) a pomocí příkazu v konzoli naimportujte:
/import flash/pnet.rsc
Pokud nemáte soubor ve flash, použijte:
/import pnet.rsc
Pro jistotu doporučuji po každém nahrání ještě restart zařízení. Switch bude dostupný jen na portech, které jsou ve VLAN10 (tam, kam je přes PVID zařazen samotný bridge, viz direktiva, kterou jsme bridge1 vytvořili).
Doufám, že se vám můj článek líbil a že informace z něj někdy použijete.
P.S.: omluva na závěr, až nyní jsem si všiml, že mám na obrázku switchů obráceně pořadí portů, port1 je fyzicky umístěn v dolní řadě (naznačen je barevně nahoře, jako trunk) - myslím ale, že to na výsledku až tak moc nemění.