środa, 19 sierpnia 2020

Prosty VRF na MikroTik RouterOS - to samo IP jako gw od 2 różnych ISP

 

Ostatnio spotkałem się z pytaniem o pomoc w konfiguracji MikroTik RouterOS z dosyć niestandardowym problemem. Otóż firma posiada dwa łącza, jedno po światłowodzie od ogólnopolskiego operatora, drugie zapasowe po radiu od lokalnego operatora i obaj operatorzy wymagają od niego pobierania IP z DHCP, gdzie jako bramę domyślną rozgłaszają na każdym z łączy to samo IP.


Pierwszym odruchem było zaproponowanie sugestii wystosowania prośby do jednego z operatorów o zmianę puli adresacji IP rozgłaszanej do klienta.

Drugim pomysłem było zastosowanie prostej konfiguracji VRF.

 

W rzeczywistym przypadku nie było problemów by operator lokalny dokonał szybkiej zmiany adresacji IP, ale co w przypadku gdyby to było nie możliwe ? 

Odpowiedzią jest załączony przykład konfiguracji.

 

 

Poniższa konfiguracje jest tylko prostym przykładem konfiguracji DualWAN z równomiernym obciążeniem obu łączy przez użytkowników sieci lokalnej. 

Do prawdziwego użycie w biznesowych warunkach przykład ten należałoby rozbudować przynajmniej o mechanizm failover. Przykład używa przypisywania adresów sieci LAN do poszczególnych łączy WAN poprzez podział napływających pakietów (nowe połączenia) i ich podział na dwie grupy (NTH) poprzez dopisanie źródłowego adresu IP z sieci LAN do address-listy na czas 1 godziny. 


Dla własnych potrzeb należy dostosować odpowiednio nazewnictwo interfejsów w przykładzie.


W pierwszym kroku definiujemy VRF przydzielone do konkretnych fizycznych interfejsów i określamy oznaczenie znakowania pakietów (mark routing).

/ip route vrf
add interfaces=ether2-WAN_ISP-1 routing-mark=ISP-1
add interfaces=ether3-WAN_ISP-2 routing-mark=ISP-2

 

Następnie ustawiamy prostą masquarade dla naszej sieci wewnętrznej.

/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether2-WAN_ISP-1
add action=masquerade chain=srcnat out-interface=ether3-WAN_ISP-2

 

Teraz trudniejsze czynności, właściwe oznaczenie pakietów połączenia, bardzo ważna jest kolejność poniższych regułek.

Znakujemy połączenia connection-mark oraz routing-marki nadchodzące z sieci LAN z IP istniejących z jednej z src-address-list (ISP-1, ISP-2), czyli dla IP zaklasyfikowanych wcześniej (kolejne regułki) do jednego z łączy. Pierwsza regułka dotyczy podtrzymania oznaczenia połączenia - tak by samo nie wygasło wcześniej. W drugiej regułce jest właściwe oznaczenie routing-mark  oraz kończymy dalsze jego przetwarzanie (passthrough=no). Regułki powtarzamy dla drugie łącza.

/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=ether1-LAN \
    new-connection-mark=ISP-1 passthrough=yes src-address-list=ISP-1
add action=mark-routing chain=prerouting in-interface=ether1-LAN \
    new-routing-mark=ISP-1 passthrough=no src-address-list=ISP-1


add action=mark-connection chain=prerouting in-interface=ether1-LAN \
    new-connection-mark=ISP-2 passthrough=yes src-address-list=ISP-2
add action=mark-routing chain=prerouting in-interface=ether1-LAN \
    new-routing-mark=ISP-2 passthrough=no src-address-list=ISP-2

 
IP źródłowe pierwszego nowe połączenie (1 z 2) dodawane jest na okres 1 godziny do src-address-list ISP-1, następnie oznaczamy to połączenie etykietą ISP-1. W kolejnym kroku pakiety oznaczone connection-mark ISP-1 oznaczamy etykietą routingu ISP-1 i kończymy dalsze przetwarzanie takiego pakietu przez kolejne reguły (passthrough=no). Powtarzamy to dla kolejnego nowego połączenia (2 z 2) z tymże kierujemy to IP źródłowe na drugie łącze.

add action=add-src-to-address-list address-list=ISP-1 address-list-timeout=1h \
    chain=prerouting in-interface=ether1-LAN nth=2,1
add action=mark-connection chain=prerouting in-interface=ether1-LAN \
    new-connection-mark=ISP-1 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP-1 in-interface=\
    ether1-LAN new-routing-mark=ISP-1 passthrough=no


add action=add-src-to-address-list address-list=ISP-2 address-list-timeout=1h \
    chain=prerouting in-interface=ether1-LAN nth=2,2
add action=mark-connection chain=prerouting in-interface=ether1-LAN \
    new-connection-mark=ISP-2 passthrough=yes
add action=mark-routing chain=prerouting connection-mark=ISP-2 in-interface=\
    ether1-LAN new-routing-mark=ISP-2 passthrough=no

A teraz ważna czynność, pakiety domyślnie nadchodzące danymi łączami WAN są pierwotnie oznaczane przez VRF, by pakiety wypuścić z powrotem do sieci LAN należy usunąć routin-mark inaczej przywrócić go do stanu domyślnego czyli "main".

add action=mark-routing chain=prerouting in-interface=ether2-WAN_ISP-1 \
    new-routing-mark=main passthrough=no
add action=mark-routing chain=prerouting in-interface=ether3-WAN_ISP-2 \
    new-routing-mark=main passthrough=no


Powyższy przykład należy jedynie traktować jako proste wprowadzenie do funkcjonalności VRF na MikroTik RouterOS do samodzielnej dalszej nauki. Polecamy eksperymentowanie z innym podziałem pakietów na łącza WAN, dodanie funkcjonalności DualWan FailOver bazując na przykładzie Mikrotik - Failover connection via backup (LTE).

 

Zapraszam do zadawania pytań, postaram się w wolnym czasie na nie odpowiedzieć. 


Brak komentarzy:

Prześlij komentarz