Frage Wie funktionieren richtlinienbasierte Routingtabellen?


Mein Verständnis von Policy Based Routing in Linux ist, dass es drei Hauptkomponenten gibt, die Routing-Tabellen, die Routen und die Regeln. Ich habe viele Anleitungen verfolgt und in jedem davon scheint das korrekt zu sein, also erstelle ich eine Routentabelle, füge eine Route hinzu und füge eine Regel hinzu, die den Verkehr für die Verwendung dieser Tabelle qualifiziert.

Dies erscheint mir logisch, es gibt eine Liste von Regeln und wenn Verkehr mit der Regel übereinstimmt, sucht er die Routentabelle und sagt ihm, wie er zu seinem Ziel kommt, aber das scheint nicht für mich zu funktionieren und ich bin jetzt gekommen in einer Reihe anderer Artikel, wo die Subjekte direkt nach dem Einrichten der Routingtabellen die gleichen Routen zur Hauptroutentabelle hinzufügen, ich bin nicht sicher, warum dies erforderlich ist, es sei denn, mein Verständnis davon, wie es funktionieren soll, ist falsch. oder es funktioniert nicht.

Hier ist ein gutes Beispiel aus der Linux Advanced Routing und Traffic Control HOWTO es hat den folgenden Auszug (falls der Link verschwindet):

Man erstellt zwei zusätzliche Routing-Tabellen, sagen wir T1 und T2. Diese werden in / etc / iproute2 / rt_tables hinzugefügt. Dann richten Sie das Routing in diesen Tabellen wie folgt ein:

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

Nichts Spektakuläres, bauen Sie einfach eine Route zum Gateway und bauen Sie eine Standardroute über dieses Gateway auf, wie Sie es im Fall eines einzelnen Upstream-Providers tun würden, aber legen Sie die Routen in einer separaten Tabelle pro Provider ab. Beachten Sie, dass die Netzwerkroute ausreicht, da Sie erfahren, wie Sie einen Host in diesem Netzwerk finden, der das Gateway enthält, wie oben angegeben.

Als nächstes richten Sie die Haupt-Routing-Tabelle ein. Es ist eine gute Idee, Dinge über die mit diesem Nachbarn verbundene Schnittstelle zum direkten Nachbarn zu leiten. Beachten Sie die `src'-Argumente und stellen Sie sicher, dass die richtige ausgehende IP-Adresse ausgewählt ist.

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

Dann ist Ihre Präferenz für die Standardroute:

ip route add default via $P1

Als Nächstes richten Sie die Routing-Regeln ein. Diese wählen tatsächlich, mit welcher Routing-Tabelle sie routen sollen. Sie möchten sicherstellen, dass Sie eine bestimmte Schnittstelle weiterleiten, wenn Sie bereits die entsprechende Quelladresse haben:

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

Dieser Satz von Befehlen stellt sicher, dass alle Antworten auf Verkehr, der auf einer bestimmten Schnittstelle ankommt, von dieser Schnittstelle beantwortet werden.

OK, ich verstehe also nicht, warum nach dem Hinzufügen der Routen zu der speziell erstellten neuen Routentabelle, die Sie dann zur Hauptroutentabelle hinzufügen, was war der Punkt in diesem, kann jemand erklären?


6
2017-11-25 13:46


Ursprung




Antworten:


Ich glaube, die Verwirrung kommt von der Tatsache, dass diese Anweisungen zwei Themen miteinander verbinden:

  • Umgang mit Richtlinienrouting
  • Richten Sie Ihre Standard-Routing-Tabelle auf Best-Practice-Basis ein

Diese drei Zeilen

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2
    ip route add default via $P1

Gibt es Verkehr, der aus irgendeinem Grund nicht von Ihren Richtlinienrouten abgeglichen wird (Sie fügen zum Beispiel eine Loopback auf dem Router hinzu und verwenden sie für die Verwaltung). Sie sind nicht unbedingt notwendig, damit der PBR funktioniert, aber es ist am besten, sie dort zu haben.


3
2018-01-10 05:05