Multivan und Routing auf Mikrotik RouterOS

Einführung

Auslöser für die Aufnahme des Artikels war neben der Eitelkeit auch die deprimierende Häufigkeit von Fragen zu diesem Thema in den Profilgruppen der russischsprachigen Telegram-Community. Der Artikel richtet sich an unerfahrene Mikrotik RouterOS-Administratoren (im Folgenden als ROS bezeichnet). Es geht nur um den Multivan, wobei der Schwerpunkt auf der Streckenführung liegt. Als Bonus gibt es minimal ausreichende Einstellungen, um eine sichere und komfortable Bedienung zu gewährleisten. Wer eine Offenlegung zu den Themen Warteschlangen, Lastausgleich, VLANs, Bridges, mehrstufige Tiefenanalyse des Kanalzustands und dergleichen sucht, sollte keine Zeit und Mühe mit dem Lesen verschwenden.

Ausgangsdaten

Als Testobjekt wurde ein Mikrotik-Router mit fünf Ports und der ROS-Version 6.45.3 ausgewählt. Es leitet den Datenverkehr zwischen zwei lokalen Netzwerken (LAN1 und LAN2) und drei Anbietern (ISP1, ISP2, ISP3). Der Kanal zu ISP1 hat eine statische „graue“ Adresse, ISP2 – „weiß“, bezogen über DHCP, ISP3 – „weiß“ mit PPPoE-Autorisierung. Der Anschlussplan ist in der Abbildung dargestellt:

Multivan und Routing auf Mikrotik RouterOS

Die Aufgabe besteht darin, den MTK-Router basierend auf dem Schema so zu konfigurieren, dass:

  1. Bieten Sie einen automatischen Wechsel zu einem Backup-Anbieter. Der Hauptanbieter ist ISP2, die erste Reserve ist ISP1, die zweite Reserve ist ISP3.
  2. Organisieren Sie den LAN1-Netzwerkzugriff auf das Internet nur über ISP1.
  3. Bietet die Möglichkeit, Datenverkehr von lokalen Netzwerken basierend auf der Adressliste über den ausgewählten Anbieter ins Internet zu leiten.
  4. Sorgen Sie für die Möglichkeit, Dienste vom lokalen Netzwerk ins Internet zu veröffentlichen (DSTNAT)
  5. Richten Sie einen Firewall-Filter ein, um die minimale ausreichende Sicherheit vor dem Internet zu gewährleisten.
  6. Abhängig von der gewählten Quelladresse könnte der Router seinen eigenen Datenverkehr über jeden der drei Anbieter weiterleiten.
  7. Stellen Sie sicher, dass Antwortpakete an den Kanal weitergeleitet werden, von dem sie kamen (einschließlich LAN).

ANMERKUNG. Wir werden den Router „von Grund auf neu“ konfigurieren, um sicherzustellen, dass es keine Überraschungen in den Startkonfigurationen „out of the box“ gibt, die sich von Version zu Version ändern. Als Konfigurationstool wurde Winbox gewählt, wo Änderungen visuell dargestellt werden. Die Einstellungen selbst werden durch Befehle im Winbox-Terminal festgelegt. Die physikalische Verbindung zur Konfiguration erfolgt über eine direkte Verbindung zur Ether5-Schnittstelle.

Ein paar Überlegungen darüber, was ein Multivan ist, ob er ein Problem darstellt oder ob schlaue kluge Leute Verschwörungsnetzwerke knüpfen

Ein neugieriger und aufmerksamer Administrator, der ein solches oder ein ähnliches Schema selbst einrichtet, stellt plötzlich fest, dass es bereits normal funktioniert. Ja, ja, ohne Ihre benutzerdefinierten Routing-Tabellen und anderen Routing-Regeln, mit denen die meisten Artikel zu diesem Thema voll sind. Lass uns das Prüfen?

Können wir die Adressierung auf Schnittstellen und Standard-Gateways konfigurieren? Ja:

Auf ISP1 wurden die Adresse und das Gateway registriert Abstand=2 и check-gateway=ping.
Auf ISP2 ist die Standardeinstellung des DHCP-Clients – dementsprechend ist die Entfernung gleich eins.
Auf ISP3 in den PPPOE-Client-Einstellungen wann add-default-route=yes setzen Standardroutenentfernung = 3.

Vergessen Sie nicht, NAT am Ausgang zu registrieren:

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

Infolgedessen haben Benutzer lokaler Websites Spaß daran, Katzen über den Hauptanbieter ISP2 herunterzuladen, und es gibt eine Kanalreservierung über den Mechanismus Überprüfen Sie das Gateway Siehe Anmerkung 1

Punkt 1 der Aufgabe ist umgesetzt. Wo ist der Multivan mit seinen Markierungen? Nein…

Weiter. Sie müssen bestimmte Clients über ISP1 aus dem LAN freigeben:

/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=ja route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip firewall mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=no route-dst=100.66.66.1 src-address=192.168.88.0/24

Die Punkte 2 und 3 der Aufgabe wurden umgesetzt. Schilder, Stempel, Wegregeln, wo bist du?!

Müssen Sie Clients aus dem Internet Zugriff auf Ihren bevorzugten OpenVPN-Server mit der Adresse 172.17.17.17 gewähren? Bitte:

/ip cloud set ddns-enabled=yes

Als Peer geben wir dem Kunden das Ausgabeergebnis: „:put [ip cloud get dns-name]"

Wir registrieren die Portweiterleitung aus dem Internet:

/ip firewall nat add action=dst-nat chain=dstnat dst-port=1194
in-interface-list=WAN-Protokoll=udp to-addresses=172.17.17.17

Punkt 4 ist fertig.

Wir richten für Punkt 5 eine Firewall und weitere Sicherheitsmaßnahmen ein, freuen uns gleichzeitig, dass für die Nutzer bereits alles funktioniert und greifen nach einem Behälter mit einem Lieblingsgetränk ...
A! Tunnel sind vergessen.

Ist der vom Google-Artikel konfigurierte l2tp-Client zu Ihrem bevorzugten niederländischen VDS aufgestiegen? Ja.
l2tp-Server mit IPsec ist aufgestiegen und Clients per DNS-Name aus der IP-Cloud (siehe oben) anhängen? Ja.
Wir lehnen uns in unserem Stuhl zurück, nippen an einem Drink und denken träge über die Punkte 6 und 7 der Aufgabe nach. Wir denken: Brauchen wir das? Trotzdem funktioniert es so (c) ... Wenn es also immer noch nicht benötigt wird, dann ist es das. Multivan umgesetzt.

Was ist ein Multivan? Dabei handelt es sich um die Anbindung mehrerer Internetkanäle an einen Router.

Sie müssen den Artikel nicht weiter lesen, denn was kann es da geben außer der Zurschaustellung zweifelhafter Anwendbarkeit?

Für diejenigen, die übrig bleiben, die sich für die Punkte 6 und 7 der Aufgabe interessieren und auch den Drang zum Perfektionismus verspüren, tauchen wir tiefer ein.

Die wichtigste Aufgabe bei der Umsetzung eines Multivans ist die richtige Verkehrsführung. Nämlich: unabhängig davon, welches (oder welches) Sehen. Hinweis 3: Wenn die Kanäle des Internetdienstanbieters die Standardroute auf unserem Router prüfen, sollte er eine Antwort auf den genauen Kanal zurückgeben, von dem das Paket kam. Die Aufgabe ist klar. Wo ist das Problem? In einem einfachen lokalen Netzwerk ist die Aufgabe zwar dieselbe, aber niemand kümmert sich um zusätzliche Einstellungen und hat keine Probleme. Der Unterschied besteht darin, dass jeder routbare Knoten im Internet über jeden unserer Kanäle zugänglich ist und nicht über einen streng spezifischen Kanal, wie in einem einfachen LAN. Und das „Problem“ besteht darin, dass, wenn eine Anfrage nach der IP-Adresse von ISP3 bei uns eintrifft, die Antwort in unserem Fall über den ISP2-Kanal erfolgt, da das Standard-Gateway dorthin geleitet wird. Blätter und werden vom Anbieter als falsch verworfen. Das Problem wurde identifiziert. Wie man es löst?

Die Lösung gliedert sich in drei Phasen:

  1. Voreinstellung. In dieser Phase werden die Grundeinstellungen des Routers festgelegt: lokales Netzwerk, Firewall, Adresslisten, Hairpin-NAT usw.
  2. Multivan. In dieser Phase werden die notwendigen Verbindungen markiert und in Routing-Tabellen sortiert.
  3. Verbindung zu einem ISP herstellen. In dieser Phase werden die Schnittstellen konfiguriert, die eine Verbindung zum Internet ermöglichen, das Routing und der Internet-Kanalreservierungsmechanismus werden aktiviert.

1. Voreinstellung

1.1. Wir löschen die Routerkonfiguration mit dem Befehl:

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

einverstanden mit "Gefährlich! Trotzdem zurücksetzen? [j/N]:” und nach dem Neustart verbinden wir uns über MAC mit Winbox. In dieser Phase werden die Konfiguration und die Benutzerbasis gelöscht.

1.2. Erstellen Sie einen neuen Benutzer:

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

Melden Sie sich darunter an und löschen Sie die Standardeinstellung:

/user remove admin

ANMERKUNG. Es ist die Entfernung und nicht die Deaktivierung des Standardbenutzers, die der Autor für sicherer hält und zur Verwendung empfiehlt.

1.3. Wir erstellen grundlegende Schnittstellenlisten für den bequemen Betrieb in einer Firewall, Erkennungseinstellungen und anderen MAC-Servern:

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

Signieren von Schnittstellen mit Kommentaren

/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"

und füllen Sie die Schnittstellenlisten aus:

/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"

ANMERKUNG. Es lohnt sich, dafür verständliche Kommentare zu schreiben, außerdem erleichtert es die Fehlersuche und das Verständnis der Konfiguration erheblich.

Der Autor hält es aus Sicherheitsgründen für notwendig, die Ether3-Schnittstelle zur „WAN“-Schnittstellenliste hinzuzufügen, obwohl das IP-Protokoll sie nicht passieren wird.

Vergessen Sie nicht, dass die PPP-Schnittstelle nach dem Hochfahren auf Ether3 auch zur Schnittstellenliste „WAN“ hinzugefügt werden muss.

1.4. Wir verbergen den Router vor Nachbarschaftserkennung und Kontrolle durch Provider-Netzwerke über 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. Wir erstellen den minimal ausreichenden Satz an Firewall-Filterregeln, um den Router zu schützen:

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

(Die Regel gewährt die Erlaubnis für hergestellte und verwandte Verbindungen, die sowohl von verbundenen Netzwerken als auch vom Router selbst initiiert werden.)

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

(Ping und nicht nur Ping. Alle ICMPs sind erlaubt. Sehr nützlich, um MTU-Probleme zu finden)

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

(Die Regel, die die Eingabekette schließt, verbietet alles andere, was aus dem Internet kommt)

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

(Die Regel lässt etablierte und verwandte Verbindungen zu, die über den Router laufen.)

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

(Die Regel setzt Verbindungen mit „connection-state=invalid“ zurück, die über den Router laufen. Dies wird von Mikrotik dringend empfohlen, kann aber in einigen seltenen Situationen nützlichen Datenverkehr blockieren.)

/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

(Die Regel verbietet, dass Pakete, die aus dem Internet kommen und die dstnat-Prozedur nicht durchlaufen haben, den Router passieren. Dies schützt lokale Netzwerke vor Eindringlingen, die, da sie sich in derselben Broadcast-Domäne wie unsere externen Netzwerke befinden, unsere externen IPs als registrieren Gateway und versuchen Sie so, unsere lokalen Netzwerke zu „erkunden“.)

ANMERKUNG. Nehmen wir an, dass die Netzwerke LAN1 und LAN2 vertrauenswürdig sind und der Verkehr zwischen ihnen und von ihnen nicht gefiltert wird.

1.6. Erstellen Sie eine Liste mit einer Liste nicht routbarer Netzwerke:

/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

(Dies ist eine Liste von Adressen und Netzwerken, die nicht an das Internet weitergeleitet werden können und entsprechend befolgt werden.)

ANMERKUNG. Die Liste kann sich ändern. Ich empfehle Ihnen daher, die Relevanz regelmäßig zu überprüfen.

1.7. Richten Sie DNS für den Router selbst ein:

/ip dns set servers=1.1.1.1,8.8.8.8

ANMERKUNG. In der aktuellen ROS-Version haben dynamische Server Vorrang vor statischen. Die Anfrage zur Namensauflösung wird der Reihe nach an den ersten Server in der Liste gesendet. Der Übergang zum nächsten Server erfolgt, wenn der aktuelle nicht verfügbar ist. Die Zeitüberschreitung ist groß – mehr als 5 Sekunden. Eine Rückkehr, wenn der „gefallene Server“ wieder aufgenommen wird, erfolgt nicht automatisch. Angesichts dieses Algorithmus und der Anwesenheit eines Multivans empfiehlt der Autor, keine von Anbietern bereitgestellten Server zu verwenden.

1.8. Richten Sie ein lokales Netzwerk ein.
1.8.1. Wir konfigurieren statische IP-Adressen auf LAN-Schnittstellen:

/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. Wir legen die Regeln für Routen zu unseren lokalen Netzwerken über die Haupt-Routing-Tabelle fest:

/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"

ANMERKUNG. Dies ist eine der schnellen und einfachen Möglichkeiten, auf LAN-Adressen mit Quellen externer IP-Adressen von Router-Schnittstellen zuzugreifen, die nicht über die Standardroute gehen.

1.8.3. Aktivieren Sie Hairpin NAT für LAN1 und 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

ANMERKUNG. Dadurch können Sie über eine externe IP auf Ihre Ressourcen (dstnat) zugreifen, während Sie sich im Netzwerk befinden.

2. Eigentlich die Umsetzung des ganz richtigen Multivans

Um das Problem „Antworten, woher die Frage kommt“ zu lösen, werden wir zwei ROS-Tools verwenden: Verbindungsmarkierung и Fräsmarkierung. Verbindungsmarkierung ermöglicht es Ihnen, den gewünschten Anschluss zu markieren und dann mit dieser Beschriftung als Bedingung für die Anwendung zu arbeiten Fräsmarkierung. Und schon mit Fräsmarkierung möglich, darin zu arbeiten IP-Route и Routenregeln. Wir haben die Werkzeuge herausgefunden, jetzt müssen Sie entscheiden, welche Verbindungen Sie markieren möchten – einmal und genau, wo Sie zwei markieren möchten.

Beim ersten ist alles einfach: Wir müssen alle Verbindungen markieren, die vom Internet zum Router über den entsprechenden Kanal kommen. In unserem Fall sind dies drei Labels (nach Anzahl der Kanäle): „conn_isp1“, „conn_isp2“ und „conn_isp3“.

Die Nuance bei der zweiten besteht darin, dass es zwei Arten eingehender Verbindungen gibt: Transitverbindungen und solche, die für den Router selbst bestimmt sind. Der Verbindungsmarkierungsmechanismus funktioniert in der Tabelle fehlt. Betrachten Sie die Bewegung des Pakets anhand eines vereinfachten Diagramms, das freundlicherweise von den Spezialisten der Ressource mikrotik-trainings.com (keine Werbung) zusammengestellt wurde:

Multivan und Routing auf Mikrotik RouterOS

Wenn wir den Pfeilen folgen, sehen wir, dass das Paket bei „Input-Schnittstelle“, geht durch die Kette „Vorrouten” und erst dann wird es im Block in Transit und Lokal aufgeteilt „Routing-Entscheidung". Um also zwei Fliegen mit einer Klappe zu schlagen, verwenden wir Verbindungszeichen in der Tabelle Mangle-Prerouting Ketten Vorrouten.

Hinweis:. In ROS werden „Routing Mark“-Beschriftungen im Abschnitt „Ip/Routes/Rules“ als „Table“ und in anderen Abschnitten als „Routing Mark“ aufgeführt. Dies kann zu Verwirrung beim Verständnis führen, aber tatsächlich ist dies dasselbe und ein Analogon zu rt_tables in iproute2 unter Linux.

2.1. Wir markieren eingehende Verbindungen von jedem der Anbieter:

/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

ANMERKUNG. Um bereits markierte Verbindungen nicht zu markieren, verwende ich die Bedingung „connection-mark=no-mark“ anstelle von „connection-state=new“, da dies meiner Meinung nach korrekter ist, ebenso wie die Ablehnung von Drop Invalid Connections im Eingabefilter.


passthrough=no – da bei dieser Implementierungsmethode eine erneute Markierung ausgeschlossen ist und Sie zur Beschleunigung die Aufzählung der Regeln nach der ersten Übereinstimmung unterbrechen können.

Es ist zu bedenken, dass wir noch in keiner Weise in die Streckenführung eingreifen. Jetzt gibt es nur noch Vorbereitungsschritte. Die nächste Stufe der Umsetzung wird die Verarbeitung des Transitverkehrs sein, der über die aufgebaute Verbindung vom Ziel im lokalen Netzwerk zurückkommt. Diese. die Pakete, die (siehe Diagramm) unterwegs den Router passiert haben:

„Input Interface“ => „Prerouting“ => „Routing Decision“ => „Forward“ => „Post Routing“ => „Output Interface“ und gelangten zu ihrem Adressaten im lokalen Netzwerk.

Wichtig! In ROS gibt es keine logische Unterteilung in externe und interne Schnittstellen. Wenn wir den Pfad des Antwortpakets gemäß dem obigen Diagramm verfolgen, folgt es demselben logischen Pfad wie die Anfrage:

„Input Interface“ => „Prerouting“ => „Routing Decision“ => „Forward“ => „Post Routing“ => „Output Interface“ nur für eine Anfrage“Eingangs-Schnittstelle„war die ISP-Schnittstelle und als Antwort – LAN

2.2. Wir leiten den Response-Transit-Verkehr an die entsprechenden Routing-Tabellen weiter:

/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

Kommentar. in-interface-list=!WAN – wir arbeiten nur mit Verkehr aus dem lokalen Netzwerk und dst-address-type=!local, der nicht die Zieladresse der Adresse der Schnittstellen des Routers selbst hat.

Das Gleiche gilt für lokale Pakete, die unterwegs zum Router kamen:

„Input Interface“ => „Prerouting“ => „Routing Decision“ => „Input“ => „Local Process“

Wichtig! Die Antwort wird wie folgt lauten:

„Lokaler Prozess“ => „Routing-Entscheidung“ => „Ausgabe“ => „Post-Routing“ => „Ausgabeschnittstelle“

2.3. Wir leiten den lokalen Antwortverkehr an die entsprechenden Routing-Tabellen weiter:

/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

In dieser Phase kann die Aufgabe, den Versand einer Antwort an den Internetkanal vorzubereiten, von dem die Anfrage kam, als gelöst betrachtet werden. Alles ist markiert, beschriftet und bereit zur Weiterleitung.
Ein hervorragender „Nebeneffekt“ dieses Setups ist die Möglichkeit, gleichzeitig mit der DSNAT-Portweiterleitung von beiden Anbietern (ISP2, ISP3) zu arbeiten. Überhaupt nicht, da wir auf ISP1 eine nicht routbare Adresse haben. Dieser Effekt ist beispielsweise wichtig für einen Mailserver mit zwei MXs, die unterschiedliche Internetkanäle betrachten.

Um die Nuancen des Betriebs lokaler Netzwerke mit externen IP-Routern zu beseitigen, verwenden wir die Lösungen aus den Absätzen. 1.8.2 und 3.1.2.6.

Darüber hinaus können Sie ein Werkzeug mit Markierungen verwenden, um Absatz 3 des Problems zu lösen. Wir setzen es so um:

2.4. Wir leiten den Datenverkehr von lokalen Clients von den Routinglisten an die entsprechenden Tabellen:

/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

Im Ergebnis sieht es etwa so aus:

Multivan und Routing auf Mikrotik RouterOS

3. Richten Sie eine Verbindung zum ISP ein und aktivieren Sie Branded Routing

3.1. Richten Sie eine Verbindung zu ISP1 ein:
3.1.1. Konfigurieren Sie eine statische IP-Adresse:

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

3.1.2. Statisches Routing einrichten:
3.1.2.1. Fügen Sie eine Standardroute für „Notfälle“ hinzu:

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

ANMERKUNG. Diese Route ermöglicht es dem Datenverkehr von lokalen Prozessen, die Routenentscheidungsphase zu passieren, unabhängig vom Status der Verbindungen eines der Anbieter. Die Besonderheit des ausgehenden lokalen Datenverkehrs besteht darin, dass die Haupt-Routing-Tabelle eine aktive Route zum Standard-Gateway haben muss, damit sich das Paket zumindest irgendwohin bewegen kann. Wenn nicht, wird das Paket einfach zerstört.

Als Werkzeugerweiterung Überprüfen Sie das Gateway Für eine tiefergehende Analyse des Kanalzustands empfehle ich die Verwendung der rekursiven Routenmethode. Der Kern der Methode besteht darin, dass wir den Router anweisen, nicht direkt, sondern über ein Zwischen-Gateway nach einem Pfad zu seinem Gateway zu suchen. 4.2.2.1, 4.2.2.2 und 4.2.2.3 werden als solche „Test“-Gateways für ISP1, ISP2 bzw. ISP3 ausgewählt.

3.1.2.2. Weiterleitung zur „Verifizierungs“-Adresse:

/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

ANMERKUNG. Wir senken den Bereichswert auf den Standardwert im ROS-Zielbereich, um 4.2.2.1 in Zukunft als rekursives Gateway zu verwenden. Ich betone: Der Umfang der Route zur „Test“-Adresse muss kleiner oder gleich dem Zielumfang der Route sein, die auf die Testadresse verweist.

3.1.2.3. Rekursive Standardroute für Verkehr ohne Routing-Markierung:

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

ANMERKUNG. Der Wert „distance=2“ wird verwendet, da ISP1 gemäß den Aufgabenbedingungen als erstes Backup deklariert ist.

3.1.2.4. Rekursive Standardroute für Verkehr mit Routing-Markierung „to_isp1“:

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

ANMERKUNG. Tatsächlich fangen wir hier endlich an, die Früchte der vorbereitenden Arbeiten zu genießen, die in Absatz 2 durchgeführt wurden.


Auf dieser Route wird der gesamte Datenverkehr, der die Markierungsroute „to_isp1“ hat, zum Gateway des ersten Anbieters geleitet, unabhängig davon, welches Standard-Gateway derzeit für die Haupttabelle aktiv ist.

3.1.2.5. Erste rekursive Standard-Fallback-Route für mit ISP2 und ISP3 markierten Datenverkehr:

/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

ANMERKUNG. Diese Routen werden unter anderem benötigt, um Verkehr von lokalen Netzwerken zu reservieren, die Mitglieder der Adressliste „to_isp*“ sind.

3.1.2.6. Wir registrieren die Route für den lokalen Verkehr des Routers zum Internet über ISP1:

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

ANMERKUNG. In Kombination mit den Regeln aus Abschnitt 1.8.2 ermöglicht es den Zugriff auf den gewünschten Kanal mit einer bestimmten Quelle. Dies ist entscheidend für den Aufbau von Tunneln, die die lokale IP-Adresse (EoIP, IP-IP, GRE) angeben. Da die Regeln in IP-Routenregeln von oben nach unten bis zur ersten Übereinstimmung der Bedingungen ausgeführt werden, sollte diese Regel nach den Regeln aus Abschnitt 1.8.2 stehen.

3.1.3. Wir registrieren die NAT-Regel für ausgehenden Datenverkehr:

/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

ANMERKUNG. NATim alles, was rausgeht, außer dem, was in die IPsec-Richtlinien gelangt. Ich versuche, action=masquerade nicht zu verwenden, es sei denn, dies ist unbedingt erforderlich. Es ist langsamer und ressourcenintensiver als src-nat, da es die NAT-Adresse für jede neue Verbindung berechnet.

3.1.4. Wir leiten Clients aus der Liste, denen der Zugriff über andere Anbieter untersagt ist, direkt an das Gateway des ISP1-Anbieters weiter.

/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

ANMERKUNG. action=route hat eine höhere Priorität und wird vor anderen Routing-Regeln angewendet.


place-before=0 – platziert unsere Regel an erster Stelle in der Liste.

3.2. Richten Sie eine Verbindung zu ISP2 ein.

Da uns der ISP2-Anbieter die Einstellungen über DHCP mitteilt, ist es sinnvoll, die notwendigen Änderungen mit einem Skript vorzunehmen, das beim Auslösen des DHCP-Clients startet:

/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

Das Skript selbst im Winbox-Fenster:

Multivan und Routing auf Mikrotik RouterOS
ANMERKUNG. Der erste Teil des Skripts wird ausgelöst, wenn der Mietvertrag erfolgreich abgeschlossen wurde, der zweite Teil – nachdem der Mietvertrag freigegeben wurde.Siehe Anmerkung 2

3.3. Wir richten eine Verbindung zum ISP3-Anbieter ein.

Da der Einstellungsanbieter uns Dynamik gibt, ist es sinnvoll, die notwendigen Änderungen mit Skripten vorzunehmen, die nach dem Hochfahren der PPP-Schnittstelle und nach dem Fall starten.

3.3.1. Zuerst konfigurieren wir das 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"

Das Skript selbst im Winbox-Fenster:

Multivan und Routing auf Mikrotik RouterOS
ANMERKUNG. String
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface";
ermöglicht Ihnen, die Umbenennung der Schnittstelle korrekt durchzuführen, da sie mit ihrem Code und nicht mit dem Anzeigenamen funktioniert.

3.3.2. Erstellen Sie nun mithilfe des Profils eine PPP-Verbindung:

/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

Als letzten Schliff stellen wir die Uhr ein:

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

Für diejenigen, die bis zum Ende lesen

Die vorgeschlagene Art und Weise, einen Multivan zu implementieren, hängt von den persönlichen Vorlieben des Autors ab und ist nicht die einzig mögliche. Das ROS-Toolkit ist umfangreich und flexibel, was einerseits Anfängern Schwierigkeiten bereitet und andererseits der Grund für seine Beliebtheit ist. Lernen, ausprobieren, neue Tools und Lösungen entdecken. Als Anwendung des erworbenen Wissens ist es beispielsweise möglich, das Werkzeug in dieser Umsetzung des Multivans auszutauschen Check-Gateway mit rekursiven Routen zu Netzuhr.

Aufzeichnungen

  1. Check-Gateway - ein Mechanismus, der es Ihnen ermöglicht, die Route nach zwei aufeinanderfolgenden erfolglosen Überprüfungen des Gateways auf Verfügbarkeit zu deaktivieren. Die Prüfung wird alle 10 Sekunden zuzüglich des Antwort-Timeouts durchgeführt. Insgesamt liegt der tatsächliche Schaltzeitpunkt im Bereich von 20-30 Sekunden. Sollte ein solcher Umschaltzeitpunkt nicht ausreichen, besteht die Möglichkeit, das Tool zu verwenden Netzuhr, wo der Prüftimer manuell eingestellt werden kann. Check-Gateway löst nicht aus, wenn auf der Verbindung ein zeitweiliger Paketverlust auftritt.

    Wichtig! Durch das Deaktivieren einer primären Route werden alle anderen Routen deaktiviert, die auf sie verweisen. Deshalb für sie zu spezifizieren check-gateway=ping es besteht keine Notwendigkeit.

  2. Es kommt vor, dass im DHCP-Mechanismus ein Fehler auftritt, der aussieht, als ob ein Client im Erneuerungsstatus feststeckt. In diesem Fall funktioniert der zweite Teil des Skripts nicht, verhindert aber nicht, dass der Verkehr korrekt verläuft, da der Staat die entsprechende rekursive Route verfolgt.
  3. ECMP (Equal Cost Multi-Path) - In ROS ist es möglich, eine Route mit mehreren Gateways und gleicher Entfernung festzulegen. In diesem Fall werden die Verbindungen mithilfe des Round-Robin-Algorithmus proportional zur Anzahl der angegebenen Gateways auf die Kanäle verteilt.

Als Anstoß zum Schreiben des Artikels, Hilfe bei der Gestaltung seiner Struktur und der Akzentuierung – persönlicher Dank an Evgeny @jscar

Source: habr.com