Multivan i routing na Mikrotik RouterOS

Wprowadzenie

Podjęcie artykułu, oprócz próżności, podyktowane było przygnębiającą częstotliwością pytań na ten temat w grupach profilowych rosyjskojęzycznej społeczności telegramów. Artykuł skierowany jest do początkujących administratorów Mikrotik RouterOS (dalej ROS). Dotyczy tylko multivana, z naciskiem na wyznaczanie tras. Jako bonus, istnieją minimalnie wystarczające ustawienia, aby zapewnić bezpieczną i wygodną obsługę. Ci, którzy szukają ujawnienia tematów kolejek, równoważenia obciążenia, vlanów, mostów, wieloetapowej głębokiej analizy stanu kanału i tym podobnych - mogą nie tracić czasu i wysiłku na lekturę.

Surowe dane

Jako obiekt testowy wybrano pięcioportowy router Mikrotik z wersją ROS 6.45.3. Będzie kierował ruch między dwiema sieciami lokalnymi (LAN1 i LAN2) oraz trzema dostawcami (ISP1, ISP2, ISP3). Kanał do ISP1 ma statyczny adres „szary”, ISP2 – „biały”, uzyskany przez DHCP, ISP3 – „biały” z autoryzacją PPPoE. Schemat połączeń pokazano na rysunku:

Multivan i routing na Mikrotik RouterOS

Zadanie polega na skonfigurowaniu routera MTK na podstawie schematu tak, aby:

  1. Zapewnij automatyczne przełączanie do dostawcy zapasowego. Głównym dostawcą jest ISP2, pierwszą rezerwą jest ISP1, drugą rezerwą jest ISP3.
  2. Zorganizuj dostęp sieci LAN1 do Internetu tylko za pośrednictwem ISP1.
  3. Zapewnij możliwość kierowania ruchu z sieci lokalnych do Internetu przez wybranego dostawcę na podstawie listy adresów.
  4. Zapewnić możliwość publikowania usług z sieci lokalnej do Internetu (DSTNAT)
  5. Skonfiguruj filtr zapory, aby zapewnić minimalne wystarczające bezpieczeństwo z Internetu.
  6. Router może wydawać własny ruch przez dowolnego z trzech dostawców, w zależności od wybranego adresu źródłowego.
  7. Upewnij się, że pakiety odpowiedzi są kierowane do kanału, z którego pochodzą (w tym do sieci LAN).

Komentarz. Skonfigurujemy router „od zera”, aby zagwarantować brak niespodzianek w początkowych konfiguracjach „od razu po wyjęciu z pudełka”, które zmieniają się z wersji na wersję. Winbox został wybrany jako narzędzie konfiguracyjne, w którym zmiany będą wizualizowane. Same ustawienia zostaną ustawione za pomocą poleceń w terminalu Winbox. Fizyczne połączenie do konfiguracji odbywa się poprzez bezpośrednie połączenie z interfejsem Ether5.

Trochę rozumowania o tym, czym jest multivan, czy to problem, czy sprytni mądrzy ludzie tkają sieci konspiracyjne

Dociekliwy i uważny administrator, zakładający na własną rękę taki lub podobny schemat, nagle orientuje się, że już działa normalnie. Tak, tak, bez twoich niestandardowych tablic routingu i innych reguł tras, których pełno jest w większości artykułów na ten temat. Sprawdźmy?

Czy możemy skonfigurować adresowanie na interfejsach i bramach domyślnych? Tak:

W przypadku ISP1 adres i brama zostały zarejestrowane odległość=2 и check-gateway=ping.
W przypadku ISP2 domyślne ustawienie klienta dhcp - odpowiednio odległość będzie równa jeden.
Na ISP3 w ustawieniach klienta pppoe kiedy add-default-route=yes położyć domyślna odległość-trasy=3.

Nie zapomnij zarejestrować NAT na wyjściu:

/ip firewall nat add akcja=masquerade chain=srcnat out-interface-list=WAN

W rezultacie użytkownicy lokalnych witryn bawią się ściągając koty przez głównego dostawcę ISP2 i następuje rezerwacja kanałów za pomocą mechanizmu sprawdź bramkę Patrz uwaga 1

Punkt 1 zadania jest realizowany. Gdzie jest multivan ze znakami? NIE…

Dalej. Musisz zwolnić określonych klientów z sieci LAN za pośrednictwem ISP1:

/ip firewall magle dodaj akcję=łańcuch tras=wstępne trasowanie dst-address-list=!BOGONS
passthrough=yes Route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip firewall magle dodaj akcję=łańcuch tras=wstępne trasowanie dst-address-list=!BOGONS
passthrough=brak trasy-dst=100.66.66.1 adres-src=192.168.88.0/24

Punkty 2 i 3 zadania zostały zrealizowane. Etykiety, pieczątki, zasady tras, gdzie jesteście?!

Potrzebujesz udostępnić swój ulubiony serwer OpenVPN o adresie 172.17.17.17 dla klientów z Internetu? Proszę:

/ip cloud set ddns-enabled=tak

Jako partner przekazujemy klientowi wynik wyjściowy: „:put [ip cloud pobierz nazwę DNS]"

Rejestrujemy przekierowanie portów z Internetu:

/ip firewall nat dodaj akcję=dst-nat łańcuch=dstnat dst-port=1194
in-interface-list=protokół WAN=adresy udp=172.17.17.17

Pozycja 4 jest gotowa.

Założyliśmy firewall i inne zabezpieczenia dla punktu 5, jednocześnie cieszymy się, że już wszystko działa dla użytkowników i sięgamy po pojemnik z ulubionym napojem...
A! Tunele są zapomniane.

l2tp-client, skonfigurowany przez artykuł google, stał się twoim ulubionym holenderskim VDS? Tak.
Serwer l2tp z IPsec wzrósł, a klienci według nazwy DNS z IP Cloud (patrz wyżej) trzymają się? Tak.
Opierając się w fotelu, popijając drinka, leniwie rozważamy punkty 6 i 7 zadania. Myślimy - czy tego potrzebujemy? Mimo to działa to tak (c) ... Więc jeśli nadal nie jest potrzebne, to wszystko. Wdrożono Multivana.

Co to jest multivan? Jest to połączenie kilku kanałów internetowych do jednego routera.

Artykułu nie trzeba czytać dalej, bo co może się tam znaleźć poza popisem wątpliwej przydatności?

Dla tych, którzy zostają, którzy są zainteresowani punktami 6 i 7 zadania, a także czują swędzenie perfekcjonizmu, nurkujemy głębiej.

Najważniejszym zadaniem wdrożenia multivana jest prawidłowe kierowanie ruchem. Mianowicie: niezależnie od tego, który (lub który) Zobacz. Uwaga 3 Kanał(y) ISP patrzą na domyślną trasę na naszym routerze, powinien zwrócić odpowiedź dokładnie na kanał, z którego pochodzi pakiet. Zadanie jest jasne. Gdzie jest problem? Rzeczywiście, w prostej sieci lokalnej zadanie jest takie samo, ale nikt nie zawraca sobie głowy dodatkowymi ustawieniami i nie odczuwa kłopotów. Różnica polega na tym, że każdy rutowalny węzeł w Internecie jest dostępny przez każdy z naszych kanałów, a nie przez ściśle określony, jak w prostej sieci LAN. „Problem” polega na tym, że jeśli dotarło do nas żądanie adresu IP ISP3, to w naszym przypadku odpowiedź przejdzie przez kanał ISP2, ponieważ tam jest kierowana brama domyślna. Liście i zostaną odrzucone przez dostawcę jako nieprawidłowe. Problem został zidentyfikowany. Jak to rozwiązać?

Rozwiązanie podzielone jest na trzy etapy:

  1. Ustawienie wstępne. Na tym etapie ustawione zostaną podstawowe ustawienia routera: sieć lokalna, zapora ogniowa, listy adresów, spinka do włosów NAT itp.
  2. Multivan. Na tym etapie niezbędne połączenia zostaną oznaczone i posortowane w tablice routingu.
  3. Łączenie się z usługodawcą internetowym. Na tym etapie zostaną skonfigurowane interfejsy zapewniające połączenie z Internetem, uruchomiony zostanie routing oraz mechanizm rezerwacji kanałów internetowych.

1. Ustawienie wstępne

1.1. Czyścimy konfigurację routera poleceniem:

/system reset-configuration skip-backup=yes no-defaults=yes

zgadzać się z "Niebezpieczny! Zresetować mimo to? [t/n]:” i po ponownym uruchomieniu łączymy się z Winbox przez MAC. Na tym etapie następuje wyczyszczenie konfiguracji i bazy użytkowników.

1.2. Utwórz nowego użytkownika:

/user add group=full name=knight password=ultrasecret comment=”Not horse”

zaloguj się pod nim i usuń domyślny:

/user remove admin

Komentarz. To właśnie usunięcie, a nie wyłączenie domyślnego użytkownika, autor uważa za bezpieczniejsze i zaleca do użytku.

1.3. Tworzymy podstawowe listy interfejsów dla wygody pracy w firewallu, ustawieniach wykrywania i innych serwerach MAC:

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

Podpisywanie interfejsów z komentarzami

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

i wypełnij listy interfejsów:

/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2 
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN  comment="LAN1"
/interface list member add interface=ether5 list=LAN  comment="LAN2"

Komentarz. Pisanie zrozumiałych komentarzy jest warte poświęconego czasu, a ponadto znacznie ułatwia rozwiązywanie problemów i zrozumienie konfiguracji.

Autor uważa za konieczne, ze względów bezpieczeństwa, dodanie interfejsu ether3 do listy interfejsów „WAN”, mimo że protokół ip przez niego nie przejdzie.

Nie zapominaj, że po podniesieniu interfejsu PPP na ether3 należy go również dodać do listy interfejsów „WAN”

1.4. Ukrywamy router przed wykryciem sąsiedztwa i kontrolą z sieci dostawców za pośrednictwem MAC:

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. Tworzymy minimalny, wystarczający zestaw reguł filtrowania zapory, aby chronić router:

/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow" 
connection-state=established,related,untracked

(reguła zezwala na ustanowione i powiązane połączenia, które są inicjowane zarówno z podłączonych sieci, jak i samego routera)

/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp

(ping i nie tylko ping. Wszystkie icmp są dozwolone. Bardzo przydatne przy wyszukiwaniu problemów z MTU)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN

(reguła zamykająca łańcuch wejściowy zabrania wszystkiego innego, co pochodzi z Internetu)

/ip firewall filter add action=accept chain=forward 
comment="Established, Related, Untracked allow" 
connection-state=established,related,untracked

(reguła zezwala na ustanowione i powiązane połączenia, które przechodzą przez router)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid

(reguła resetuje połączenia ze stanem połączenia=nieprawidłowe przechodzące przez router. Jest to zdecydowanie zalecane przez Mikrotik, ale w niektórych rzadkich sytuacjach może blokować przydatny ruch)

/ip firewall filter add action=drop chain=forward comment="Drop all from WAN not DSTNATed"  
connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

(reguła zabrania przechodzenia przez router pakietów, które nie przeszły procedury dstnat. Zabezpieczy to sieci lokalne przed intruzami, którzy będąc w tej samej domenie rozgłoszeniowej z naszymi sieciami zewnętrznymi, zarejestrują nasze zewnętrzne adresy IP jako bramkę i w ten sposób spróbować „eksplorować” nasze sieci lokalne).

Komentarz. Załóżmy, że sieci LAN1 i LAN2 są zaufane i ruch między nimi oraz z nich nie jest filtrowany.

1.6. Utwórz listę z listą sieci nieroutowalnych:

/ip firewall address-list
add address=0.0.0.0/8 comment=""This" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"
 list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS

(To jest lista adresów i sieci, które nie mogą być rutowane do Internetu i będą odpowiednio przestrzegane.)

Komentarz. Lista może ulec zmianie, dlatego radzę okresowo sprawdzać aktualność.

1.7. Skonfiguruj DNS dla samego routera:

/ip dns set servers=1.1.1.1,8.8.8.8

Komentarz. W obecnej wersji ROS serwery dynamiczne mają pierwszeństwo przed statycznymi. Żądanie rozpoznania nazwy jest wysyłane do pierwszego serwera w kolejności na liście. Przejście na następny serwer odbywa się w momencie, gdy obecny jest niedostępny. Limit czasu jest duży — ponad 5 sekund. Powrót po wznowieniu „upadłego serwera” nie następuje automatycznie. Biorąc pod uwagę ten algorytm i obecność multivana, autor odradza korzystanie z serwerów dostarczanych przez dostawców.

1.8. Skonfiguruj sieć lokalną.
1.8.1. Konfigurujemy statyczne adresy IP na interfejsach LAN:

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

1.8.2. Ustalamy reguły dla tras do naszych sieci lokalnych poprzez główną tablicę routingu:

/ip route rule add dst-address=192.168.88.0/24 table=main comment=”to LAN1”
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

Komentarz. Jest to jeden z szybkich i łatwych sposobów na dostęp do adresów LAN ze źródłami zewnętrznych adresów IP interfejsów routera, które nie przechodzą domyślną trasą.

1.8.3. Włącz spinkę NAT dla sieci LAN1 i LAN2:

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" 
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" 
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

Komentarz. Dzięki temu możesz uzyskać dostęp do swoich zasobów (dstnat) za pośrednictwem zewnętrznego adresu IP, będąc w sieci.

2. Właściwie wykonanie bardzo poprawnego multivana

Aby rozwiązać problem „odpowiadania skąd pytali”, użyjemy dwóch narzędzi ROS: znak połączenia и znak trasy. znak połączenia pozwala zaznaczyć żądane połączenie, a następnie pracować z tą etykietą jako warunkiem zastosowania znak trasy. I już z znak trasy możliwość pracy w trasa ip и zasady tras. Opracowaliśmy narzędzia, teraz musisz zdecydować, które połączenia zaznaczyć - raz, dokładnie gdzie zaznaczyć - dwa.

Z pierwszym wszystko jest proste - musimy zaznaczyć wszystkie połączenia, które przychodzą do routera z Internetu przez odpowiedni kanał. W naszym przypadku będą to trzy etykiety (według liczby kanałów): „conn_isp1”, „conn_isp2” i „conn_isp3”.

Niuans z drugim polega na tym, że połączenia przychodzące będą dwojakiego rodzaju: tranzytowe i te, które są przeznaczone dla samego routera. Mechanizm znaku połączenia działa w tabeli magiel. Rozważ ruch paczki na uproszczonym schemacie, uprzejmie opracowanym przez specjalistów z zasobu mikrotik-trainings.com (nie reklamowego):

Multivan i routing na Mikrotik RouterOS

Podążając za strzałkami, widzimy, że pakiet docierający do „Interfejs wejścia”, przechodzi przez łańcuch „Wstępne wyznaczanie trasy” i dopiero wtedy dzieli się na tranzytowe i lokalne w bloku „Decyzja o trasie". Dlatego, aby upiec dwie pieczenie na jednym ogniu, używamy Znak połączenia w tabeli Wstępne trasowanie Mangle więzy Wstępne wyznaczanie trasy.

Uwaga:. W ROS etykiety „Znacznik trasy” są wyświetlane jako „Tabela” w sekcji IP/Trasy/Reguły oraz jako „Znak trasy” w innych sekcjach. Może to wprowadzać pewne zamieszanie w zrozumieniu, ale w rzeczywistości jest to to samo i jest analogiem rt_tables w iproute2 w systemie Linux.

2.1. Oznaczamy połączenia przychodzące od każdego z dostawców:

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1  new-connection-mark=conn_isp1 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2  new-connection-mark=conn_isp2 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3  new-connection-mark=conn_isp3 passthrough=no

Komentarz. Aby nie oznaczać już zaznaczonych połączeń, używam warunku connection-mark=no-mark zamiast connection-state=new, ponieważ uważam, że jest to bardziej poprawne, a także odrzucanie upuszczania nieprawidłowych połączeń w filtrze wejściowym.


passthrough=no - ponieważ w tej metodzie implementacji wykluczone jest ponowne oznaczanie i dla przyspieszenia można przerwać wyliczanie reguł po pierwszym dopasowaniu.

Należy mieć na uwadze, że nie ingerujemy jeszcze w żaden sposób w routing. Teraz są już tylko etapy przygotowań. Kolejnym etapem wdrożenia będzie obsługa ruchu tranzytowego powracającego nawiązanym łączem z miejsca docelowego w sieci lokalnej. Te. te pakiety, które (patrz diagram) przeszły przez router po drodze:

„Input Interface”=>”Prerouting”=>”Decyzja o routingu”=>”Forward”=>”Post Routing”=>”Output Interface” i dotarły do ​​adresata w sieci lokalnej.

Ważne! W ROS nie ma logicznego podziału na interfejsy zewnętrzne i wewnętrzne. Jeśli prześledzimy ścieżkę pakietu odpowiedzi zgodnie z powyższym diagramem, to będzie on podążał tą samą ścieżką logiczną, co żądanie:

„Input Interface”=>”Prerouting”=>”Decyzja o routingu”=>”Forward”=>”Post Routing”=>”Output Interface” tylko na prośbę"Interfejs wejściowy” był interfejs ISP, a dla odpowiedzi - LAN

2.2. Kierujemy ruch tranzytowy odpowiedzi do odpowiednich tablic routingu:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

Komentarz. in-interface-list=!WAN - pracujemy tylko z ruchem z sieci lokalnej i dst-address-type=!local, który nie posiada adresu docelowego adresu interfejsów samego routera.

To samo dotyczy lokalnych pakietów, które dotarły do ​​routera po drodze:

„Input Interface”=>”Prerouting”=>”Decyzja o routingu”=>”Input”=>”Local Process”

Ważne! Odpowiedź pójdzie w następujący sposób:

„Proces lokalny”=>”Decyzja o routingu”=>”Wyjście”=>”Post Routing”=>”Interfejs wyjściowy”

2.3. Lokalny ruch odpowiedzi kierujemy do odpowiednich tablic routingu:

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP1" connection-mark=conn_isp1 dst-address-type=!local 
new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP2" connection-mark=conn_isp2 dst-address-type=!local 
new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP3" connection-mark=conn_isp3 dst-address-type=!local 
new-routing-mark=to_isp3 passthrough=no

Na tym etapie zadanie przygotowania do wysłania odpowiedzi do kanału internetowego, z którego nadeszło żądanie, można uznać za rozwiązane. Wszystko jest oznaczone, oznakowane i gotowe do trasowania.
Doskonałym „ubocznym” efektem tej konfiguracji jest możliwość pracy z przekierowaniem portów DSNAT od obu dostawców (ISP2, ISP3) w tym samym czasie. Wcale nie, ponieważ na ISP1 mamy adres nierutowalny. Efekt ten jest ważny na przykład w przypadku serwera pocztowego z dwoma MX-ami, które przeglądają różne kanały internetowe.

Aby wyeliminować niuanse działania sieci lokalnych z zewnętrznymi routerami IP, stosujemy rozwiązania z ust. 1.8.2 i 3.1.2.6.

Ponadto możesz użyć narzędzia z oznaczeniami, aby rozwiązać punkt 3 problemu. Implementujemy to tak:

2.4. Kierujemy ruch od lokalnych klientów z list routingu do odpowiednich tabel:

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 
passthrough=no src-address-list=Via_ISP1

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2 
passthrough=no src-address-list=Via_ISP2

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 
passthrough=no src-address-list=Via_ISP3

W rezultacie wygląda to mniej więcej tak:

Multivan i routing na Mikrotik RouterOS

3. Skonfiguruj połączenie z usługodawcą internetowym i włącz routing markowy

3.1. Skonfiguruj połączenie z ISP1:
3.1.1. Skonfiguruj statyczny adres IP:

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. Skonfiguruj routing statyczny:
3.1.2.1. Dodaj domyślną trasę „awaryjną”:

/ip route add comment="Emergency route" distance=254 type=blackhole

Komentarz. Ta trasa umożliwia ruchowi pochodzącemu z procesów lokalnych przejście etapu decyzji o trasie, niezależnie od stanu łączy któregokolwiek z dostawców. Niuans wychodzącego ruchu lokalnego polega na tym, że aby pakiet mógł się przynajmniej gdzieś przenieść, główna tablica routingu musi mieć aktywną trasę do bramy domyślnej. Jeśli nie, paczka zostanie po prostu zniszczona.

Jako rozszerzenie narzędzia sprawdź bramkę Do głębszej analizy stanu kanału sugeruję użycie metody trasy rekurencyjnej. Istota tej metody polega na tym, że mówimy routerowi, aby szukał ścieżki do swojej bramy nie bezpośrednio, ale przez bramę pośrednią. 4.2.2.1, 4.2.2.2 i 4.2.2.3 zostaną wybrane jako takie „testowe” bramki odpowiednio dla ISP1, ISP2 i ISP3.

3.1.2.2. Trasa na adres „weryfikacji”:

/ip route add check-gateway=ping comment="For recursion via ISP1"  
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10

Komentarz. Obniżamy wartość zakresu do wartości domyślnej w zakresie docelowym ROS, aby w przyszłości używać wersji 4.2.2.1 jako bramy rekurencyjnej. Podkreślam: zasięg trasy do adresu „testowego” musi być mniejszy lub równy zasięgowi docelowemu trasy, która będzie odnosić się do adresu testowego.

3.1.2.3. Rekurencyjna trasa domyślna dla ruchu bez znacznika trasy:

/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1

Komentarz. Używana jest wartość distance=2, ponieważ ISP1 jest zadeklarowany jako pierwsza kopia zapasowa zgodnie z warunkami zadania.

3.1.2.4. Rekurencyjna trasa domyślna dla ruchu ze znacznikiem routingu „to_isp1”:

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 
routing-mark=to_isp1

Komentarz. Właściwie zaczynamy wreszcie cieszyć się owocami prac przygotowawczych przeprowadzonych w akapicie 2.


Na tej trasie cały ruch oznaczony trasą „to_isp1” będzie kierowany do bramy pierwszego dostawcy, niezależnie od tego, która brama domyślna jest aktualnie aktywna dla tabeli głównej.

3.1.2.5. Pierwsza awaryjna rekurencyjna trasa domyślna dla ruchu z tagami ISP2 i ISP3:

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp2
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp3

Komentarz. Trasy te są potrzebne między innymi do rezerwowania ruchu z sieci lokalnych, które są członkami listy adresowej „to_isp*”'

3.1.2.6. Rejestrujemy trasę lokalnego ruchu routera do Internetu przez ISP1:

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

Komentarz. W połączeniu z zasadami z punktu 1.8.2 zapewnia dostęp do żądanego kanału z zadanym źródłem. Ma to kluczowe znaczenie w przypadku budowania tuneli, które określają adres IP po stronie lokalnej (EoIP, IP-IP, GRE). Ponieważ reguły w regułach ip route są wykonywane od góry do dołu, aż do pierwszego dopasowania warunków, to reguła ta powinna być następująca po regułach z punktu 1.8.2.

3.1.3. Rejestrujemy regułę NAT dla ruchu wychodzącego:

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1"  
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

Komentarz. NATim wszystko, co wychodzi, z wyjątkiem tego, co dostaje się do zasad IPsec. Staram się nie używać action=masquerade, chyba że jest to absolutnie konieczne. Jest wolniejszy i wymaga więcej zasobów niż src-nat, ponieważ oblicza adres NAT dla każdego nowego połączenia.

3.1.4. Klientów z listy, którym zabroniono dostępu za pośrednictwem innych dostawców, wysyłamy bezpośrednio do bramki dostawcy ISP1.

/ip firewall mangle add action=route chain=prerouting comment="Address List via ISP1 only" 
dst-address-list=!BOGONS passthrough=no route-dst=100.66.66.1 
src-address-list=Via_only_ISP1 place-before=0

Komentarz. action=route ma wyższy priorytet i jest stosowany przed innymi regułami routingu.


place-before=0 - umieszcza naszą regułę na pierwszym miejscu na liście.

3.2. Skonfiguruj połączenie z ISP2.

Ponieważ dostawca ISP2 przekazuje nam ustawienia przez DHCP, rozsądne jest wprowadzenie niezbędnych zmian za pomocą skryptu, który uruchamia się po uruchomieniu klienta DHCP:

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if ($bound=1) do={r
    n    /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 
           dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=10r
    n    /ip route add comment="Unmarked via ISP2" distance=1 gateway=4.2.2.2;r
    n    /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 
           routing-mark=to_isp2;r
    n    /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 
           routing-mark=to_isp1;r
    n    /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 
           routing-mark=to_isp3;r
    n    /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
           out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" 
           place-before=1;r
    n    if ([/ip route rule find comment="From ISP2 IP to Inet"] ="") do={r
    n        /ip route rule add comment="From ISP2 IP to Inet" 
               src-address=$"lease-address" table=to_isp2 r
    n    } else={r
    n       /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=no 
              src-address=$"lease-address"r
    n    }      r
    n} else={r
    n   /ip firewall nat remove  [find comment="NAT via ISP2"];r
    n   /ip route remove [find comment="For recursion via ISP2"];r
    n   /ip route remove [find comment="Unmarked via ISP2"];r
    n   /ip route remove [find comment="Marked via ISP2 Main"];r
    n   /ip route remove [find comment="Marked via ISP1 Backup1"];r
    n   /ip route remove [find comment="Marked via ISP3 Backup2"];r
    n   /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=yesr
    n}r
    n" use-peer-dns=no use-peer-ntp=no

Sam skrypt w oknie Winboksa:

Multivan i routing na Mikrotik RouterOS
Komentarz. Pierwsza część skryptu jest uruchamiana po pomyślnym uzyskaniu dzierżawy, druga - po zwolnieniu dzierżawy.Patrz uwaga 2

3.3. Skonfigurowaliśmy połączenie z dostawcą ISP3.

Ponieważ dostawca ustawień daje nam dynamikę, zasadne jest dokonanie niezbędnych zmian skryptami, które uruchamiają się po podniesieniu interfejsu ppp i po upadku.

3.3.1. Najpierw konfigurujemy profil:

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client 
on-down="/ip firewall nat remove  [find comment="NAT via ISP3"];r
    n/ip route remove [find comment="For recursion via ISP3"];r
    n/ip route remove [find comment="Unmarked via ISP3"];r
    n/ip route remove [find comment="Marked via ISP3 Main"];r
    n/ip route remove [find comment="Marked via ISP1 Backup2"];r
    n/ip route remove [find comment="Marked via ISP2 Backup2"];r
    n/ip route rule set [find comment="From ISP3 IP to Inet"] disabled=yes;" 
on-up="/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 
    dst-address=4.2.2.3/32 gateway=$"remote-address" scope=10r
    n/ip route add comment="Unmarked via ISP3" distance=3 gateway=4.2.2.3;r
    n/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 
    routing-mark=to_isp3;r
    n/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp1;r
    n/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp2;r
    n/ip firewall mangle set [find comment="Connmark in from ISP3"] 
    in-interface=$"interface";r
    n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
    out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3" 
    place-before=1;r
    nif ([/ip route rule find comment="From ISP3 IP to Inet"] ="") do={r
    n   /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" 
    table=to_isp3 r
    n} else={r
    n   /ip route rule set [find comment="From ISP3 IP to Inet"] disabled=no 
    src-address=$"local-address"r
    n};r
    n"

Sam skrypt w oknie Winboksa:

Multivan i routing na Mikrotik RouterOS
Komentarz. Linia
/ip firewall mangle set [find comment="Połącz z ISP3"] in-interface=$"interface";
pozwala poprawnie obsłużyć zmianę nazwy interfejsu, ponieważ działa z jego kodem, a nie wyświetlaną nazwą.

3.3.2. Teraz, korzystając z profilu, utwórz połączenie ppp:

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no 
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_client

Na koniec ustawmy zegar:

/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

Dla tych, którzy doczytali do końca

Proponowany sposób realizacji multivana jest osobistymi preferencjami autora i nie jest jedynym możliwym. Zestaw narzędzi ROS jest rozbudowany i elastyczny, co z jednej strony sprawia trudności początkującym, az drugiej jest powodem jego popularności. Ucz się, próbuj, odkrywaj nowe narzędzia i rozwiązania. Na przykład, jako zastosowanie zdobytej wiedzy, istnieje możliwość wymiany narzędzia w tej realizacji multivana check-gateway z rekurencyjnymi trasami do Oglądaj w sieci.

Uwagi

  1. check-gateway - mechanizm pozwalający na dezaktywację trasy po dwóch kolejnych nieudanych sprawdzeniach dostępności bramki. Kontrola jest wykonywana raz na 10 sekund plus limit czasu odpowiedzi. W sumie rzeczywisty czas przełączania mieści się w przedziale 20-30 sekund. Jeśli taki czas przełączania nie jest wystarczający, istnieje możliwość użycia narzędzia Oglądaj w sieci, gdzie licznik czasu sprawdzania można ustawić ręcznie. check-gateway nie uruchamia się w przypadku przerywanej utraty pakietów na łączu.

    Ważny! Dezaktywacja głównej trasy spowoduje dezaktywację wszystkich innych tras, które się do niej odnoszą. Dlatego, aby wskazywały check-gateway=ping niekoniecznie.

  2. Zdarza się, że w mechanizmie DHCP dochodzi do awarii, która wygląda tak, jakby klient utknął w stanie odnowienia. W takim przypadku druga część skryptu nie będzie działać, ale nie zapobiegnie poprawnemu poruszaniu się ruchu, ponieważ stan śledzi odpowiednią trasę rekurencyjną.
  3. ECMP (równe koszty wielościeżkowe) - w ROS możliwe jest ustawienie trasy z kilkoma bramkami i tą samą odległością. W takim przypadku połączenia będą rozdzielane na kanały przy użyciu algorytmu okrężnego, proporcjonalnie do liczby określonych bramek.

Za impuls do napisania artykułu, pomoc w ukształtowaniu jego struktury i rozmieszczeniu akcentów – osobista wdzięczność dla Jewgienija @jskar

Źródło: www.habr.com