Beim Routing wird der optimale Pfad für die Paketübertragung in TCP / IP-Netzwerken gefunden. Jedes mit einem IPv4-Netzwerk verbundene Gerät enthält Prozess- und Routing-Tabellen.
Dieser Artikel ist kein HOWTO, er beschreibt das statische Routing in RouterOS als Beispiel. Ich habe den Rest der Einstellungen absichtlich weggelassen (z. B. srcnat für den Zugriff auf das Internet), daher erfordert das Verständnis dieses Materials ein gewisses Maß an Kenntnissen über Netzwerke und RouterOS.
Switching und Routing

Beim Switching werden Pakete innerhalb eines Layer2-Segments (Ethernet, ppp, ...) ausgetauscht. Wenn das Gerät feststellt, dass sich der Paketempfänger im selben Ethernet-Subnetz befindet wie es ist, erkennt es die Mac-Adresse mithilfe des Arp-Protokolls und sendet das Paket direkt unter Umgehung des Routers. Eine ppp-Verbindung (Punkt-zu-Punkt) kann nur zwei Teilnehmer haben, und das Paket wird immer an dieselbe 0xff-Adresse gesendet.
Beim Routing werden Pakete zwischen Layer2-Segmenten übertragen. Wenn das Gerät ein Paket senden möchte, dessen Empfänger sich außerhalb des Ethernet-Segments befindet, überprüft es seine Routing-Tabelle und leitet das Paket an ein Gateway weiter, das weiß, wohin das Paket weiter gesendet werden soll (oder es weiß möglicherweise nicht, dass der ursprüngliche Absender des Pakets dies nicht weiß).
Der einfachste Weg, einen Router in Betracht zu ziehen, besteht darin, ein Gerät zu verwenden, das mit zwei oder mehr Layer2-Segmenten verbunden ist und Pakete zwischen diesen übertragen kann, um die optimale Route aus der Routing-Tabelle zu bestimmen.
Wenn Ihnen alles klar ist oder Sie es bereits gewusst haben, lesen Sie weiter. Ich empfehle anderen dringend, einen kleinen, aber sehr umfassenden Artikel zu lesen.
Routing in RouterOS und PacketFlow
Fast alle Funktionen im Zusammenhang mit statischem Routing sind im Systempaket enthalten. Das Routing- Paket bietet Unterstützung für dynamische Routing-Algorithmen (RIP, OSPF, BGP, MME), Routing-Filter und BFD.
Das Hauptmenü zum Konfigurieren des Routings: [IP]->[Route]
. Komplexe Schemata erfordern möglicherweise eine vorläufige Kennzeichnung von Paketen mit einem Routing-Label in: [IP]->[Firewall]->[Mangle]
( PREROUTING
und OUTPUT
Ketten).
Es gibt drei Stellen in PacketFlow, an denen Entscheidungen über das Weiterleiten von IP-Paketen getroffen werden:

- Vom Router empfangene Routing-Pakete. In dieser Phase wird entschieden, dass das Paket an den lokalen Prozess gesendet oder weiter an das Netzwerk gesendet wird. Transitpakete erhalten eine Ausgabeschnittstelle
- Routing lokaler ausgehender Pakete. Ausgehende Pakete erhalten eine Ausgabeschnittstelle
- Ein zusätzlicher Routing-Schritt für ausgehende Pakete ermöglicht es Ihnen, die Routing-Entscheidung in
[Output|Mangle]
zu ändern.
- Der Paketpfad in den Blöcken 1, 2 hängt von den Regeln in
[IP]->[Route]
- Der Paketpfad in den Schritten 1, 2 und 3 hängt von den Regeln in
[IP]->[Route]->[Rules]
- Der Paketpfad in den Blöcken 1, 3 kann mit
[IP]->[Firewall]->[Mangle]
RIB, FIB, Routing-Cache

Routing-Informationsbasis
Die Basis, auf der Routen von dynamischen Routing-Protokollen gesammelt werden, Routen von ppp und dhcp, statische und verbundene Routen. Diese Datenbank enthält alle Routen mit Ausnahme der vom Administrator gefilterten.
Konventionell können wir davon ausgehen, dass [IP]->[Route]
RIB anzeigt.
Weiterleitungsinformationsbasis

Die Basis, auf der die besten Routen von RIB verlaufen. Alle Routen in der FIB sind aktiv und werden zum Weiterleiten von Paketen verwendet. Wenn die Route inaktiv wird (vom Administrator (System) deaktiviert oder die Schnittstelle, über die das Paket gesendet werden soll, inaktiv ist), wird die Route aus der FIB gelöscht.
Um eine Entscheidung über das Routing zu treffen, werden die folgenden IP-Paketdaten in der FIB-Tabelle verwendet:
- Quelladresse
- Zieladresse
- Quellschnittstelle
- Routing-Marke
- ToS (DSCP)
Der Einstieg in das FIB-Paket umfasst die folgenden Schritte:
- Ist das Paket für den lokalen Router-Prozess ausgelegt?
- Fällt das Paket unter die PBR-System- oder Benutzerregeln?
- In diesem Fall wird das Paket an die angegebene Routing-Tabelle gesendet.
- Das Paket wird an die Haupttabelle gesendet
Konventionell können wir davon ausgehen, dass [IP]->[Route Active=yes]
FIB anzeigt.
Routing-Cache
Der Mechanismus zum Zwischenspeichern von Routen. Der Router merkt sich, wohin die Pakete gesendet wurden, und wenn es ähnliche gibt (vermutlich von derselben Verbindung), startet er sie auf derselben Route, ohne die FIB einzuchecken. Der Routen-Cache wird regelmäßig gelöscht.
Für Administratoren hatte RouterOS nicht die Möglichkeit, den Routing-Cache anzuzeigen und zu verwalten, aber mit ihm können Sie ihn unter [IP]->[Settings]
deaktivieren.
Dieser Mechanismus wurde aus dem Linux 3.6-Kernel entfernt, aber Kernel 3.3.5 wird weiterhin in RouterOS verwendet. Möglicherweise ist der Routing-Cache einer der Gründe.
Dialogfeld "Route hinzufügen"
[IP]->[Route]->[+]

- Das Subnetz, für das Sie eine Route erstellen möchten (Standard: 0.0.0.0/0)
- Gateway-IP oder Schnittstelle, an die das Paket gesendet wird (es können mehrere vorhanden sein, siehe ECMP unten)
- Überprüfen der Gateway-Verfügbarkeit
- Datensatztyp
- Entfernung (metrisch) für die Route
- Routing-Tabelle
- IP für lokale ausgehende Pakete über diese Route
- Der Zweck von Scope und Target Scope steht am Ende des Artikels.
Routenflaggen

- X - Die Route wird vom Administrator
disabled=yes
( disabled=yes
). - A - Die Route wird zum Übertragen von Paketen verwendet.
- D - Route dynamisch hinzugefügt (BGP, OSPF, RIP, MME, PPP, DHCP, verbunden)
- C - Das Subnetz ist direkt mit dem Router verbunden
- S - Statische Route
- r, b, o, m - Die Route wurde von einem der dynamischen Routing-Protokolle hinzugefügt
- B, U, P - Filterroute (verwirft Pakete anstatt zu senden)
Was ist im Gateway anzugeben: IP-Adresse oder Schnittstelle?
Das System ermöglicht es Ihnen, beide anzugeben, während es nicht schwört und keine Hinweise gibt, wenn Sie etwas falsch gemacht haben.
IP-Adresse
Die Gateway-Adresse muss über Layer2 zugänglich sein. Für Ethernet bedeutet dies, dass der Router eine IP-Adresse aus demselben Subnetz auf einer der aktiven Schnittstellen haben muss, für ppp - dass die Gateway-Adresse auf einer der aktiven Schnittstellen als Subnetzadresse aufgeführt ist.
Wenn die Verfügbarkeitsbedingung für Layer2 nicht erfüllt ist, wird die Route als inaktiv betrachtet und fällt nicht in die FIB.
Schnittstelle
Alles ist komplizierter und das Verhalten des Routers hängt von der Art der Schnittstelle ab:
- PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *) Bei der Verbindung wird davon ausgegangen, dass nur zwei Teilnehmer vorhanden sind. Das Paket wird immer zur Übertragung an das Gateway gesendet. Wenn das Gateway erkennt, dass es der Empfänger selbst ist, überträgt es das Paket an seinen lokalen Prozess.

- Ethernet geht davon aus, dass es viele Teilnehmer gibt, und sendet Anforderungen mit der Adresse des Paketempfängers an die Arp-Schnittstelle. Dies ist das erwartete und ganz normale Verhalten für verbundene Routen.
Wenn Sie jedoch versuchen, die Schnittstelle als Route für ein Remote-Subnetz zu verwenden, tritt die folgende Situation auf: Die Route ist aktiv, Ping wird an das Gateway weitergeleitet, erreicht den Empfänger jedoch nicht über das angegebene Subnetz. Wenn Sie die Schnittstelle über einen Sniffer betrachten, werden Arp-Anforderungen mit Adressen aus einem Remote-Subnetz angezeigt.


Versuchen Sie, wann immer möglich, die IP-Adresse als Gateway anzugeben. Die Ausnahmen sind verbundene Routen (automatisch erstellt) und PPP-Schnittstellen (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *).
OpenVPN enthält keinen PPP-Header, aber Sie können den Namen der OpenVPN-Schnittstelle verwenden, um die Route zu erstellen.
Spezifischere Route
Die Grundregel des Routings. Eine Route, die ein kleineres Subnetz (mit der größten Subnetzmaske) beschreibt, hat eine höhere Priorität bei der Entscheidung über das Paketrouting. Die Position der Einträge in der Routing-Tabelle hängt nicht mit der Auswahl zusammen - die Grundregel lautet Spezifischer.

Alle Routen aus dem angegebenen Schema sind aktiv (in der FIB), weil Zeigen Sie auf verschiedene Subnetze und stehen Sie nicht in Konflikt miteinander.
Wenn eines der Gateways nicht mehr verfügbar ist, wird die zugehörige Route als inaktiv (aus der FIB entfernt) betrachtet und von den verbleibenden Routen nach Paketen gesucht.
Eine Route mit einem Subnetz von 0.0.0.0/0 hat manchmal eine besondere Bedeutung und wird als „Standardroute“ oder „Gateway des letzten Auswegs“ bezeichnet. Tatsächlich ist nichts Magisches daran und es enthält einfach alle möglichen IPv4-Adressen, aber diese Namen beschreiben seinen Zweck gut - es gibt ein Gateway an, an das Pakete weitergeleitet werden sollen, für die es keine anderen, genaueren Routen gibt.
Die maximal mögliche Subnetzmaske für IPv4 ist / 32; diese Route zeigt auf einen bestimmten Host und kann in der Routing-Tabelle verwendet werden.
Das Verständnis der spezifischeren Route ist für jedes TCP / IP-Gerät von grundlegender Bedeutung.
Entfernung
Entfernungen (oder Metriken) sind für die administrative Filterung von Routen zu einem Subnetz erforderlich, auf das über mehrere Gateways zugegriffen werden kann. Eine Route mit einer niedrigeren Metrik wird als Priorität betrachtet und befindet sich in der FIB. Wenn eine Route mit einer niedrigeren Metrik nicht mehr aktiv ist, wird sie in der FIB durch eine Route mit einer höheren Metrik ersetzt.

Wenn es mehrere Routen zu demselben Subnetz mit derselben Metrik gibt, fügt der Router der FIB-Tabelle nur eine davon hinzu, die von seiner internen Logik geleitet wird.
Die Metrik kann einen Wert von 0 bis 255 annehmen:

- 0 - Metrik für verbundene Routen. Der Abstand 0 kann vom Administrator nicht festgelegt werden
- 1-254 - Dem Administrator zur Verfügung stehende Metriken zum Festlegen von Routen. Metriken mit einem niedrigeren Wert haben Vorrang.
- 255 - Dem Administrator zur Verfügung stehende Metrik zum Festlegen von Routen. Im Gegensatz zu 1-254 bleibt eine Route mit einer Metrik von 255 immer inaktiv und fällt nicht in die FIB
- Spezielle Metriken. Von dynamischen Routing-Protokollen empfangene Routen haben Standardmetrikwerte
Überprüfen Sie das Gateway
Gateway überprüfen - MikroTik RoutesOS-Erweiterung zur Überprüfung der Gateway-Verfügbarkeit über icmp oder arp. Alle 10 Sekunden (kann nicht geändert werden) wird eine Anfrage an das Gateway gesendet. Wenn die Antwort nicht zweimal eingeht, wird die Route als nicht verfügbar betrachtet und aus der FIB entfernt. Wenn das Prüfgateway die Überprüfungsroute deaktiviert hat, wird sie fortgesetzt und die Route wird nach einer erfolgreichen Prüfung wieder aktiv.

Check Gateway deaktiviert den Eintrag, in dem es konfiguriert ist, und alle anderen Einträge (in allen Routing-Tabellen und ecmp-Routen) mit dem angegebenen Gateway.
Im Allgemeinen funktioniert das Überprüfen des Gateways einwandfrei, wenn kein Problem mit dem Paketverlust zum Gateway vorliegt. Check Gateway weiß nicht, was mit der Kommunikation außerhalb des überprüften Gateways passiert. Hierfür werden zusätzliche Tools benötigt: Skripte, rekursives Routing, dynamische Routing-Protokolle.
Die meisten VPNs und Tunneling-Protokolle enthalten integrierte Tools zum Überprüfen der Verbindungsaktivität. Das Aktivieren des Check-Gateways für sie ist eine zusätzliche (aber sehr geringe) Belastung für die Netzwerk- und Geräteleistung.
ECMP-Routen
Equal-Cost Multi-Path - Senden von Paketen an den Empfänger über mehrere Gateways gleichzeitig mit dem Round Robin-Algorithmus.
Eine ECMP-Route wird vom Administrator erstellt, indem mehrere Gateways für ein Subnetz angegeben werden (oder automatisch, wenn zwei OSPF-äquivalente Routen vorhanden sind).

ECMP wird verwendet, um die Last zwischen zwei Kanälen auszugleichen. Wenn sich in einer ecmp-Route theoretisch zwei Kanäle befinden, sollte der ausgehende Kanal für jedes Paket unterschiedlich sein. Der Routing-Cache-Mechanismus sendet jedoch Pakete von der Verbindung entlang der Route, zu der das erste Paket gegangen ist. Infolgedessen erhalten wir eine Art Lastausgleich pro Verbindung.
Wenn Sie den Routing-Cache deaktivieren, werden die Pakete in der ECMP-Route korrekt aufgeteilt, es liegt jedoch ein Problem mit NAT vor. Die NAT-Regel verarbeitet nur das erste Paket von der Verbindung (der Rest wird automatisch verarbeitet), und die Situation besteht darin, dass Pakete mit einer Quelladresse von verschiedenen Schnittstellen stammen.

Überprüfen Sie, ob das Gateway (RouterOS-Fehler) in ECMP-Routen nicht funktioniert. Sie können diese Einschränkung jedoch umgehen, wenn Sie zusätzliche Routen zur Überprüfung erstellen, wodurch Einträge in ECMP deaktiviert werden.
Routing-Filterung
Die Option Typ bestimmt, was mit dem Paket geschehen soll:
- Unicast - an das angegebene Gateway (Schnittstelle) senden
- Schwarzes Loch - lassen Sie das Paket fallen
- Verbieten, nicht erreichbar - Verwerfen Sie das Paket und senden Sie eine ICMP-Nachricht an den Absender
Das Filtern wird normalerweise verwendet, wenn Sie das Senden von Paketen auf die falsche Weise sichern müssen. Natürlich können Sie dies durch eine Firewall filtern.
Ein paar Beispiele
Zur Behebung grundlegender Probleme beim Routing.
Typischer Heimrouter

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1
- Statische Route zu 0.0.0.0/0 (Standardroute)
- Verbundene Route auf der Schnittstelle mit dem Anbieter
- Verbundene Route auf der LAN-Schnittstelle
Typischer PPPoE-Heimrouter

- Statische Route zur Standardroute, seitdem automatisch hinzugefügt Dies ist in den Verbindungseigenschaften angegeben
- Verbundene Route für PPP-Verbindung
- Verbundene Route auf der LAN-Schnittstelle
Typischer Heimrouter mit zwei Anbietern und Redundanz

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
- Statische Route zur Standardroute durch den ersten Anbieter mit Metrik 1 und Überprüfung der Verfügbarkeit des Gateways
- Statische Route zur Standardroute durch den zweiten Anbieter mit Metrik 2
- Verbundene Routen
Der Datenverkehr zu 0.0.0.0/0 läuft über 10.10.10.1, während dieses Gateway verfügbar ist, andernfalls wechselt es zu 10.20.20.1
Ein solches Schema kann als Kanalreservierung angesehen werden, ist jedoch nicht ohne Nachteile. Wenn eine Unterbrechung außerhalb des Gateways des Anbieters auftritt (z. B. innerhalb des Carrier-Netzwerks), weiß Ihr Router nichts davon und betrachtet die Route weiterhin als aktiv.
Typischer Heimrouter mit zwei Anbietern, Redundanz und ECMP

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1
- Statische Routen zum Überprüfen des Chack-Gateways
- ECMP-Route
- Verbundene Routen
Routen zur Überprüfung von Blau (die Farbe inaktiver Routen), die jedoch den Betrieb des Überprüfungsgateways nicht beeinträchtigen. In der aktuellen Version (6.44) RoS wird der ECMP-Route automatisch Priorität eingeräumt. Es ist jedoch besser, Testrouten zu anderen Routing-Tabellen hinzuzufügen (Option routing-mark
).
Auf Speedtest und anderen ähnlichen Sites wird die Geschwindigkeit nicht erhöht (ECMP teilt den Datenverkehr eher durch Verbindungen als durch Pakete), aber P2P-Anwendungen sollten schneller geladen werden.
Filtern durch Routing

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1 add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole
- Statische Route zur Standardroute
- Statische Route zum 192.168.200.0/24 über den IPip-Tunnel
- Verbieten der statischen Route zu 192.168.200.0/24 über den Router des Anbieters
Eine Filteroption, bei der der Tunnelverkehr nicht zum Router des Anbieters geleitet wird, wenn die IPIP-Schnittstelle deaktiviert ist. Solche Schemata sind selten erforderlich, weil Es ist möglich, das Blockieren durch eine Firewall zu implementieren.
Routing-Schleife
Eine Routing-Schleife ist eine Situation, in der ein Paket zwischen Routern ausgeführt wird, bevor ttl abläuft. Normalerweise ist es eine Folge eines Konfigurationsfehlers, in großen Netzwerken wird es durch die Implementierung dynamischer Routing-Protokolle behandelt, in kleinen Netzwerken - vorsichtig.
Es sieht ungefähr so aus:

Beispiel (am einfachsten), wie man ein ähnliches Ergebnis erzielt:

Das Beispiel für eine Routing-Schleife hat keine praktische Verwendung, zeigt jedoch, dass Router keine Ahnung von der Routing-Tabelle ihrer Nachbarn haben.
Richtlinienbasis-Routing und zusätzliche Routing-Tabellen
Bei der Auswahl einer Route verwendet der Router nur ein Feld aus dem Paket-Header (Dst. Adresse) - dies ist das grundlegende Routing. Routing basierend auf anderen Bedingungen wie Quelladresse, Verkehrstyp (ToS), Ausgleich ohne ECMP bezieht sich auf Policy Base Routing (PBR) und verwendet zusätzliche Routing-Tabellen.

Spezifischere Route ist die Grundregel für die Auswahl einer Route innerhalb einer Routing-Tabelle.
Standardmäßig werden alle Routing-Regeln zur Haupttabelle hinzugefügt. Ein Administrator kann eine beliebige Anzahl zusätzlicher Routing-Tabellen erstellen und Pakete an diese weiterleiten. Regeln in verschiedenen Tabellen stehen nicht in Konflikt miteinander. Wenn das Paket in der angegebenen Tabelle keine geeignete Regel findet, wird es in die Haupttabelle verschoben.
Verteilungsbeispiel über Firewall:

- 192.168.100.10 -> 8.8.8.8
- Der Datenverkehr von 192.168.100.10 erhält das Via-isp1-Label in
[Prerouting|Mangle]
- In der Routing-Phase wird in der Tabelle via-isp1 eine Route bis 8.8.8.8 gesucht
- Die Route wird gefunden, der Verkehr wird an das Gateway 10.10.10.1 gesendet
- 192.168.200.20 -> 8.8.8.8
- Der Datenverkehr vom 192.168.200.20 erhält das Via-isp2-Label in
[Prerouting|Mangle]
- In der Routing -Phase sucht die Tabelle via-isp2 nach einer Route bis 8.8.8.8
- Die Route wird gefunden, der Verkehr wird an das Gateway 10.20.20.1 gesendet
- Wenn eines der Gateways (10.10.10.1 oder 10.20.20.1) nicht mehr verfügbar ist, wird das Paket an die Haupttabelle gesendet und sucht dort nach einer geeigneten Route
Terminologieprobleme
RouterOS weist bestimmte Terminologieprobleme auf.
Bei der Arbeit mit Regeln in [IP]->[Routes]
Routing-Tabelle angezeigt, obwohl auf dem Etikett Folgendes angegeben ist:

In [IP]->[Routes]->[Rule]
ist in der Bedingungsbezeichnung in der Tabellenaktion alles korrekt:

So senden Sie ein Paket an eine bestimmte Routing-Tabelle
RouterOS bietet verschiedene Tools:
- Regeln in
[IP]->[Routes]->[Rules]
- Routenbeschriftungen (
action=mark-routing
) in [IP]->[Firewall]->[Mangle]
- VRF
Regeln [IP]->[Route]->[Rules]
Regeln werden nacheinander verarbeitet. Wenn das Paket den Bedingungen der Regel entspricht, geht es nicht weiter.
Mit den Routing-Regeln können Sie die Routing-Funktionen erweitern und sich dabei nicht nur auf die Empfängeradresse, sondern auch auf die Quelladresse und die Schnittstelle verlassen, an die das Paket empfangen wurde.

Regeln bestehen aus Bedingungen und Aktionen:
- Bedingungen. Sie wiederholen praktisch die Liste der Zeichen, anhand derer das Paket in der FIB geprüft wird, nur ToS fehlt.
- Aktionen
- Lookup - Senden Sie ein Paket an eine Tabelle
- Nur in Tabelle suchen - Sperren Sie das Paket in der Tabelle. Wenn die Route nicht gefunden wird, wird das Paket nicht in die Haupttabelle verschoben
- drop - Verwerfen Sie das Paket
- nicht erreichbar - Löschen Sie das Absender-Benachrichtigungspaket
In der FIB wird der Datenverkehr zu lokalen Prozessen unter Umgehung der Regeln [IP]->[Route]->[Rules]
:

Markierung [IP]->[Firewall]->[Mangle]
Mit Routenbezeichnungen können Sie das Gateway für das Paket unter nahezu allen Firewall-Bedingungen festlegen:

Praktisch, weil nicht alle sinnvoll sind und einige möglicherweise instabil arbeiten.

Es gibt zwei Möglichkeiten, ein Paket zu markieren:
- Routing-Marke sofort setzen
- Setzen Sie zuerst die Verbindungsmarke , dann basierend auf der Verbindungsmarke die Routingmarke
In einem Artikel über Firewall schrieb ich, dass die zweite Option vorzuziehen ist, weil reduziert die CPU-Belastung beim Markieren von Routen - dies ist nicht ganz richtig. Diese Markierungsmethoden sind nicht immer gleichwertig und werden normalerweise zur Lösung verschiedener Probleme verwendet.
Anwendungsbeispiele
Wir gehen auf Beispiele für die Verwendung von Policy Base Routing ein. Es ist viel einfacher, ihnen zu zeigen, warum dies alles erforderlich ist.
MultiWAN und ausgehender Antwortverkehr (Ausgabe)
Ein häufiges Problem bei der MultiWAN-Konfiguration: Auf Mikrotik kann nur über den "aktiven" Anbieter aus dem Internet zugegriffen werden.

Für den Router spielt es keine Rolle, auf welche IP die Anforderung eingegangen ist. Beim Generieren einer Antwort wird in der Routing-Tabelle nach einer Route gesucht, auf der die Route über isp1 aktiv ist. Ferner wird ein solches Paket höchstwahrscheinlich auf dem Weg zum Empfänger gefiltert.
Ein weiterer interessanter Punkt. Wenn die "einfache" Quelle nat auf der ether1-Schnittstelle konfiguriert ist: /ip fi nat add out-interface=ether1 action=masquerade
Paket mit src an das Netzwerk gesendet. Adresse = 10.10.10.100, was die Situation weiter verschärfen wird.
Es gibt verschiedene Möglichkeiten, um das Problem zu beheben, für jede sind jedoch zusätzliche Routing-Tabellen erforderlich:

/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2 add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2
Verwenden von [IP]->[Route]->[Rules]
Geben Sie die Routing-Tabelle an, die für Pakete mit der angegebenen Quell-IP verwendet wird.

/ip route rule add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1 add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2
Sie können action=lookup
, aber für lokalen ausgehenden Datenverkehr schließt diese Option Verbindungen von der falschen Schnittstelle vollständig aus.
- Das System generiert ein Antwortpaket mit Src. Adresse: 10.20.20.200
- In der Phase der Routing-Entscheidung (2) wird
[IP]->[Routes]->[Rules]
überprüft und das Paket an die Routing-Tabelle over-isp2 gesendet - Gemäß der Routing-Tabelle muss das Paket über die ether2-Schnittstelle an das Gateway 10.20.20.1 gesendet werden

Diese Methode erfordert im Gegensatz zur Verwendung der Mangle-Tabelle keinen funktionierenden Connection Tracker.
Verwenden von [IP]->[Firewall]->[Mangle]
Die Verbindung beginnt mit dem eingehenden Paket, daher markieren wir es ( action=mark-connection
). Für ausgehende Pakete von der markierten Verbindung setzen wir die Routenbezeichnung ( action=mark-routing
).

/ip firewall mangle # add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1 add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2 # add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no
ip, dst-address
.
- ether2 .
[INPUT|Mangle]
from-isp2 - Src. Address: 10.20.20.200
- Routing Decision(2) 10.20.20.1 ether1.
[OUTPUT|Filter]
[OUTPUT|Mangle]
from-isp2 over-isp2- Routing Adjusment(3)
- 10.20.20.1 ether2

MultiWAN dst-nat
, ( web) .
/ip firewall nat add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100 add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100
, Firewall Mangle, :

/ip firewall mangle add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1 add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2 add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no

NAT, .
MultiWAN
PBR vpn ( SSTP) .

:
/ip route add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3 add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3
:
/ip firewall mangle add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no
NAT, Src. Adresse:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade add chain=srcnat out-interface=ether3 action=masquerade
:
- SSTP
- Routing Decision (2) , main. Src. Address ether1
[Output|Mangle]
- Routing Adjusment
- Src. Address ether1,
[Nat|Srcnat]
, :

Connection Tracker [Mangle]
[Srcnat]
, , Replay Dst. Address
NAT:

VPN ( ) :

, :
/ip route add dst-address=10.10.10.100 gateway=192.168.100.1 add dst-address=10.10.10.101 gateway=192.168.200.1 add dst-address=10.10.10.102 gateway=192.168.0.1
. , vpn , 6 [IP]->[Routes]
type=blackhole
. — 3 [IP]->[Route]->[Rules]
.
, . :
/ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2
[IP]->[Route]->[Rules]

/ip route rules add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1 add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2
action=lookup
, main . — .
[IP]->[Firewall]->[Mangle]
ip . . layer7, , , .

/ip firewall mangle add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2
"" [IP]->[Route]->[Rules]
:
/ip route rules add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1 add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2
[IP]->[Firewall]->[Filter]
:
/ip firewall filter add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject
dst-address-type=!local
dst-address-type=!local
(dns, winbox, ssh, ...). , , dst-address-table
.
[IP]->[Route]->[Rules]
, . , FIB [PREROUTING|Mangle]
main, . Routing Rules, User PBR .
[IP]->[Firewall]->[Mangle action=route]
[Prerouting|Mangle]
, :
/ip firewall mangle add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1 add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1
route
( [IP]->[Route]->[Rules]
). , action=route
action=mark-route
, ( passtrough
), .
wiki , .
PPC
Per Connection Classificator — ECMP. ECMP (ECMP , Routing Cache ).
PCC ip , 32- . , . Weitere Details . , .

:
192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0 192.168.100.12: 192+168+100+12 = 472 % 3 = 1
src.address :

# /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3 # /ip firewall mangle add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3
: in-interface=br-lan
, action=mark-routing
.
Check ping — , IP , , , check ping .
BGP, .
, ip , , google dns: 8.8.8.8. 8.8.4.4. Mikrotik .
Multihop BGP MikroTik, check gateway .
scope/target scope :

- scope main target scope
- ,
- connected
, :

- 1-3 connected ,
- 4-6 connected ""
RIB, FIB : 0.0.0.0/0 via 10.10.10.1 on ether1
.

Konfiguration:

/ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10 add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10 add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2
, 10.10.10.1:

Check gateway ping' 8.8.8.8, ( main) 10.10.10.1.
10.10.10.1 8.8.8.8, , ( ping) 8.8.8.8 10.10.10.1:

ether1, , 8.8.8.8 :

, NetWatch 8.8.8.8. NetWatch . :
/ip route add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole

, NetWatch .
, 8.8.8.8 , dns .
Virtual Routing and Forwarding (VRF)
VRF , ( MPLS) L3VPN :

VRF Mikrotik , ip VRF, .
vrf:

/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.200.1/24 interface=ether2 network=192.168.200.0
ether2 , ping vrf ( ), ping :

main ( vrf route leaking):

/ip route add distance=1 gateway=172.17.0.1@main routing-mark=vrf1 add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2
route leaking: : 172.17.0.1@main
: 172.17.0.1%wlan1
.
[PREROUTING|Mangle]
:

/ip firewall mangle add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no

VRF netmap:

:
/ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.100.1/24 interface=ether2 network=192.168.100.0 add address=192.168.0.1/24 interface=ether3 network=192.168.0.0
firewall:
# /ip firewall mangle add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no # netmap "" /ip firewall nat add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24
:
# route leaking, connected /ip route add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1 add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2
dhcp
VRF , ( dhcp client) .
vrf:
/ip route vrf add interface=ether1 routing-mark=over-isp1
( ) over-isp1 :
/ip firewall mangle add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no
, :
/interface bridge add name=bare /ip route add dst-address=0.0.0.0/0 gateway=bare
Routing decision (2) [OUTPUT|Mangle]
, 0.0.0.0/0 main .

connected-in
dynamic-in
[Routing] -> [Filters]
( ) — ( routing ), :
- connected-in — connected
- dynamic-in — PPP DCHP
, : distance, routing-mark, comment, scope, target scope, ...
- Routing Filters ( ), Routing Filters, . Routing Filters .
Routing Mark
. VPN . - :
# vpn default route /interface pptp-client add connect-to=XXXX add-default-route=yes default-route-distance=101 ... add connect-to=YYYY add-default-route=yes default-route-distance=100 ... # /routing filter add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1 add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2
, , vrf ppp , 0.0.0.0/0 main. .
Connected
:
/route filter add chain=connected-in prefix=192.168.100.0/24 action=reject
RouterOS :
[Tool]->[Torch]
—/ip route check
— ,/ping routing-table=<name>
/tool traceroute routing-table=<name>
— pingaction=log
[IP]->[Firewall]
— , packet flow,