===== 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>
[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=
[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
[admin@R1] > /system/reset-configuration Dangerous! Reset anyway? [y/N]: Y
[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
[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
[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.
[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''.
[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.
[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=ether3Konfiguracja 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,ether3Konfiguracja 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 passiveTe 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.
/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''.
[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++++