Konfiguracja switcha i jego podział na kilka VLANów

Każdy router ma w swoim wyposażeniu switch, czyli przełącznik umożliwiający rozdzielenie sygnału na kilka portów i podłączenie w ten sposób przy pomocy przewodu więcej komputerów niż by to miało miejsce w przypadku posiadania tylko jednego gniazda rj-45. Na oryginalnym firmware zwykle nie mamy możliwości dodatkowej konfiguracji switcha, a ta co jest, oferuje nam jedynie jeden port WAN i kilka portów dla podłączenia komputerów w sieci lokalnej. Jeśli jednak pokusilibyśmy się o wgranie OpenWRT na nasz router, będziemy mieli możliwość zarządzania konfiguracją switcha i tworzyć w ten sposób dowolne konfiguracje portów, np. możemy utworzyć kilka portów WAN, co się może przydać do bardziej zaawansowanych konfiguracji sieciowych, wliczając w to np. failover łącza czy loadbalancing w przypadku gdy posiadamy kilku IPS i chcemy wykorzystać łącze oferowane przez te podmioty w pełni.
Informacji na temat domyślnej konfiguracji przełącznika możemy doszukać się wpisując w terminalu poniższe dwa polecenia:

root@the-mountain:~# swconfig list
Found: switch0 - ag71xx-mdio.0

oraz:

root@the-mountain:~# swconfig dev switch0 show
Global attributes:
		enable_vlan: 1
		enable_mirror_rx: 0
		enable_mirror_tx: 0
		mirror_monitor_port: 0
		mirror_source_port: 0
Port 0:
		mib: Port 0 MIB counters
		...
		pvid: 1
		link: port:0 link:up speed:1000baseT full-duplex txflow rxflow
Port 1:
		mib: Port 1 MIB counters
		...
		pvid: 2
		link: port:1 link:up speed:1000baseT full-duplex auto
Port 2:
		mib: Port 2 MIB counters
		...
		pvid: 1
		link: port:2 link:down
Port 3:
		mib: Port 3 MIB counters
		...
		pvid: 1
		link: port:3 link:up speed:1000baseT full-duplex auto
Port 4:
		mib: Port 4 MIB counters
		...
		pvid: 1
		link: port:4 link:down
Port 5:
		mib: Port 5 MIB counters
		...
		pvid: 1
		link: port:5 link:down
Port 6:
		mib: Port 6 MIB counters
		...
		pvid: 2
		link: port:6 link:up speed:1000baseT full-duplex txflow rxflow
VLAN 1:
		vid: 1
		ports: 0 2 3 4 5
VLAN 2:
		vid: 2
		ports: 1 6

Z powyższego logu wynika, że router Archer C7 v2 ma swojego switcha domyślnie podzielonego na dwa VLANy. Poniżej jest zaś fotka tego routera pokazująca panel tylni urządzenia:

Port oznaczony na niebiesko to VLAN2 (WAN), z kolei te oznaczone na pomarańczowo, to VLAN1 (LAN).

Na wiki OpenWRT można znaleźć trochę pożytecznych informacji na temat samej konfiguracji switcha jak i jego portów i tak dla przykładu, powyższy router ma rozpisane porty w następujący sposób: 0 eth1, 1 WAN , 2 LAN1 , 3 LAN2 , 4 LAN3 , 5 LAN4 , 6 eth0 . Z tym, że na panelu jest 5 gniazdek, a nie 7. Jeśli się przyjrzymy nieco uważniej to porty od LAN (te pomarańczowe) mają dodatkowy numerek -- 0, podczas gdy port WAN ma przypisaną 6:

VLAN 1:
		vid: 1
		ports: 0 2 3 4 5
VLAN 2:
		vid: 2
		ports: 1 6

Oba te numerki odpowiadają interfejsom routera, które są widoczne w systemie, np. przy wydawaniu polecenia ifconfig:

root@the-mountain:~# ifconfig
...
eth0      Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FF
...
eth1      Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FE
...

Zatem wiemy, który z tych dwóch interfejsów będzie obsługiwał połączenie z internetem, a który sieć lokalną. Z reguły tylko interfejs WAN będzie miał przypisany adres IP, bo interfejs LAN jest zwykle spięty mostem (bridge) z interfejsem bezprzewodowym WLAN w celu przypisania tym dwóm fizycznym interfejsom jednego adresu IP i temu w systemie mamy dodatkowo interfejs wirtualny br-lan i to on dostaje adres IP.

Konfiguracja

Konfiguracja switcha obywa się przez plik /etc/config/network i to jakie wpisy tam zastaniemy zależy w dużej mierze od modelu routera i zastosowanego w nim przełącznika. W tym przypadku domyślna konfiguracja wygląda następująco:

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'
config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0 2 3 4 5'
config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '1 6'

Blok config switch odpowiada za konfigurację podstawowych parametrów przełącznika. Mamy tam opcję enable_vlan , która umożliwia grupowania portów, tak by uzyskać różne interfejsy w systemie i móc na ich podstawie odpowiednio zarządzać ruchem, który przez ten switch przechodzi. Sekcje switch_vlan konfigurują VLANy i jak wspomniałem wyżej, domyślnie w tym routerze mamy dwa, oznaczone odpowiednio 1 i 2 przy pomocy opcji vlan . Trzeba pamiętać o tym, że na podstawie opcji vlan interfejsy sieciowe będą odpowiednio nazywane w przypadku gdy będziemy chcieli zrezygnować z domyślnej konfiguracji switcha. W przypadku opcji ports czasem możemy się spotkać z literką t dopisaną do portu, np. 5t, 0t, itp. i jeśli widzimy ją przy jakimś porcie, pakiety wychodzące z tego portu będą tagowane odpowiednim numerem vid , który możemy odczytać z swconfig dev switch0 show . W tym przypadku pakiety nie są tagowane.

Dwa porty WAN

Załóżmy teraz, że chcemy aby nasz router posiadał dwa porty WAN ale domyślnie posiada tylko jeden. W takim przypadku trzeba by wyodrębnić jeden port z tych oznaczonych na pomarańczowo (na obrazku wyżej) i zrobić z niego osobny VLAN. Porty LAN są spięte z portem 0 i mają interfejs eth1 . Jeśli podzielimy ten interfejs na dwa VLANy (lub więcej), ten interfejs również ulegnie zmianie na eth1.x , gdzie x to numer określony w opcji vlan w pliku /etc/config/network w konfiguracji switcha. By wyodrębnić port i zrobić z niego drugi WAN, przerabiamy nieco konfigurację switcha do poniższej postaci:

config switch
		option name 'switch0'
		option reset '1'
		option enable_vlan '1'
config switch_vlan
		option device 'switch0'
		option vlan '1'
		option ports '0t 3 4 5'
config switch_vlan
		option device 'switch0'
		option vlan '2'
		option ports '1 6'
config switch_vlan
		option device 'switch0'
		option vlan '3'
		option ports '0t 2'

Mamy utworzoną dodatkową sekcję switch_vlan o numerze vid 3 (vlan '3') , w której to widnieją dwa porty -- 0 i 2. Ten port 2 został usunięty z VLANu 1 . W ten sposób mamy 3 VLANy, z których dwa dzielą jeden interfejs i ruch z tych dwóch VLANów trzeba otagować, tak by system wiedział, z którego VLANu pakiet przeszedł, stąd 0t . Tak otagowane pakiety będą miały numerki 1 i 3, w zależności od tego, z którego VLANu pochodzą i tylko ten VLAN będzie w stanie odebrać pakiety, których numerek wskazuje odpowiednio 1 lub 3. W ten sposób system stworzy dwa dodatkowe interfejsy wirtualne eth1.1 oraz eth1.3 i to one będą brane pod uwagę przy dalszej konfiguracji, zatem trzeba zmienić nieco ustawienia sieci na routerze.
W tym przypadku jeden z tych VLANów, ten z większa ilością portów, będzie obsługiwał sieć lokalną zatem, musimy przepisać odpowiedni blok w pliku /etc/config/network :

config interface 'lan'
#       option ifname 'eth1'
		option ifname 'eth1.1'
...

Uległa zmianie nazwa interfejsu LAN.
Dodatkowo musimy dopisać nowy blok z konfiguracją dla interfejsu eth1.3 :

config interface 'wan3'
	option ifname 'eth1.3'
	option proto 'dhcp'

W pliku /etc/config/dhcp definiujemy, że nie chcemy aby dnsmasq interesował się nowym portem, jako, że jest to dodatkowy interfejs WAN i dopisujemy tam poniższy blok:

config dhcp 'wan3'
	option interface 'wan3'
	option ignore '1'

Po zresetowaniu routera, w systemie powinny być widoczne dodatkowe interfejsy:

...
eth0      Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FF
...
eth1      Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FE
...
eth1.1    Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FE
...
eth1.3    Link encap:Ethernet  HWaddr C4:6E:1F:95:EF:FE
...

Jeśli się przyjrzymy adresom MAC jakie widnieją przy interfejsach eth1, eth1.1 i eth1.3 , zauważymy, że są one takie same. Jako, że w sieci nie mogą się znajdować dwa urządzenia z takim samym adresem MAC, trzeba zmienić MACa interfejsowi eth1.3 . Interfejs eth1 nas nie interesuje, bo nie będziemy już na nim więcej operować. By zmienić MAC, edytujemy plik /etc/config/network i w sekcji dla nowego interfejsu dodajemy poniższą linijkę :

config interface 'wan3'
...
	   option macaddr 'E8:94:F6:68:80:F1'

MAC wybieramy sobie dowolny.
Musimy także skonfigurować firewall. Jako, że ja sobie stworzyłem własny wcześniej skrypt iptables, jedyne co muszę dodać to poniższa linijka:

iptables -t nat -A POSTROUTING -o eth1.3 -s 192.168.1.0/24 -j MASQUERADE

Tworzenie skryptu iptables zostało dokładnie opisane w tym wątku.