Konfigurację VLAN-ów zaczynamy od urządzenia, które będzie w stanie powiązać usługę DHCP z numerem sieci wirtualnej z zakresu od 1 do 4095 tzw. VID (VLAN ID) wg. standardu 802.1q. Siłą rzeczy będzie to router. Zaczynamy w ramach rozgrzewki od resetu systemu do ustawień fabrycznych:
/system reset-configuration no-defaults==no
Po restarcie zmieniamy nazwę routera:
/system identity set name=bit-gw-1
Tworzymy bridge, ale bez przypisywania portów. PVID o numerze 170 to numer sieci VLAN służący zarządzaniu:
/interface bridge add name=bridge-LAN protocol-mode=none pvid=170 vlan-filtering=no
Dodajemy listę interfejsów:
/interface list add name=WAN
/interface list add name=LAN
Do stworzonych grup dodajemy interfejsy (małe i duże litery w UNIX-owych systemach to dwa różne znaki):
/interface list member add list=LAN interface=bridge-LAN
/interface list member add list=WAN interface=ether1
Dla bridge-LAN nadajemy adresacje IP łącznie z serwerem DHCP dla sieci 10.10.70.0/24. Choć na koniec ją wyłączę to na etapie wstępnej konfiguracji jest to wygodne (zabezpieczenie sobie pleców na wypadek błędu konfiguracyjnego również). Chyba, że mamy przełącznik niezarządzalny to przy powyższej konfiguracji zostanie przydzielony adres IP z sieci o ID=1 dla urzadzeń podłączonych do ether6. Przełącznik, który w dalszej części będziemy programować pakietów tej podsieci nie przeniesie, a dokładnie port TRUNK. Dlatego podłączenie do Port8 switcha urządzeń nie przydzieli adresu z zakresu DHCP bridge-LAN choć sam router to robi.
/ip address add address=10.10.70.1/24 interface=bridge-LAN
/ip pool add name=dhcp_pool_70 ranges=10.10.70.101-10.10.70.254/ip dhcp-server network add address=10.10.70.0/24 gateway=10.10
.70.1 dns-server=10.10.70.1
/ip dhcp-server add name=dhcp_70 interface=bridge-LAN lease-tim
e=24:30 address-pool=dhcp_pool_70
Konfigurujemy interfejs ether1, jako dynamicznie ustawiany WAN:
/ip dhcp-client add disabled=no interface=ether1
Dodajemy serwery DNS-y provider:
/ip dns set servers=1.1.1.1,8.8.8.8,8.8.4.4
Tworzymy maskaradę regułą NAT:
/ip firewall nat add action=masquerade chain=srcnat out-interface=WAN
W końcu tworzymy VLAN-y:
/interface vlan add interface=bridge-LAN name=vlan170 vlan-id=170
comment=MANAGEMENT
Na zasadzie analogii dodajemy kolejne VLAN-y w ilości nam niezbędnej.
/interface vlan add interface=bridge-LAN name=vlan174 vlan-id=174 comment=WIFI
Przypisujemy dla poszczególnych wirtualnych sieci adres IP jego wirtualnego interfejsu routera:
/ip address add address=10.10.174.1/24 interface=vlan174 network=10.10.174.0
Tworzymy zakresy adresów podsieci IP dla poszczególnych VLAN-ów, którymi będzie zarządzał serwer DHCP:
/ip pool add name=dhcp_pool_174 ranges=10.10.174.2-10.10.174.254
Informujemy serwer DHCP o adresie IP bramy dla poszczególnych sieci VLAN:
/ip dhcp-server network add address=10.10.174.0/24 gateway=10.10.174.1 dns-server=10.10.174.1
Składamy poszczególne elementy konfiguracyjne serwera DHCP dla poszczególnych sieci VLAN:
/ip dhcp-server add address-pool=dhcp_pool_174 disabled=no interface=vlan174 name=dhcp_174 lease-time=24:30
Na chwilę się zatrzymam w tym miejscu by wytłumaczyć co zrobiliśmy. Skonfigurowaliśmy łącze zewnętrzne, jako klient DHCP dostawcy internetu. Dodaliśmy do naszej usługi DHCP client statyczne rozwiązywania nazw na zewnętrzne serwery DNS. Stworzyliśmy zalążek bridg-a by móc zacząć tworzyć VLAN-y, które wymagają podania interfejsu. W tym przypadku powyżej właśnie chodzi o wskazanie bridga-LAN. Oczywiście można to zrobić bezpośrednio na fizycznych interfejsach routera, np. ether2, ether3 itd. Jest to szybsze podejście lecz niestety nie tylko mniej uniwersalne, ale co najważniejsze ogranicza to w późniejszym czasie dalsze możliwości konfiguracyjne VLAN-ów, np. filtrowania pakietów po VID. Ogólnie mądrzejsi po coś wymyślili mosty podobnie jak Bill Gates skróty, a sztuką jest uczyć na cudzych błędach, a nie własnych :-(. Kiedy mamy VLAN w opcji INTERFACES -> VLAN i przypisane do nich serwery DHCP to wracamy do konfiguracji bridge. Będzie on zarządzał VLAN-ami czyli także całą naszą infrastrukturą sieciową. Ma to niestety ciemną stronę mocy, gdyż jego awaria z takich czy innych przyczyn rozkłada nam firmę na łopatki! Świat pędzi do przodu lub jak kto woli urządzeń przybywa w sieci i wybór większego nie mamy. Zakładam, że ether6 oraz ether7 będą wpięte w bridze-LAN. Dodatkowo port ether6 będzie łączył router CCR1009 z programowalnym przełącznikiem MIKROTIKA serii CSS610 na porcie Port1 lub Port2, a więc będzie w tzw. trybie TRUNK, czyli będzie przekazywał pakiety z określonymi PVID oczekując, że urządzenie do niego podłączone jest w stanie je dalej rozdysponować. Chcę także bym mógł podłączyć do portu ether7 router-a urządzenie, które nie obsługuje VID (laptop) by móc zarządzać z poziomu VLAN170 (MANAGEMENT). Pomocne w wykonaniu tego będą dwie opcje obecne w zakładce VLANs okna Bridge. Jest to TAGGED i UNTAGGED. Tłumacze je z punktu widzenia portu w urządzeniu aktywnym, które raz spodziewa się pakietów znakowanych numerem VLAN ID (zarządzalny przełącznik), a w drugim przypadku normalnych, czyli nieoznaczonych wysłanych, np z laptopa. Dlatego należy poinformować bridge, że gniazdo ether7 ma obsługiwać pakiety nieoznaczone VLAN170 i co za tym idzie dodawać do nich VID tak by można je później już jako TAGGED przekazać je dalej do bridge-LAN i urządzeniom podłączonym do ether6 lub odwrotnie. Jeśli chodzi o VLAN171...VLAN174 tu sytuacja teoretycznie jest prostsza, gdyż spodziewamy się, że do ether6 będzie podłączone urządzenie(a), które wysyła już znakowane pakiety TAGGET. Więc informujemy bridge-LAN i port ether6 przy konfiguracji poszczególnych VLAN-ów 171...174, że taka sytuacja ma miejsce. Przystępuje więc do powtórzenie konfiguracji VLAN-ów tym razem nie na poziomie interfejsów, a bridge:
/interface/bridge vlan add bridge=bridge-LAN tagged=bridge-LAN,ether6 untagged=ether7 vlan-ids=170
oraz w odmienny nieco sposób pozostałe VLAN-y (171,172,173,174):
/interface/bridge vlan add bridge=bridge-LAN tagged=bridge-LAN,ether6 vlan-ids=174
Zostało nam na bridge-LAN dodanie portów ether6 i ether7 oraz zmuszenie portu ether7 do znakowania pakietów VID=170 oraz odrzucania pakietów nie pasujących do tablicy VLANs już na wejściu ich bridga-LAN, a nie wyjściu z niego Opcja ingress-filtering wpływa więc pozytywnie nie tylko na wydajność CPU, ale i bezpieczeństwo.
/interface bridge port add bridge=bridge-LAN interface=ether6 ingress-filtering=yes
/interface bridge port add bridge=bridge-LAN interface=ether7 pvid=170 ingress-filtering=yes
oraz włączenie w trybie Safe Mode filtrowanie pakietów VLAN na bridge. Czyli przekazywanie pakietów VID o numerach 170...174:
/interface bridge set bridge-LAN vlan-filtering=yes ingress-filtering=yes
Jeśli teraz podłączymy laptopa do portu ether7 to zostanie przydzielony nam adres sieci dla VLAN-a MANAGERE wraz z dostęp do internetu:
Skoro nie straciliśmy kontaktu z routerem możemy tak, jak wcześniej zapowiadałem wyłączyć sieć podstawową bridge-LAN 10.10.70.0/24 następującymi komendami:
/ip dhcp-server set dhcp_70 disabled=yes
/ip address set disabled=yes interface=bridge-LAN network=10.10.70.0 address=10.10.70.1/24 numbers=0
Proszę nie być zdziwionym, że jeśli teraz podłączymy komputer do portu ether6 w routerze oraz przełączniku Port1 lub Port2 (czytaj założenia poniżej) to pocałujemy klamkę:
Pozostał do skonfigurowania przełącznik Mikrotik CS610-8G-2S+IN. Dwa pierwsze porty (Port1 i Port2) przeznaczam raz na połączenie z routerem Mikrotik CCR1009-7G-1C-1S+ (ether1) dwa na połączenie z kolejnym zarządzalnym przełącznikiem. Wiec muszę je oprogramować tak by przełącznik widział, że będą fruwać na tych portach jedynie pakiety oznaczone (TAGGED) i będą one miały różne VID, czyli oznaczyć go tzw. opcją TRUNK Następne porty (Port3...Port6) przełącznika będą miały na sztywno przyporządkowane poszczególne VLAN170...VLAN174 w trybie UNTAGGED, czyli zakładamy, że będą do nich podłączone urządzenia końcowe generujące pakiety bez VID-a.
Przypisujemy przełącznik do sieci VLAN 170 (MANAGEMENT):
Mamy działające VLAN-y (170...174), ale byłyby one bez sensu bez izolacji między sobą. Uzyskamy to tworząc reguły na tzw. FIREWALL-u. Zanim to jednak uczynię jeśli będziemy chcieli kolejkować pakiety (QoS) to ustawiamy opcje use-ip-firewall (priorytet sieci VLAN to 3 bitowe pole PCP) na bridge-LAN, że ma się do nich stosować:
/interface bridge settings set use-ip-firewall=yes use-ip-firewall-for-vlan=yes allow-fast-path=yes
Dodajemy ogólną regułę podtrzymującą już nawiązane połączenie i równoległe względem nich, np. dla protokołu ftp. Bez niej po w ostatniej regule po zablokowaniu wszystkiego będzie wszystko blokowane mimo, że nawiązanie nowego połączenia zakończyło się sukcesem.
/ip firewall filter add chain=forward connection-state=established,related action=accep
t
Reguły dające dostęp sieci MANAGEMENT (vlan170) do pozostałych sieci VLAN (vlan171...vlan174):
/ip firewall filter add chain=forward src-address=10.10.170.0/24 dst-address=10.10.171.0/24 connection-state=new,established,related action=accept
/ip firewall filter add chain=forward src-address=10.10.170.0/24 dst-address=10.10.172.0/24 connection-state=new,established,related action=accept
/ip firewall filter add chain=forward src-address=10.10.170.0/24 dst-address=10.10.173.0/24 connection-state=new,established,related action=accept
/ip firewall filter add chain=forward src-address=10.10.170.0/24 dst-address=10.10.174.0/24 connection-state=new,established,related action=accept
Z drugiej strony blokujemy dostęp do sieci MANAGEMENT z pozostałych sieci VLAN (vlan171...vlan174):
/ip firewall filter add chain=forward src-address=10.10.171.0/24 dst-address=10.10.170.0/24 action=drop
connection-state=new
/ip firewall filter add chain=forward src-address=10.10.172.0/24 dst-address=10.10.170.0/24 action=drop
connection-state=new
/ip firewall filter add chain=forward src-address=10.10.173.0/24 dst-address=10.10.170.0/24 action=drop connection-state=new
/ip firewall filter add chain=forward src-address=10.10.174.0/24 dst-address=10.10.170.0/24 action=drop connection-state=new
Zanim zablokujemy całkowicie pozostały ruch powinniśmy jeszcze zdecydować która z sieci może mieć dostęp do pozostałych oraz do internetu. Jeśli założymy, że wszystkie VLAN-y mają mieć dostęp na zewnątrz to wystarczy:
/ip firewall filter add chain=forward out-interface-list=WAN action=accept
Jeśli chcemy by sieć vlan171 oraz vlan172 miały do siebie nawzajem dostęp (established, related jest niekonieczne):
/ip firewall filter add chain=forward src-address=10.10.171.0/24 dst-address=10.10.172.0/24 connection-state=established,related,new action=accept
/ip firewall filter add chain=forward src-address=10.10.172.0/24 dst-address=10.10.171.0/24 connection-state=established,related,new action=accept
I na koniec zgodnie z wcześniejszą zapowiedzią blokujemy pozostały ruch FORWARD jedną regułką, a więc również między sieciami vlan171 i vlan173, vlan174 oraz vlan172 i vlan173, vlan174, a także między vlan173 i vlan174 (poniżej). Przy sprawdzaniu konfiguracji proszę pamiętać, że najnowsze systemy Microsoft na dzień dzisiejszy standardowo blokują protokół ICMP (ping) dla połączeń przychodzących i należy zrobić wyjątek w zaporze ogniowej by nie tracić czasu.
/ip firewall filter add chain=forward action=drop
By zapobiec spowolnieniu działania sieci w środowisku wielu VLAN-ów proponuje dla interfejsu ether6 i ether7 włączyć ochronę przed pętlami w sieci tzw. LOOP PROTECT:
/interface ethernet set ether6 loop-protect=on
/interface ethernet set ether7 loop-protect=on
Pozostaje jeszcze wprowadzić reguły firewalla dla WAN-a, ale to już w następnym artykule ( MIKROTIK VLAN + FIREWALL ). I to by było na tyle motyle. Powodzenia.
Opracowane na podstawie:
- Mikrotik Academy serwis dla użytkowników systemów Mikrotik
https://mikrotikacademy.pl/konfiguracja-vlan/ - Mikrotik od Zera - Konfiguracja VLAN #08 https://www.youtube.com/watch?v=wy3sAVzKfog
- Wydzielenie i separacja podsieci na Mikrotiku, sposoby na ograniczenie dostępu od wewnątrz https://www.youtube.com/watch?v=M8CyYuR7IH4
- Strona domowa producenta Mikrotika https://help.mikrotik.com/docs/display/ROS/Bridge+VLAN+Table