Tajemne życie vlanów

Posted on śro 29 wrzesień 2010 in MikroTik

VLANy 802.1Q

VLAN (Virtual LAN) to sposób na grupowanie urządzeń sieciowych – często wpiętych do różnych segmentów sieci – w sieci wirtualne. Żeby wyjaśnić jak mniej więcej to działa kilka zasad ze świata VLANów:
Wszystkie urządzenia w jednym VLANie należy traktować jak podłączone do jednego segmentu sieci
Ramka Ethernet z jednego VLANa nie będzie przekazywana do innego VLANa
Inaczej mówiąc – VLANy to sposób na grupowanie pewnych hostów w jedną logiczną sieć (Virtual LAN) i przy okazji odseparowanie ich od urządzeń należących do innych VLANów. No dobra. Obrazek proszę!

VLAN

Mamy trzy przełączniki i kilka hostów. Zielone należą do VLANa 2, niebieskie do VLANa 1. Same hosty „nie są świadome” istnienia czegoś takiego jak VLAN (ramki pomiędzy hostem a przełącznikiem to najzwyklejsze ramki Ethernet). Są one po prostu wpięte do odpowiednich portów przełącznika. Każdy z portów natomiast przypisany jest do któregoś z VLANów. Jeśli przełącznik otrzyma ramkę np. rozgłoszeniową z portu przypisanego do VLAN 1, jak na przełącznik przystało, przekaże ją na wszystkie porty... ale tylko pod warunkiem, że także należą do VLAN 1. Zasada ta odnosi się także do całego pozostałego ruchu – ramka unicast będzie przekazywana jedynie do hosta znajdującego się w tym samym VLANie.

Sprawa jest prosta jeśli mamy jeden przełącznik. Przypisujemy porty do VLANów i tyle. A co jeśli mamy kilka przełączników, w końcu nasza sieć może obejmować kilka pięter czy budynków?

Po pierwsze na każdym z przełączników musimy mieć zdefiniowany dany VLAN (nawet jeśli nie chcemy przypisać do niego żadnego portu – przełącznik musi wiedzieć, że dany VLAN istnieje by móc go przekazać).

Po drugie połączenia pomiędzy poszczególnymi przełącznikami musimy w specjalny sposób skonfigurować. Tego typu łącza najczęściej nazywa się zgodnie z terminologią Cisco trunkami (lub łączami trunkingowymi – ble). Takie łącze ma możliwość agregowania VLANów, dzięki temu przełączniki na których mamy zdefiniowane 100 VLANów łączymy ze sobą jednym kablem. Sama konfiguracja trunka przebiega różnie w zależności od producenta przełącznika, ale najczęściej sprowadza się do wskazania portu na którym ma działać i ewentualnie które VLANy mają być przez niego przesyłane.

Jak zwykle najciekawsze to to, co dzieje się w środku. Ramka musi być jakoś oznaczona – tak żeby switch, który ją dobierze widział, do którego VLANu należy. W przeszłość producenci urządzeń sieciowych mieli kilka pomysłów jak to zrobić, ale koniec końców, jak w każdej porządnej historii, zwyciężył standard. Panie i Panowie, przed Wami 802.1Q (lub jak kto woli dot1q).

802.1Q definiuje sposób zapisu informacji o VLANie w ramce Ethernetowej. Przełącznik taguje ramkę – dokleja niewielką porcję informacji do nagłówka. Zobaczmy jak taka ramka 802.1Q wygląda:

Zaraz za adresem źródłowym ramki znajduje się 2-bajtowe pole Ethertype -w przypadku 802.1Q ustawiane jest na wartość 0x8100, co oznacza, że przełącznik powinien spodziewać się w następnym polu także 2-bajtowego pola Tag. Samo pole Tag składa się z kolei z trzech „podpól”:
Priority, CFI oraz VLAN ID. Priorytet może być używany w QoS. 1-bitowe pole CFI przyjmuje w zasadzie jedną sensowną wartość: 1 – co oznacza Ethernet. Najważniejszym polem jest VLAN ID – pole będące identyfikatorem VLANa. Wartość jest 12-bajtowa, co daje nam 4096 wartości (tak na prawdę 4094 – 0 i 4096 to wartości specjalne). Na podstawie tego pola przełącznik przypisuje ramkę do danego VLANa.
No dobra. Mamy przełączniki na których odpowiednie porty przypisane są do danych VLANów. Część portów – tych prowadzaących do innych przełączników – skonfigurowaliśmy jako trunki. Jak zapewnić komunikację pomiędzy poszczególnymi VLANami? No cóż, skoro każdy VLAN to osobny segment sieci to będziemy potrzebować jeszcze routera, który nam te VLANy przeroutuje.

Co prawda dzisiaj częściej jest to przełącznik warstwy trzeciej – czyli przełącznik, który ma możliwość routowania – i tu warto nadmienić – routuje z wydajnością przełącznika (dzięki specjalnum układaom ASIC) – jednak w naszych przykładach będzie to nadal router.

OK. Więc nasza prosta sieć z VLANami mogłaby wyglądać tak:

Oczywiście w naszym przykładzie wszystkie poznane do tej pory zasady dotyczące VLANów stosują się także do routera. W pierwszej kolejności należy odpowiednie VLANy skonfigrować na routerze (podobnie jak przełącznik, router musi o nich wiedzieć) – w przypadku routerów, nieco inaczej niż w przypadku switchy, najczęściej definiuje się pseudointerfejs VLAN na interfejsie fizycznym. Po drugie switch wysyłając ramkę do routera musi zamieścić w niej informację o VLANie – otagować ją – w związku z czym podobnie jak w połączeniu pomiędzy dwoma przełącznikami, połączenie do routera musi być trunkiem. Tak na marginesie – konfiguracja powyżej zwyczajowo nazywana jest „routerem na patyku” (router on a stick) ;)

Przykład praktyczny – RouterOS i VLANy

RouterOS jest systemem operacyjnym dla routerów, dlatego też części konfiguracji dostępnej w przełącznikach nie znajdziemy w systemie. Przyjrzyjmy się jak sprawa wygląda.

VLANy konfigurujemy w gałęzi:

[admin@MikroTik] > interface vlan
[admin@MikroTik] /interface vlan> add vlan-id=200 name=VLAN200

... interface=ether1 disabled=no [admin@MikroTik] /interface vlan> [admin@MikroTik] /interface vlan> /ip address add address=10.0.0.1/24 interface=VLAN200

Dodaliśmy pseudointerfejs VLAN do interfejsu ether1. Od tego momentu na tym interfejscie możemy odbierać ramki tagowane z VLAN ID 200. Warto zwrócić uwage, że VLAN adresujemy jak każdy inny interfejs. Dla porządku dodam, że każda ramka wypadająca z interfejsu VLAN500 będzie tagowana.

Ponieważ jest to router nie ma czegoś takiego jak port access, do którego możem przypisać VLAN ale możemy to w dość prosty sposób zasymulować:

[admin@MikroTik] >interface bridge add
[admin@MikroTik] >interface bridge port add interface=VLAN200 bridge=bridge1
[admin@MikroTik] >interface bridge port add interface=ether2 bridge=bridge1
[admin@MikroTik] >

Jeśli dodamy do interfejsu bridge interfejs fizyczny (w przykładzie ether2) oraz interfejs VLAN to ramka wpadając i wypadająca z interfejsu fizycznego będzie nietagowana (port działa jak port access w przełączniku) a ramki wypadające z interfejsu VLAN200 są tagowane w związku z czym „ta strona” bridge'a działa jak trunk. Warto dodać, że VLANy w RouterOS można też stosować na interfejsach bezprzewodowych.

Przykład praktyczny 2 - przełączniki Cisco i RouterOS

Skonfigurujmy nasz prosty przykład - użyjemy przełącznika Catalyst 2960 i routera opartego na RouterOS. VLAN 2 będzie zaadresowany jako 192.168.1.0/24 a VLAN 3 jako 192.168.2.0/24.

Zacznijmy od przełącznika. Potrzebujemy dwóch VLANów do których przypiszemy porty na przełączniku:

Switch(config)# vlan 2
Switch(config-VLAN)#name test-vlan2
Switch(config-VLAN)#vlan 3
Switch(config-VLAN)#name test-vlan3

Utworzyliśmy dwa VLANy, teraz należy przypisać je do portów:

Switch(config)# interface fa 0/1
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 2
Switch(config-if)#interface fa 0/2
Switch(config-if)#switchport mode access
Switch(config-if)#switchport access vlan 3

Teraz zabierzmy się za konfigurację trunka:

Switch(config)#interface fa 0/3
Switch(config-if)# switchport trunk encapsulation dot1q
Switch(config-if)# switchport trunk allowed vlan 2-3
Switch(config-if)# switchport mode trunk

Od tej pory port fa 0/3 działa jako trunk. Tym portem wyjdziemy do routera.

Na koniec pozostaje nam konfiguracja routera:

[admin@MikroTik] >interface vlan add vlan-id=2 name=VLAN2 interface=ether1 disabled=no
[admin@MikroTik] >interface vlan add vlan-id=3 name=VLAN3 interface=ether1 disabled=no
[admin@MikroTik] >ip address add address=192.168.1.1/24 interface=VLAN2
[admin@MikroTik] >ip address add address=192.168.2.1/24 interface=VLAN3
[admin@MikroTik] >

Teraz wystarczy jeszcze skonfigurować odpowiednio hosty i voila!