Wie funktionieren richtlinienbasierte Routing-Tabellen tatsächlich?

7

Mein Verständnis von richtlinienbasiertem Routing unter Linux besteht darin, dass es drei Hauptkomponenten gibt, die Routing-Tabellen, die Routen und die Regeln. Ich habe viele Anleitungen befolgt und in jeder von ihnen scheint dies korrekt zu sein. Daher erstelle ich eine Routentabelle, füge eine Route hinzu und füge dann eine Regel für die Qualifizierung des Datenverkehrs zur Verwendung dieser Tabelle hinzu.

Dies scheint mir logisch, es gibt eine Liste von Regeln, und wenn der Verkehr mit der Regel übereinstimmt, wird in der Routentabelle nachgeschlagen und angegeben, wie das Ziel erreicht werden soll. Dies scheint jedoch für mich nicht zu funktionieren, und ich bin jetzt gekommen In einer Reihe anderer Artikel, in denen die Probanden direkt nach dem Einrichten der Routing-Tabellen dieselben Routen zur Hauptroutentabelle hinzufügen, bin ich mir nicht sicher, warum dies erforderlich ist, es sei denn, mein Verständnis, wie es funktionieren soll, ist falsch. oder es funktioniert nicht.

Hier ist ein gutes Beispiel aus dem Linux Advanced Routing & Traffic Control HOWTO , das den folgenden Auszug enthält (falls der Link verschwindet):

Man erstellt zwei zusätzliche Routing-Tabellen, z. B. T1 und T2. Diese werden in / etc / iproute2 / rt_tables hinzugefügt. Anschließend 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, erstellen Sie einfach eine Route zum Gateway und erstellen Sie eine Standardroute über dieses Gateway, wie Sie es bei einem einzelnen Upstream-Anbieter tun würden, aber legen Sie die Routen in einer separaten Tabelle pro Anbieter ab. Beachten Sie, dass die Netzwerkroute ausreicht, da sie Ihnen sagt, wie Sie einen Host in diesem Netzwerk finden, einschließlich des Gateways, wie oben angegeben.

Als nächstes richten Sie die Hauptrouting-Tabelle ein. Es ist eine gute Idee, Dinge über die mit diesem Nachbarn verbundene Schnittstelle an den direkten Nachbarn weiterzuleiten. Beachten Sie die Argumente "src". Sie stellen 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 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 aus, mit welcher Routing-Tabelle sie routen möchten. 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 Befehlssatz stellt sicher, dass alle Antworten auf Datenverkehr, der auf einer bestimmten Schnittstelle eingeht, von dieser Schnittstelle beantwortet werden.

OK, ich verstehe also überhaupt nicht, warum Sie nach dem Hinzufügen der Routen zu der speziell erstellten neuen Routentabelle diese zur Hauptroutentabelle hinzufügen. Was war der Sinn dabei, kann jemand erklären?

HuggieRich
quelle

Antworten:

3

Eigentlich denke ich, dass die Verwirrung von der Tatsache herrührt, dass diese Anweisungen zwei Themen mischen:

  • Umgang mit Richtlinienrouting
  • Richten Sie Ihre Standard-Routing-Tabelle nach bewährten Methoden 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

sind dazu da, Datenverkehr zu verarbeiten, der aus irgendeinem Grund nicht mit Ihren Richtlinienrouten übereinstimmt (Sie fügen dem Router beispielsweise einen Loopback hinzu und verwenden ihn für die Verwaltung). Sie sind nicht unbedingt erforderlich, damit die Züchterrechte funktionieren, aber es ist am besten, sie trotzdem dort zu haben.

Jeremy Gibbons
quelle