===== O urządzeniach MikroTik ===== [[https://mikrotik.com/|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 [[https://manual.mikrotik.com/docs/getting-started/routeros-licensing/chr/|darmowej wersji dla wirtualnych urządzeń]], np. korzystając z programu [[https://github.com/GNS3/gns3-gui/releases|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 ==== ++++ Rozwiń | Konsola ma hierarchicznie uporządkowane ustawienia. \\ Po poziomach hierarchii można poruszać się podobnie jak w systemie plików:
[admin@R1] > interface
[admin@R1] /interface> ethernet
[admin@R1] /interface/ethernet> /
[admin@R1] > routing ospf area
[admin@R1] /routing/ospf/area> ..
[admin@R1] /routing/ospf> /ip address
[admin@R1] /ip/address> .. ..
[admin@R1] > /ip/route
[admin@R1] /ip/route> /
[admin@R1] > ip route
[admin@R1] /ip/route>
W konsoli działa autouzupełnianie i podpowiadanie składni (po wciśnięciu //Tab//):
[admin@R1] /ip/dhcp-server>
alert    lease     network   add       disable   enable   find    remove   set
config   matcher   option    comment   edit      export   print   reset    setup
[admin@R1] /ip/dhcp-server> add name=myDhcp interface=
ether1     ether2     ether3     ether4     ether5     wifi1     wifi2
[admin@R1] /ip/dhcp-server> add name=myDhcp interface=
Typowo można wykonywać komendy: * ''print'' (oraz ''print detail'') wyświetla ustawienia (zwykle jako numerowana listę) * ''add …'' dodaje nowe ustawienia * ''remove //N//'' usuwa //N//-te ustawienie (po numerze) lub ustawienie o nazwie //N// * ''set //N// //param//=//val//'' zmienia parametr ze wskazanego ustawienia * ''unset //N// //param//'' usuwa parametr ze wskazanego ustawienia * ''disable //N//'' / ''enable //N//'' wyłącza/włącza ustawienie
[admin@R1] /ip/address> add address=10.0.0.1/24 interface=ether2
[admin@R1] /ip/address> print
# ADDRESS      NETWORK   INTERFACE  VRF
0 10.8.0.1/24  10.8.0.0  ether1     main
1 10.0.0.1/24  10.0.0.0  ether2     main
[admin@R1] /ip/address> set 1 interface=ether4
[admin@R1] /ip/address> remove 1
[admin@R1] /ip/address> ../route print
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT
    DST-ADDRESS  GATEWAY  ROUTING-TABLE  DISTANCE
DAc 10.8.0.0/24  ether1   main                  0
++++ ==== Początkowa konfiguracja, trwałość ==== W [[https://manual.mikrotik.com/docs/getting-started/configuration-management/default-configurations|startowej konfiguracji]] MikroTiki mają adres ''[[http://192.168.88.1/|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: |W trybie graficznym wybieramy "//Cancel//": \\ {{bio-sk:mikrotik_ospf:pass1.png}}|W terminalu używamy skrótu //Ctrl//+//c//: \\ {{bio-sk:mikrotik_ospf:pass2.png}}| Resetowanie konfiguracji: {{bio-sk:mikrotik_ospf:reset-configuration.png}}
[admin@R1] > /system/reset-configuration
Dangerous! Reset anyway? [y/N]:
Y
===== Ustawianie adresów i tras statycznych na urządzeniach MikroTik ===== Lista interfejsów jest widoczna z poziomu ''/interface''. {{bio-sk:mikrotik_ospf:interfaces.png}}
[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''. {{bio-sk:mikrotik_ospf:ip_addresses.png}}
[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. {{bio-sk:mikrotik_ospf:ping_traceroute.png}}
[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=1ms655us
Ping 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. {{bio-sk:mikrotik_ospf:static_routes.png}}
[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 ===== ++++ Rozwiń | Tablica tras może być uzupełniana trasami: * dodanymi ręcznie przez administratora (trasowanie statyczne), * wyznaczonymi przez protokół trasowania (trasowanie dynamiczne). Protokoły trasowania można podzielić ze względu na obszar działania, w odniesieniu do [[https://en.wikipedia.org/wiki/Autonomous_system_(Internet)|obszarów autonomicznych (AS)]]: * [[https://en.wikipedia.org/wiki/Interior_gateway_protocol|wewnętrzne]], IGP - Interior Gateway Protocol, \\ mniej więcej: wyznaczające trasy wewnątrz jednej firmy / organizacji – np. RIP, EIGRP, OSPF, IS-IS, * [[https://en.wikipedia.org/wiki/Exterior_gateway_protocol|zewnętrzne]], EGP - Exterior Gateway Protocol, \\ mniej więcej: wyznaczające trasy w "całym internecie" – obecnie (jedynym) używanym jest BGP. Protokoły trasowania można podzielić ze względu na sposób działania: * [[https://en.wikipedia.org/wiki/Distance-vector_routing_protocol|wektora odległości]] (distance-vector), np. RIP, IGRP; \\ obrazowo działają według następujących reguł: * przy każdej zmianie w tablicy tras wyślij sąsiadom do jakiej sieci i z jakim kosztem sam potrafisz się dostać, * kiedy dostaniesz (łączem //L//) informację że sąsiad //N// umie dostać się do sieci //S// z kosztem //K//, to dodaj do swojej tablicy tras trasę przez //N// do sieci //S// o koszcie "//K// + koszt łącza //L//" (o ile nie masz już trasy o niższy koszcie do tej sieci), takie protokoły wyliczają tylko koszt dotarcia do każdej sieci, a faktycznie w rozproszony sposób wykonują algorytm znajdywania najkrótszych ścieżek [[https://pl.wikipedia.org/wiki/Algorytm_Bellmana-Forda|Bellmana-Forda]],
* [[https://en.wikipedia.org/wiki/Link-state_routing_protocol|stanu łącza]] (link-state), np. OSPF, IS-IS; \\ obrazowo: urządzenia wymieniają się z sąsiadami informacjami o całej topologii sieci, na podstawie tej topologii budują pełną mapę sieci i używając dowolnego algorytmu znajdowania najkrótszej ścieżki (zwykle [[https://pl.wikipedia.org/wiki/Algorytm_Dijkstry|algorytmu Dijkstry]]) wyznaczają trasy * [[https://en.wikipedia.org/wiki/Path-vector_routing_protocol|wektora ścieżki]] (path-vector), np. BGP; \\ urządzenia wymieniają się z sąsiadami informacjami do jakich sieci i jaką trasą potrafią się dostać, \\ z tego wybierają najkorzystniejszą trasę; to podejście eliminuje część wad protokołów wektora odległości \\ i lepiej radzi sobie z dużymi sieciami niż protokoły stanu łącza.
(Więcej na [[https://en.wikipedia.org/wiki/Routing#Topology_distribution]].) ++++ ===== 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 IPv4((Identyfikator routera dla OSPFv3, zwykle używanego do liczenia tras IPv6, dalej ma postać czterobajtowej liczby zapisywanej tak jak adres IPv4.)). 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 IPv4((Uwaga, implementacja OSPF w Mikrotiku tego [[https://forum.mikrotik.com/t/rfc5838-ospfv3-address-families-support/160818/3|nie wspiera]].)). ==== [extra] Działanie OSPF ==== ++++ Rozwiń | === LSA === Pojedyncza jednostka informacji o sieci używana przez OSPF nazywa się //[[http://en.wikipedia.org/wiki/Link-state_advertisement|Link-State Advertisement]]// (LSA). Przykładowo LSA może nieść informację o: * połączeniach wybranego routera OSPF z innymi routerami OSPF, * sieciach IP do których należy router, * trasach spoza OSPF, * trasach z innego obszaru.
Protokół OSPF będzie dążył do przesłania do każdego urządzenia (w obszarze) wszystkich LSA, tak by każde urządzenie miało ten sam zbiór (bazę) informacji o sieci. === Kolejne kroki protokołu === Routery, wymieniając wiadomości //Hello//, nawiązują relację z sąsiadami. Następnie przesyłają wzajemnie w wiadomościach //database descriptions// (//DD//) informacje jakie znają połączenia, routery etc.. Komunikaty DD zawierają tylko identyfikatory wszystkich znanych LSA. Po transferze żądają nieznanych sobie informacji wysyłając komunikat //Link-State Request// (z identyfikatorami tych LSA których nie mają) i otrzymują w odpowiedzi, we wiadomościach //Link-State Update// (LSU), żądane LSA. Po każdej wykrytej zmianie router wysyła komunikat LSU z opisem zmian (nowymi LSA). Komunikat LSU jest rozgłaszany epidemicznie do wszystkich sąsiadów. Żeby zapobiec zalewaniu sieci pakietami protokołu OSPF, w jednej domenie rozgłoszeniowej wybiera się //router desygnowany// (DR) i zapasowy router desygnowany (BDR/DRother) i dopuszcza się tylko komunikację z routera desygnowanego i do (obu) routerów desygnowanych. === Adresy IP używane przez OSPF === OSPF w miarę możliwości (technicznych sieci) używa //IP-multicast//, wykorzystując dwa adresy:
* 224.0.0.5 - wszystkie routery - All OSPF Routers, * 224.0.0.6 - desygnowane routery - All DRouters. === Obszary === Przy konfiguracji OSPF pozwala podzielić sieć na obszary (areas). Wyznaczanie tras w każdym obszarze jest wykonywany osobno, wykorzystując algorytm Dijkstry, między obszarami wymieniane są gotowe trasy. \\ Obszar 0 (zapisywany też jako 0.0.0.0) stanowi szkielet (backbone), wszystkie inne obszary muszą mieć z nim łączność. Router łączący dwa obszary nazywa się //area border router// (ABR). === Więcej … === {{:sk1:ospf.pcap.gz|Przykładowa wymiana pakietów protokołu OSPF}} Więcej o OSPF doczytasz np. na stronie [[http://technet.microsoft.com/en-us/library/cc940481.aspx|microsoftu]] (nawiguj się w menu z lewej strony między podstronami), czy na [[http://en.wikipedia.org/wiki/Open_Shortest_Path_First|wikipedii]]. Dokumentacja [[https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/unicast/ospf/|mikrotika]] też wyjaśnia podstawy 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-default'' zostanie ustawiony na ''if-installed'', to router będzie ogłaszać swoją trasę domyślą (czyt. będzie podawał siebie jako trasę "do internetu"), * parametr ''redistribute'' wskazuje na źródła z których trasy będą ogłaszane po OSPF przez ten router; \\ przykładowo wartość ''static,isis'' będzie dołączać do wysyłanych przez ten router informacji też informacje że ten router ma każdą((Można ograniczyć które trasy są ogłaszane dodając [[https://manual.mikrotik.com/docs/user-guides/routing-and-networking-protocols/route-selection-and-filtering|filtry]].)) z dodanych statycznie tras i każdą z tras które poznał używając protokołu IS-IS (tj. konkurencyjnego protokołu trasowania). {{bio-sk:mikrotik_ospf:ospf-1.png}}
[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=static
Przykł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ży((Ze względów bezpieczeństwa.)) 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. {{bio-sk:mikrotik_ospf:ospf-2.png}} 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''. {{bio-sk:mikrotik_ospf:ospf-3.png}} 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: | Tutaj widać rosnący koszt tras. Zwróć uwagę na koszt 102 i 202: w tej sieci dwa routery ogłaszały inny koszt łącza (po 100 na łącze). MikroTik domyślnie ustawia koszt łącza na ''1'' podczas gdy większość producentów ustawia koszt na ''prędkość_odniesienia/prędkość_łącza''. Tutaj dwa routery w tej sieci były właśnie sprzętem innego producenta z ustawianą prędkością odniesienia na 100Gbs. Takie pomieszanie metodyki liczenia kosztu może doprowadzić do wyboru nieoptymalnych tras, więc warto by było zmienić tutaj koszty łącz na spójne w całej sieci.
[admin@R1] > /routing/route/print proplist=dst,gate,dist,ospf.m,ospf.ty where afi=ip
Flags: U - UNREACHABLE, A - ACTIVE; c - CONNECT, s - STATIC, o - OSPF
Columns: DST-ADDRESS, GATEWAY, DISTANCE, OSPF.METRIC, OSPF.TYPE
   DST-ADDRESS     GATEWAY          DISTANCE  OSPF.METRIC  OSPF.TYPE
As 0.0.0.0/0       10.8.0.10               1
Ac 10.8.0.0/24     ether1                  0
Ac 10.8.1.0/24     ether3                  0
Ao 10.8.2.0/24     10.8.1.2%ether3       110            2  intra
Ao 10.8.3.0/24     10.8.1.3%ether3       110            2  intra
Ao 10.8.4.0/22     10.8.1.3%ether3       110          102  intra
Ao 10.8.8.0/26     10.8.1.3%ether3       110          202  intra
Ao 10.8.9.0/24     10.8.1.3%ether3       110            3  intra
Ao 192.168.0.0/24  10.8.1.3%ether3       110            4  ext-type-1
As 192.168.1.0/24  10.8.1.2                1
Us 192.168.1.0/24  192.168.0.22           10
++++ ++++ Ilustracja topologii sieci | {{bio-sk:mikrotik_ospf:example-topo.png}} ++++ ++++ Zrzut pełnej bazy informacji LSA – wynik /routing/ospf/lsa/print | Zwróć uwagę na trzy typy LSA pokazane tutaj: * ''network'' (1) opisuje jedną sieć w której są przynajmniej dwa routery OSPF * ''router'' (2) informuje o routerze OSPF oraz o sieciach w których jest tylko ten router (''type=stub'') * ''external'' (5) opisuje jedną sieć spoza OSPF osiągalną przez któryś z routerów OSPF
  
[admin@R3] > /routing/ospf/lsa/print
Flags: S - SELF-ORIGINATED; D - DYNAMIC
 0   D instance=v4 type="external" originator=0.0.0.1 id=0.0.0.0 sequence=0x80000001 age=1668
       checksum=0x63ED body=
          options=E
          netmask=0.0.0.0
          forwarding-address=0.0.0.0
          metric=1 type-1
          route-tag=0

 1   D instance=v4 type="external" originator=0.0.0.5 id=192.168.0.0 sequence=0x80000001 age=766
       checksum=0x4E72 body=
          options=E
          netmask=255.255.255.0
          forwarding-address=10.8.9.8
          metric=1 type-1
          route-tag=0

 2   D instance=v4 area=v4a0 type="router" originator=0.0.0.1 id=0.0.0.1 sequence=0x80000005
       age=1388 checksum=0x36C8 body=
          options=E bits=E
              type=network id=10.8.1.2 data=10.8.1.1 metric=1
              type=stub id=10.8.0.0 data=255.255.255.0 metric=1

 3   D instance=v4 area=v4a0 type="router" originator=0.0.0.2 id=0.0.0.2 sequence=0x80000007
       age=1120 checksum=0x736F body=
          options=E
              type=network id=10.8.1.2 data=10.8.1.2 metric=1
              type=network id=10.8.2.2 data=10.8.2.2 metric=1

 4  SD instance=v4 area=v4a0 type="router" originator=0.0.0.3 id=0.0.0.3 sequence=0x80000006
       age=1164 checksum=0xD10B body=
          options=E
              type=network id=10.8.1.2 data=10.8.1.3 metric=1
              type=network id=10.8.3.3 data=10.8.3.3 metric=1

 5   D instance=v4 area=v4a0 type="router" originator=0.0.0.4 id=0.0.0.4 sequence=0x80000003
       age=1113 checksum=0x6D3 body=
          options=E
              type=network id=10.8.2.2 data=10.8.2.4 metric=1
              type=network id=10.8.3.3 data=10.8.3.4 metric=1

 6   D instance=v4 area=v4a0 type="router" originator=0.0.0.5 id=0.0.0.5 sequence=0x80000005
       age=819 checksum=0x22C2 body=
          options=E bits=E
              type=network id=10.8.3.3 data=10.8.3.5 metric=1
              type=stub id=10.8.9.0 data=255.255.255.0 metric=1

 7   D instance=v4 area=v4a0 type="router" originator=0.0.0.6 id=0.0.0.6 sequence=0x80000009
       age=1016 checksum=0x7388 body=
          options=E
              type=network id=10.8.3.3 data=10.8.3.6 metric=100
              type=network id=10.8.4.7 data=10.8.4.6 metric=100

 8   D instance=v4 area=v4a0 type="router" originator=0.0.0.7 id=0.0.0.7 sequence=0x80000003
       age=273 checksum=0xE76E body=
          options=E
              type=stub id=10.8.8.0 data=255.255.255.192 metric=100
              type=network id=10.8.4.7 data=10.8.4.7 metric=100

 9   D instance=v4 area=v4a0 type="network" originator=0.0.0.2 id=10.8.1.2 sequence=0x80000002
       age=1210 checksum=0xD562 body=
          netmask=255.255.255.0
              router-id=0.0.0.1
              router-id=0.0.0.2
              router-id=0.0.0.3

10   D instance=v4 area=v4a0 type="network" originator=0.0.0.2 id=10.8.2.2 sequence=0x80000001
       age=1120 checksum=0xB487 body=
          netmask=255.255.255.0
              router-id=0.0.0.2
              router-id=0.0.0.4

11  SD instance=v4 area=v4a0 type="network" originator=0.0.0.3 id=10.8.3.3 sequence=0x80000003
       age=1010 checksum=0x8E94 body=
          netmask=255.255.255.0
              router-id=0.0.0.3
              router-id=0.0.0.4
              router-id=0.0.0.5
              router-id=0.0.0.6

12   D instance=v4 area=v4a0 type="network" originator=0.0.0.7 id=10.8.4.7 sequence=0x80000002
       age=273 checksum=0x8F9B body=
          netmask=255.255.252.0
              router-id=0.0.0.6
              router-id=0.0.0.7
++++
**Pamiętaj żeby po skończeniu laboratoriów zresetować konfigurację** ===== [extra] OSPF na Linuksie (i CISCO) ===== W [[bio-sk:ospf#ospf_na_routerach_cisco|materiałach do SK z poprzednich lat]] jest opis konfiguracji OSPF na urządzeniach CISCO; tego samego zestawu poleceń używa też [[https://frrouting.org/|frr]] pozwalający uruchomić protokół OSPF na Linuksie. Konkurencyjny [[https://bird.nic.cz/|bird]] jest ustawiany w [[https://gitlab.nic.cz/labs/bird/-/wikis/OSPF_example|pliku konfiguracyjnym]].