Rekursives Routing in MikroTik über von DHCP zugewiesene Gateways

Die am häufigsten gestellte Frage zur Verwendung von rekursivem Routing lautet: "Was kann ich tun, wenn der Hauptanbieter uns eine IP-Adresse über DHCP zuweist und sich das Standard-Gateway häufig ändert?"

Bild

Achtung! Die Materialien und Schemata in diesem Artikel werden zum Primitivismus vereinfacht, um eine allgemeine Vorstellung von der Methode zur Lösung des Problems zu geben. Insbesondere keine Vertiefung.

Wofür ist rekursives Routing? Überwachung der Verfügbarkeit des Internets hinter dem Gateway des Anbieters . Schließlich kommt es häufig vor, dass der Router des Anbieters perfekt auf Echoanforderungen reagiert, aber die [Up] -Verbindung des Anbieters zum globalen Netzwerk aus irgendeinem Grund verschwunden ist.

Durch rekursives Routing können Sie die Verfügbarkeit des Internetzugangs über einen ausgewählten Anbieter bewerten und über das Routing des Datenverkehrs entscheiden.

Tatsache ist jedoch, dass die Verwendung von rekursivem Routing das Vorhandensein einer direkten expliziten Angabe der IP-Adresse des mit Nägeln genagelten Gateways unter den Parametern der erstellten Route voraussetzt. Die Angabe des Namens der Broadcast-Schnittstelle als Gateway ist falsch und funktioniert in vielen Fällen einfach nicht, weil erfordert Proxy-Arp vom Anbieter. Und doch kann Proxy-Arp anstelle des Providers Ihren Nachbarn über den Provider-Switch einschalten und versuchen, Ihren Datenverkehr auf diese Weise abzufangen, indem Sie das klassische MITM arrangieren!

Die Magie des rekursiven Routings verbirgt sich hinter den Parametern "scope" und "target-scope" . Damit eine Route rekursiv funktioniert, muss ihr "Zielbereich" größer oder gleich dem "Bereich" -Wert der statischen Route sein, auf die sie sich rekursiv bezieht, und das in der Route angegebene Gateway war über eine der Schnittstellen nicht direkt erreichbar.

Betrachten Sie das einfachste Active / Backup-Schema. Unser Router führt NAT durch und ist über die Schnittstellen Ether1-isp1 und Ether2-isp2 mit zwei Anbietern verbunden. Der Hauptanbieter (ISP-1) verteilt IP-Adressen über das DHCP-Protokoll und nichts anderes an seine Clients. Der zweite Anbieter stellt uns eine statische IP-Adresse zur Verfügung, jedoch eine viel geringere Geschwindigkeit.
Das Umschalten auf das Backup (ISP-2) sollte erfolgen, wenn der Zugriff auf das Internet über den Hauptanbieter nicht mehr möglich ist.

Bild

Das Highlight des Anbieters für ein solches Schema ist die periodische willkürliche Änderung nicht nur der IP-Adresse des Clients, sondern auch des Standard-Gateways.

Vor Version 6.39 musste ich sehr ausgefeilte Krücken in verschiedenen Kombinationen von Schuppen , Netzuhr und ähnlichen Mechanismen sehen.

Ab Version 6.39 haben sich RouterOS-Entwickler mit solchen Benutzern getroffen und die Möglichkeit geschaffen, ein spezielles Skript aufzurufen, wenn der DHCP-Client auf dem Gerät ausgelöst wird.

Eigentlich besteht die Lösung aus zwei Teilen:

  1. Für die Verwendung in rekursiven Routen muss das DHCP-Protokoll von der IP-Adresse des Anbieters und der Gateway-Adresse abgerufen werden
  2. Schließen Sie nach Möglichkeit die vom Anbieter empfangene Gateway-Adresse von der automatischen Verwendung aus.

Fangen wir also am Ende an.

Wir werden eine Sicherungsroute durch ISP-2 mit einem Entfernungswert erstellen, der größer ist als der des zukünftigen Hauptwerts. In diesem Beispiel habe ich "distance = 2" verwendet:

Backup über ISP-2
/ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 distance=2

Um die Standardroute vom ISP-1-Anbieter zu erhalten, aber nicht direkt zu verwenden, gibt es einen speziellen Wert "distance = 255". Eine Route mit diesem Entfernungswert wird in die Systemroutingtabelle verschoben, jedoch niemals aktiviert .

Code
/ip dhcp-client add comment="ISP-1 dhcp" default-route-distance=255 dhcp-options=hostname,clientid interface=Ether1-isp1

Wir benötigen eine solche Route nur, um die vom Anbieter gesendeten Parameter zu lesen und sie in den Einstellungen rekursiver Routen über ein Skript zu implementieren.

Von den empfangenen Parametern interessiert uns am meisten die Variable $ gateway-address. Wie der Name schon sagt, enthält es die Adresse des Standard-Gateways im Netzwerk des Anbieters. Wir werden es verwenden, um rekursive Routen auf den neuesten Stand zu bringen.
Die rekursiven Routen selbst müssen im Skript korrekt erkannt werden. Zu diesem Zweck geben wir in der Phase ihrer Erstellung einen eindeutigen „Kommentar“ an, der verwendet wird, um sie in der Tabelle zu finden. Code zum Erstellen eines rekursiven Routenpaars:

Erstellen Sie ein Routenpaar
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=30 target-scope=30 comment=" isp1route " disabled=yes
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 check-gateway=ping


Die erste Zeile sollte (und wird!) Erst dann auf ein echtes Gateway im Netzwerk des Anbieters verweisen, wenn der Anbieter die Parameter über DHCP ausgegeben hat und sie mit dem DHCP-Client-Skript verarbeitet werden:

Vereinfachtes Skript
/ip route set [find comment=" isp1route "] gateway=($"gateway-address") disabled=no

Erweiterte Option
:if ($bound=1) do={ /ip route set [find comment=" isp1route "] gateway=($"gateway-address")disabled=no; :log warning ("New ISP1 gateway: ".($"gateway-address")) }

Nach Erhalt einer IP-Adresse vom ISP-1-Anbieter zur Verwendung als Standard-Gateway wird diese nun anstelle von 127.0.0.1 in das Routenpaar aufgenommen.
Die zweite Zeile, in der der Weg zu 0.0.0.0/0 angegeben ist, führt tatsächlich die ganze Magie aus. Der dort als Gateway angegebene 8.8.4.4-Knoten wird mit der Option „check-gateway = ping“ genau über das ISP-1-Netzwerk auf Antwort überprüft. Wenn der Knoten 8.8.4.4 nicht innerhalb von 20 Sekunden zweimal auf Echoanforderungen reagiert, betrachtet der Router die Verbindung zum Internet über diese Route (ISP-1) als nicht verfügbar. In diesem Fall werden neue Verbindungen über den ISP-2-Sicherungsanbieter weitergeleitet.

Wenn alles richtig gemacht wurde, werden im Fenster winbox / ip-> route in der Nähe der Route bis 8.8.4.4 die Wörter "resursive via ..." angezeigt. Dies bedeutet, dass die Route genauso rekursiv erstellt wurde.

Am Ende zum Beispiel nur - Fenster Bildschirm Winbox:

Bild

Source: https://habr.com/ru/post/de428097/


All Articles