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.