Table of Contents
O urządzeniach MikroTik
MikroTik jest łotewską firmą (i marką) produkującą sprzęt sieciowy w segmencie od budżetowego do sprzętu dla małych/średnich firm i małych/średnich usługodawców internetowych. Oprogramowanie sprzętu firmy MikroTik, RouterOS, wyróżnia się szerokim zakresem funkcji przy względnie łatwej i dość dobrze udokumentowanej konfiguracji.
Na laboratoriach część zajęć (poza bieżącymi, sieci bezprzewodowe i kawałek
zajęć z VLANów) będzie używać hAP ax².
Pracę na oprogramowaniu RouterOS można ćwiczyć używając jego
darmowej wersji dla wirtualnych urządzeń,
np. korzystając z programu GNS3
do łączenia kilku wirtualnych urządzeń w sieć.
Narzędzia do konfiguracji
Urządzenia MikroTik można konfigurować używając:
- połączenia SSH lub portu szeregowego (pozwala tylko na konfigurację w trybie tekstowym),
- łącząc się przeglądarką internetową na adres IP urządzenia do interfejsu webowego WebFig,
- aplikacji WinBox, która potrafi połączyć się do podanego IP, lub, używając adresów rozgłoszeniowych do komunikacji, wykryć bezpośrednio podłączone urządzenia i dalej używając komunikacji rozgłoszeniowej konfigurować urządzenie nawet bez adresu IP na konfigurowanym urządzeniu.
[ekstra] Poruszanie się po konsoli
Początkowa konfiguracja, trwałość
W startowej konfiguracji
MikroTiki mają adres 192.168.88.1/24 na wybranych
interfejsach przewodowych (używane podczas laboratoriów hAP ax² mają ten adres
na ether1, inaczej niż w fabrycznej konfiguracji).
Starsze urządzenia nie mają w początkowej konfiguracji haseł, nowe mają hasła
nieczytelnie wydrukowane na nalepce (te w laboratorach mają ustawione puste
hasła).
Każda zmiana konfiguracji jest automatycznie zapisywana.
Po skończeniu laboratoriów trzeba zresetować konfigurację
Proszę NIE ustawiać haseł na sprzęcie laboratoryjnym:
Resetowanie konfiguracji:
Ustawianie adresów i tras statycznych na urządzeniach MikroTik
Lista interfejsów jest widoczna z poziomu /interface.
Przykłady:
konsola
[admin@R1] > /interface print Flags: X - DISABLED; R - RUNNING Columns: NAME, TYPE, ACTUAL-MTU, MAX-L2MTU, MAC-ADDRESS # NAME TYPE ACTUAL-MTU MAX-L2MTU MAC-ADDRESS 0 R ether1 ether 1500 0C:08:4F:4C:00:00 1 ether2 ether 1500 0C:08:4F:4C:00:01 2 R ether3 ether 1500 0C:08:4F:4C:00:02 3 ether4 ether 1500 0C:08:4F:4C:00:03 4 ether5 ether 1500 0C:08:4F:4C:00:04 5 R lo loopback 65536 00:00:00:00:00:00 6 X wifi1 wifi 1500 2290 0C:08:4F:4C:00:05 7 X wifi2 wifi 1500 2290 0C:08:4F:4C:00:06
Zauważ że flagi pokazują czy interfejs jest włączony (wyłączone mają X)
i czy nawiązał połączenie na warstwie łącza danych (wyświetla R).
Adresy IP
Konfiguracja adresów IP jest dostępna z /ip/address oraz /ipv6/address.
Przykłady:
konsola
[admin@R1] /ip/address> add address=192.168.0.21/30 interface=ether2 [admin@R1] /ip/address> a a=10.8.1.1/24 i=ether3 [admin@R1] /ip/address> print Columns: ADDRESS, NETWORK, INTERFACE, VRF # ADDRESS NETWORK INTERFACE VRF 0 10.8.0.1/24 10.8.0.0 ether1 main 1 192.168.0.21/30 192.168.0.20 ether2 main 2 10.8.1.1/24 10.8.1.0 ether3 main [admin@R1] /ip/address> print detail 0 address=10.8.0.1/24 network=10.8.0.0 interface=ether1 actual-interface=ether1 vrf=main 1 address=192.168.0.21/30 network=192.168.0.20 interface=ether2 actual-interface=ether2 vrf=main 2 address=10.8.1.1/24 network=10.8.1.0 interface=ether3 actual-interface=ether3 vrf=main
ping i traceroute
Te narzędzia są dostępne jako /tool/ping i /tool/traceroute,
przy czym w trybach graficznych są w kategorii Tools.
Zauważ że /tool/traceroute działa podobnie jak Linuksowy mtr – ponawia
badanie trasy aż nie zostanie zatrzymany.
Przykłady:
konsola
[admin@R1] > /tool/traceroute 10.0.0.254 Columns: ADDRESS, LOSS, SENT, LAST, AVG, BEST, WORST, STD-DEV # ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV 0 10.8.0.10 0% 12 0.5ms 0.7 0.1 1 0.3 1 100% 12 timeout 2 10.0.1.1 0% 11 1.5ms 1.4 0.7 2 0.3 3 10.0.0.254 0% 11 19.2ms 19.1 18.2 20.5 0.6 [admin@R1] > /ping 10.0.1.9 SEQ HOST SIZE TTL TIME STATUS 0 10.0.1.9 56 63 745us 1 10.0.1.9 56 63 1ms305us 2 10.0.1.9 56 63 1ms520us sent=3 received=3 packet-loss=0% min-rtt=745us avg-rtt=1ms190us max-rtt=1ms520us [admin@R1] > /tool/traceroute count=3 address=10.0.0.254 Columns: ADDRESS, LOSS, SENT, LAST, AVG, BEST, WORST, STD-DEV # ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV 0 10.8.0.10 0% 3 0.7ms 0.7 0.4 1.1 0.3 1 100% 3 timeout 2 10.0.1.1 0% 3 1.3ms 1.1 0.9 1.3 0.2 3 10.0.0.254 0% 3 18.2ms 18.7 18.2 19.1 0.4 [admin@R1] > /ping interval=0.1 count=4 size=1000 10.0.1.9 SEQ HOST SIZE TTL TIME STATUS 0 10.0.1.9 1000 63 1ms655us 1 10.0.1.9 1000 63 1ms373us 2 10.0.1.9 1000 63 1ms375us 3 10.0.1.9 1000 63 1ms646us sent=4 received=4 packet-loss=0% min-rtt=1ms373us avg-rtt=1ms512us max-rtt=1ms655usPing można używać jako
/tool/ping lub /ping.
Używając autouzupełniania (klawisza Tab) możesz wyświetlić jakie parametry można podać tym narzędziom.
Trasy
Tablica tras jest podzielona na tablicę dla IPv4 (/ip/route) oraz dla IPv6
(/ipv6/route).
Z tych poziomów można dodawać trasy statyczne.
RouterOS nie ma osobnego słowa kluczowego na trasę domyślną, dodając taką trasę
należy podać sieć docelową 0.0.0.0/0 lub ::/0.
Metryka (koszt) trasy jest określana w sprzęcie MikroTik jako distance
i oczywiście z pasujących tras o tej samej masce sieci docelowej wybierana jest
trasa o najniższym koszcie.
Przykłady:
konsola
[admin@R1] /ip/route> print Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE DST-ADDRESS GATEWAY ROUTING-TABLE DISTANCE DAc 10.8.0.0/24 ether1 main 0 DAc 10.8.1.0/24 ether3 main 0 DAc 192.168.0.20/30 wifi1 main 0 [admin@R1] /ip/route> add dst-address=0.0.0.0/0 gateway=10.8.0.10 [admin@R1] /ip/route> add dst-address=192.168.1.0/24 gateway=10.8.1.2 [admin@R1] /ip/route> add dst-address=192.168.1.0/24 gateway=192.168.0.22 distance=10 [admin@R1] /ip/route> print Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT, s - STATIC Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE # DST-ADDRESS GATEWAY ROUTING-TABLE DISTANCE 0 As 0.0.0.0/0 10.8.0.10 main 1 DAc 10.8.0.0/24 ether1 main 0 DAc 10.8.1.0/24 ether3 main 0 DAc 192.168.0.20/30 wifi1 main 0 1 As 192.168.1.0/24 10.8.1.2 main 1 2 s 192.168.1.0/24 192.168.0.22 main 10 [admin@R1] /ip/route>W konsoli można też wyświetlać pełną tablicę tras z poziomu
/routing/route.
[esktra] Sposoby i protokoły tworzenia tablicy tras
OSPF (Open Shortest Path First)
Wstęp
OSPF to protokół trasowania (czyli tworzenia tablicy tras), do
wewnątrz obszaru autonomicznego (IGP), używający podejścia stanu łącza.
W protokole OSPF routery najpierw wyszukują sąsiednich routerów, a następnie
wymieniają się z nimi informacjami sieci, np. o podsieciach, o adresach IP
routerów.
Na podstawie takich informacji każdy router konstruuje mapę całej sieci i używa
algorytmu Dijkstry dla znajdowania najkrótszych tras do wszystkich znanych
podsieci.
Pojedyncza porcja informacji o sieci w protokole OSPF nazywa się LSA.
OSPF do odróżniania routerów wykorzystuje czterobajtowy identyfikator routera, zwyczajowo zapisywany tak jak adres IPv41). Jeżeli administrator sam nie wybierze identyfikatora routera, zwykle używany jest jeden z adresów IP routera.
Przy użyciu OSPF do wyznaczania tras w dużych sieciach (setki urządzeń) można
podzielić sieć na obszary (ang. areas).
Przy "małych" sieciach używa się tylko obszaru 0.0.0.0.
OSPFv2 działa tylko dla IPv4, OSPFv3 stworzono dla IPv6, ale może przenosić też informacje o IPv42).
[extra] Działanie OSPF
OSPF na urządzeniach MikroTik
Do działania OSPF wymaga oczywiście wcześniejszego poprawnego skonfigurowania połączeń bezpośrednich (czyli podłączenia kabli i nadania adresów IP).
Kolejne kroki konfiguracji OSPF na RouterOS to:
- stworzenie instancji protokołu OSPF (
/routing/ospf/instance), - dodanie obszaru 0.0.0.0 w tej instancji (
/routing/ospf/area), - określenie na których połączeniach mają być wyszukiwani sąsiedzi (
/routing/ospf/interface-template), - określenie które jeszcze sieci/trasy mają być ogłaszane w informacjach o sieci (część ustawień w instancji, część w interfejsach).
Uruchamianie instancji OSPF
Tworząc nową instancję (/routing/ospf/instance) zaleca się ręcznie określić
identyfikator routera.
Identyfikatory muszą być unikalne – protokół będzie działać nieprawidłowo jeżeli
dwa routery będą mieć ten sam identyfikator.
Jeżeli nie poda się identyfikatora ręcznie a na routerze jest jeszcze adres IP
192.168.88.1, to RouterOS może wybrać na identyfikator routera właśnie wartość
192.168.88.1. Jeżeli kilka urządzeń tak zrobi, konfiguracja nie będzie działać!
W trakcie laboratoriów koniecznie ustawiaj identyfikator routera ręcznie.
W ustawieniach instancji można skonfigurować też ogłaszanie informacji o trasach spoza OSPF:
- jeśli parametr
originate-defaultzostanie ustawiony naif-installed, to router będzie ogłaszać swoją trasę domyślą (czyt. będzie podawał siebie jako trasę "do internetu"), - parametr
redistributewskazuje na źródła z których trasy będą ogłaszane po OSPF przez ten router;
przykładowo wartośćstatic,isisbędzie dołączać do wysyłanych przez ten router informacji też informacje że ten router ma każdą3) z dodanych statycznie tras i każdą z tras które poznał używając protokołu IS-IS (tj. konkurencyjnego protokołu trasowania).
Przykłady:
konsola
[admin@R1] /routing/ospf/instance> add name=IPv4 router-id=0.0.0.1 originate-default=if-installed [admin@R1] /routing/ospf/instance> print 0 name="IPv4" version=2 vrf=main router-id=0.0.0.1 originate-default=if-installed [admin@R1] /routing/ospf/instance> set IPv4 redistribute=static [admin@R1] /routing/ospf/instance> print 0 name="IPv4" version=2 vrf=main router-id=0.0.0.1 originate-default=if-installed redistribute=static [admin@R1] /routing/ospf/instance> unset IPv4 originate-default [admin@R1] /routing/ospf/instance> print 0 name="IPv4" version=2 vrf=main router-id=0.0.0.1 redistribute=staticPrzykład pokazuje dodanie instancji i późniejszą zmianę jej ustawień.
Nazwa jest tylko etykietą dla administratora, używaną później do wskazania którego z procesów mają dotyczyć kolejne ustawienia. To czy OSPF będzie trasować IPv4 czy IPv6 zależy od wybranej wersji OSPF.
Tworzenie obszaru i dodawanie interfejsów
W RouterOS trzeba ręcznie stworzyć dla każdej instancji OSPF obszar
(/routing/ospf/area), np. sieci szkieletowej (backbone) o identyfikatorze
0.0.0.0.
Po stworzeniu obszaru trzeba dodać do niego interfejsy. Dodanie interfejsu dodaje do rozsyłanych przez OSPF informacji dane o wszystkich podsieciach z których adresy są na tym interfejsie. (Można też ograniczyć te informacje tylko do wybranych podsieci).
Domyślnie na dodanym do OSPF interfejsie są też wyszukiwaniu sąsiedzi. Jeżeli nie ma na tym interfejsie być nawiązywanych relacji z innymi routerami OSPF, należy4) ustawić ten interfejs jako pasywny (passive).
Dodawanie interfejsów w RouterOS zwykle wykonuje się podając szablon ustawień
(/routing/ospf/interface-template), w którym trzeba wybrać obszar oraz: albo
listę interfejsów, albo listę sieci na których OSPF ma działać. Stworzenie
takiego szablonu dynamicznie będzie dodawać pasujące do niego interfejsy.
Można też dodać ręcznie każdy interfejs osobno, ale jest to niewygodne
i jeśli ręczne dodanie nie jest niezbędne, to jest niezalecane.
Przykłady:
konsola
Konfiguracja na brzegowym routerze (łączącym sieć z "internetem"):
[admin@R1] > /ip/route/add dst-address=0.0.0.0/0 gateway=10.8.0.10 [admin@R1] > /routing/ospf/instance/add name=v4 router-id=0.0.0.1 originate-default=if-installed [admin@R1] > /routing/ospf/area/add area-id=0.0.0.0 instance=v4 name=v4a0 [admin@R1] > /routing/ospf/interface-template/add area=v4a0 interfaces=ether1 passive [admin@R1] > /routing/ospf/interface-template/add area=v4a0 interfaces=ether3
Konfiguracja na innym routerze:
[admin@R3] > /routing/ospf/instance/add name=v4 router-id=0.0.0.3 [admin@R3] > /routing/ospf/area/add area-id=0.0.0.0 instance=v4 name=v4a0 [admin@R3] > /routing/ospf/interface-template/add area=v4a0 interfaces=ether1,ether3
Konfiguracja na routerze który ma trasę statyczną (np. do routera który nie potrafi OSPF):
[admin@R5] > /ip/route/a dst=192.168.0.0/24 gate=10.8.9.8 [admin@R5] > /routing/ospf/inst/a name=v4 router-id=0.0.0.5 redistribute=static [admin@R5] > /routing/ospf/area/a area-id=0.0.0.0 inst=v4 name=v4a0 [admin@R5] > /routing/ospf/interface-template/a ar=v4a0 int=ether1 [admin@R5] > /routing/ospf/interface-template/a ar=v4a0 int=ether2 passive
Te przykładowe konfiguracje używają parametru interface-template/ … interface=… do wyboru interfejsów. Zamiast tego można użyć interface-template/ … network=… i podać zakres adresów IP w którym zawierają się sieci na których ma działać OSPF.
Sprawdzanie działania
Pierwszym krokiem do sprawdzenia czy OSPF został właściwie skonfigurowany jest
sprawdzenie listy interfejsów (/routing/ospf/interface) – powinny na niej
pojawić się interfejsy na których ma działać OSPF.
Kolejny krok sprawdzenia czy wszystko jest OK to sprawdzenie czy zostały
nawiązane relacje z sąsiadami (/routing/ospf/neighbor) – powinny tam być
wymienione wszystkie bezpośrednio połączone routery OSPF.
Dalej należy sprawdzić tablicę tras (/ip/route lub /routing/route/) –
powinny tam być trasy do wszystkich sieci.
W WinBoksie, w widoku tablicy tras z IP / Routes, z prawej strony
nagłówków kolumn jest ikona menu ≡, po kliknięciu na którą można wybrać
pokazywane kolumny.
Warto zaznaczyć OSPF Metric oraz OSPF Type które pokazują koszt
i typ trasy dla tras z protokołu OSPF.
W konsoli, z domyślnych widoków, koszty pokazywane są dopiero w rozwlekłym
/routing/route/print details, ale można zamiast tego ręcznie ustawić widok
tablicy tras z wybranymi parametrami, dodatkowo ograniczając wyniki tylko do tras IPv4 komendą:
/routing/route/print proplist=dst,gate,dist,ospf.m,ospf.ty where afi=ip
Jeżeli brakuje jakichś sieci, to najprościej sprawdzić ustawienia na urządzeniach
które powinny generować informacje o niej. Można też przejrzeć listę LSA
(/routing/ospf/lsa) i sprawdzić czego tam brakuje lub która informacja nie
jest pełna/oczekiwana.
Oczywiście łączność można potwierdzić używając /tool/ping i /tool/traceroute.
Przykłady:
konsola
Diagnostyka z routera ze "środka" sieci:
[admin@R3] > /routing/ospf/interface/print Flags: D - DYNAMIC 0 D interface=ether3 address=10.8.1.3%ether3 area=v4a0 instance-id=0 state=dr-other type=broadcast dr=10.8.1.2 bdr=10.8.1.1 cost=1 priority=128 retransmit-interval=5s transmit-delay=1s hello-interval=10s dead-interval=40s 1 D interface=ether1 address=10.8.3.3%ether1 area=v4a0 instance-id=0 state=dr type=broadcast bdr=10.8.3.6 cost=1 priority=128 retransmit-interval=5s transmit-delay=1s hello-interval=10s dead-interval=40s [admin@R3] > /routing/ospf/neighbor/print Flags: D - DYNAMIC 0 D instance=v4 area=v4a0 interface=ether3 address=10.8.1.1 priority=128 router-id=0.0.0.1 dr=10.8.1.2 bdr=10.8.1.1 state="Full" state-changes=6 adjacency=19m48s timeout=32s 1 D instance=v4 area=v4a0 interface=ether3 address=10.8.1.2 priority=128 router-id=0.0.0.2 dr=10.8.1.2 bdr=10.8.1.1 state="Full" state-changes=6 adjacency=19m48s timeout=32s 2 D instance=v4 area=v4a0 interface=ether1 address=10.8.3.4 priority=128 router-id=0.0.0.4 dr=10.8.3.3 bdr=10.8.3.6 state="Full" state-changes=5 adjacency=18m14s timeout=39s 3 D instance=v4 area=v4a0 interface=ether1 address=10.8.3.5 priority=128 router-id=0.0.0.5 dr=10.8.3.3 bdr=10.8.3.6 state="Full" state-changes=6 adjacency=16m34s timeout=40s 4 D instance=v4 area=v4a0 interface=ether1 address=10.8.3.6 priority=1 router-id=0.0.0.6 dr=10.8.3.3 bdr=10.8.3.6 state="Full" state-changes=6 adjacency=19m9s timeout=36s [admin@R3] > /routing/route/print proplist=dst,gate,dist,ospf.m,ospf.ty where afi=ip Flags: A - ACTIVE; c - CONNECT, o - OSPF; + - ECMP Columns: DST-ADDRESS, GATEWAY, DISTANCE, OSPF.METRIC, OSPF.TYPE DST-ADDRESS GATEWAY DISTANCE OSPF.METRIC OSPF.TYPE Ao 0.0.0.0/0 10.8.1.1%ether3 110 2 ext-type-1 Ao 10.8.0.0/24 10.8.1.1%ether3 110 2 intra Ac 10.8.1.0/24 ether3 0 Ao+ 10.8.2.0/24 10.8.3.4%ether1 110 2 intra Ao+ 10.8.2.0/24 10.8.1.2%ether3 110 2 intra Ac 10.8.3.0/24 ether1 0 Ao 10.8.4.0/22 10.8.3.6%ether1 110 101 intra Ao 10.8.8.0/26 10.8.3.6%ether1 110 201 intra Ao 10.8.9.0/24 10.8.3.5%ether1 110 2 intra Ao 192.168.0.0/24 10.8.3.5%ether1 110 3 ext-type-1
Sama tablica tras z routera brzegowego:
Zrzut pełnej bazy informacji LSA – wynik /routing/ospf/lsa/print
Pamiętaj żeby po skończeniu laboratoriów zresetować konfigurację
[extra] OSPF na Linuksie (i CISCO)
W materiałach do SK z poprzednich lat jest opis konfiguracji OSPF na urządzeniach CISCO; tego samego zestawu poleceń używa też frr pozwalający uruchomić protokół OSPF na Linuksie. Konkurencyjny bird jest ustawiany w pliku konfiguracyjnym.










