Linux PBR erneut untersucht

Was ist Züchterrechte?

Es wird häufig als Policy Base Routing oder Policy-Based Routing geschrieben. (Ist letzteres ein Cisco-System?) In diesem Artikel werde ich über PBR für Linux schreiben. Wenn Sie jedoch mehr über PBR für Cisco erfahren möchten, lesen Sie bitte hier.

Bei der Konfiguration des Routings unter Linux verwenden wir Routing-Tabellen. In Wirklichkeit können jedoch mehrere Routing-Tabellen vorhanden sein, und es gibt Routing-Richtlinien, die bestimmen, welche Routing-Tabelle verwendet werden soll. PBR wird unter Verwendung dieser Routing-Richtlinie durchgeführt.

Grundlagen der Züchterrechte

Dies ist wunderschön organisiert, so dass es sich gut anfühlt. [Wie Linux die Route von Paketen auswählt](Wie wählt Linux die Route von Paketen aus)

Schauen wir uns zunächst die Standard-Routing-Richtlinie an.

# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Auf diese Weise wird im Ausgangszustand festgelegt, dass in dieser Reihenfolge die lokalen, Haupt- und Standardwerte verwendet werden. Es ist nicht auf 1-32765 eingestellt, aber Sie können die Richtlinie manuell hinzufügen. Wie sich die Routing-Richtlinie auf die Routing-Tabelle bezieht, ist

  1. Cache durchsuchen
  1. Beziehen Sie sich auf die lokale Tabelle, wenn sie sich nicht im Cache befindet
  2. Lesen Sie die manuell hinzugefügte Tabelle (falls vorhanden), falls sie nicht in der lokalen Tabelle enthalten ist
  3. Beziehen Sie sich auf die Haupttabelle, wenn sie nicht in der manuell hinzugefügten Tabelle enthalten ist
  4. Beziehen Sie sich auf die Standardtabelle, wenn sie nicht in der Haupttabelle enthalten ist

Wenn in der nächsten Regel keine Tabelle geschrieben ist, wird auf diese Weise die in der nächsten Regel geschriebene Routing-Tabelle angezeigt. Und auf den Inhalt der Routing-Tabelle wird so verwiesen.

  1. Wählen Sie unter den übereinstimmenden Routen die spezifischste Route (lange Netzmaske) aus
  1. Wenn mehrere Routen mit derselben Netzmaskenlänge vorhanden sind, wählen Sie die passende Route mit festgelegten Nutzungsbedingungen aus.
  2. Wenn es mehrere Routen mit denselben Nutzungsbedingungen gibt, wählen Sie die Route mit der kleineren Metrik aus.
  3. Wenn mehrere Routen mit derselben Metrik vorhanden sind, wählen Sie die zuletzt hinzugefügte Route aus.

"Übereinstimmende Route" bedeutet, dass die in die Routing-Tabelle geschriebene Ziel-IP (Bereich) und die Ziel-IP des Pakets, das Sie senden möchten, übereinstimmen. In der Routing-Tabelle wird die Ziel-IP als Grundlage für die Beurteilung verwendet. Wenn Sie also nach anderen Kriterien routen möchten, müssen Sie eine frühere Routing-Richtlinie verwenden.

Quellrichtlinien-Routing

Grob gesagt: "Ich möchte eine Routing-Tabelle basierend auf der Quell-IP auswählen."

Einzelheiten finden Sie in diesem Bereich. Linux Advanced Routing & Traffic Control HOWTO Routing-Einstellungen für Linux-Computer mit zwei Nic richtlinienbasiertes IP-Routing-Management Auf zwei Netzwerkkarten im selben Subnetz verweisen oder über Quellrouting sprechen Linux Policy Base Routing

Schauen wir uns nun noch einmal die Standardregeln an.

# ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Es heißt "von allen", was allen ausgehenden IPs entspricht. Fügen wir eine Regel hinzu, die die Quelle angibt.

#ip rule add from 172.10.10.1/24 table 100
#ip rule
0:      from all lookup local
32765:  from 172.10.10.1/24 lookup 100
32766:  from all lookup main
32767:  from all lookup default

Ich fürchte, wenn ich mich nicht anmelden kann, indem ich versehentlich die Quelle der Route angegeben habe, die tatsächlich für SSH usw. verwendet wird, werde ich auch das Ziel einschränken. Sie können die Referenzreihenfolge auch beschleunigen, indem Sie mit "prio" eine jüngere Nummer angeben.

#ip rule add from 172.10.10.2/24 to 172.20.20.1/32 table 101 prio 100
#ip rule
0:      from all lookup local
100:    from 172.10.10.2/24 to 172.20.20.1 lookup 101
32765:  from 172.10.10.1/24 lookup 100
32766:  from all lookup main
32767:  from all lookup default

Wenn die Quell-IP nicht angegeben ist

Insbesondere, wenn die Anwendung die Quell-IP nicht angibt (wenn Sie beispielsweise Ping drücken, fügen Sie normalerweise nur die Ziel-IP in den Befehl ein, nicht die Quell-IP. Geben Sie diese natürlich mit der Option -I an. Es ist jedoch möglich.) Anscheinend entspricht es der "von allen" -Regel. Dann wird eine übereinstimmende Route gefunden und die Quell-IP festgelegt, aber es scheint, dass auf die Routing-Richtlinie mit den Informationen dieser Quell-IP erneut verwiesen wird.

Da diesmal die Quell-IP festgelegt wurde, besteht die Möglichkeit, nicht nur "von allen", sondern auch "von XX.XX.XX.XX" zu treffen.

Der Grund, warum auf die Routing-Richtlinie zweimal verwiesen wird, liegt darin, dass die Pakete nach dem Verlassen des lokalen Prozesses die Routing-Entscheidung zweimal bestanden haben, wenn Sie sich ansehen, wie die Pakete unter Linux fließen. Ich denke, es wird. tables_traverse.jpg

Wenn die Quell-IF nicht angegeben ist

Insbesondere wenn die Anwendung keine Quell-IF angibt, folgt sie wahrscheinlich der Notation "dev XXXX" für das übereinstimmende Routing.

#ip route
default via 172.19.48.1 dev eth0
172.19.48.0/20 dev eth0 proto kernel scope link src 172.19.49.170

Mit anderen Worten, selbst wenn es sich um eine Antwort auf ein von außen kommendes Paket handelt, gibt es nicht immer eine Antwort von der empfangenen IF zurück und hält sich an das Routing. (Für die Quell-IP sollte die IP zum Zeitpunkt des Empfangs verwendet werden.)

Absender ermitteln

Ich wusste nicht, was es war, also habe ich es überprüft. Die zur Validierung verwendeten Tools sind Ping und Traceroute. Wie bereits erwähnt, können Sie mit Ping die Quelle mit der Option -I angeben. Sie können die Quelle auch mit den Optionen -i und -s in traceroute angeben.

Außerdem werden wir es hier wie folgt nennen.

Ergebnis

Angabe der Quell-IP Angabe der Quell-IF Ergebnis
Keiner Keiner Gesendet von der aufgelisteten IF mit der aufgelisteten IP
Ja Keiner Wird von der aufgelisteten IF mit der angegebenen IP gesendet
Keiner Ja Wird von der angegebenen IF mit der angegebenen IP gesendet
Ja Ja Es wird mit der angegebenen IP gesendet. Die Quell-IF wird beschrieben, sobald sie organisiert ist.

Ich möchte eine feinere Routing-Richtlinie

Durch Markieren mit der Linux-Firewall können Sie eine Routing-Richtlinie für diese Markierung schreiben.

Bitte sehen Sie hier für Details. Wenden Sie DS-Lite mit FWMARK nur auf die Ports 80 und 443 an Iptables Tutorial 1.2.2

Der Grund dafür ist, dass die Muster, die in der Linux-Firewall angegeben werden können (z. B. mit dem Befehl iptables), sehr detailliert sind. Dies gibt Ihnen mehr Flexibilität beim Schreiben von Regeln, die mit Paketen übereinstimmen.

Es gibt jedoch einige Einschränkungen.

Aus Vollständige Kontrolle des Datenverkehrs mit NETMARK und iproute2

[Hinweis] Wenn Sie das Routing mithilfe von fwmark in iproute2 steuern, wird das Standard-Gateway anscheinend als "Netzwerk nicht erreichbar" behandelt, bevor Sie zur fwmark-Tabelle wechseln. Seien Sie also vorsichtig.

Bitte beachten Sie, dass Sie möglicherweise einmal davon abhängig waren. (Zu diesem Zeitpunkt war es CentOS 7.3) Wahrscheinlich wird die Routing-Entscheidung unmittelbar nach dem Verlassen des lokalen Prozesses durchlaufen. Wenn hier also kein passendes Routing vorhanden ist, wird es als "Netzwerk nicht erreichbar" behandelt.

Ich möchte das Routing für jeden Prozess trennen

Es kann nicht mit PBR erreicht werden, aber es kann mit NameSpace erreicht werden.

Einzelheiten finden Sie in diesem Bereich. Separate Linux-Routing-Tabelle mithilfe des Netzwerk-Namespace Verwendung des Befehls ip netns (der Bereich der Netzwerkexperimente wird erweitert) ip-netns(8) — Linux manual page Versuch, mit VXLAN unter Linux umzugehen

Verwenden wir iproute2

Bisher haben wir den Befehl ip verwendet, um den Inhalt von PBR zu überprüfen, aber ich möchte auch andere Methoden erwähnen. Es wird empfohlen, die Methode zum Ändern der Einstellungen so weit wie möglich auf eine zu beschränken oder die Rollenverteilung zu klären. (Andernfalls werden Sie immer irgendwo schlagen und es kommt zu unerwarteten Unannehmlichkeiten.)

iproute2 Dieses Paket enthält IP-Befehle und so weiter. Beim Routing verwenden wir hauptsächlich die "IP-Regel", mit der die Routing-Richtlinie angezeigt und ausgeführt werden kann, und die "IP-Route", mit der die Routing-Tabelle angezeigt und ausgeführt werden kann. Der mit diesem Befehl festgelegte Inhalt wird sofort wiedergegeben, verschwindet jedoch beim Neustart. Im Notfall können Sie es neu starten, um die Herausforderung mit Zuversicht anzunehmen. Grundsätzlich sollten Sie in der Lage sein, jede Distribution (auch eingebettetes System) zu verwenden, daher ist es bequem, iproute2 zu beherrschen.

Bitte sehen Sie hier für Details. Linux Advanced Routing & Traffic Control HOWTO ip-rule(8) — Linux manual page ip-route(8) — Linux manual page Statische Routen mit IP-Befehlen konfigurieren

network-tools Ein supertypisches netzwerkbezogenes Paket, das ifconfig, arp, route und netstat enthält. Es ist jedoch heute veraltet. Viele Leute finden es einfacher, dies zu verwenden, aber wir empfehlen, ab sofort iproute2 zu verwenden.

NetworkManager

In der RedHat-Serie werden Netzwerkeinstellungen häufig mit Netowrk Manager vorgenommen. Es gibt eine GUI, aber es stehen auch TUI und CLI zur Verfügung, die mit dem Befehl nmtui bzw. dem Befehl nmcli verarbeitet werden können. Für die meisten Netzwerkeinstellungen ist nmtui ausreichend, für erweiterte Einstellungen wie diese verwenden Sie den Befehl CLI nmcli. Die Einstellungen in nmcli werden (vorerst) in diesem Artikel nicht behandelt. Dies ist jedoch praktischer, wenn Sie Ihr Netzwerk normalerweise in Network Manager konfigurieren. PBR ist jedoch nicht gut und schwer zu handhaben. Zunächst denke ich, dass es besser ist, es zu verwenden, nachdem Sie sich an die Operation mit dem Befehl ip gewöhnt haben.

Bitte sehen Sie hier für Details. Konfigurieren Sie richtlinienbasiertes Routing, um alternative Routen zu definieren (https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/configuring-policy-based-routing-to-define- alternative-routen_konfigurieren-und-verwalten-vernetzung) RHEL7-Netzwerkeinstellungen

Schreiben Sie direkt in die Konfigurationsdatei

Hier werde ich über Red Hat sprechen. (Sorry, ich bin nicht mit Debian vertraut ...) Netowork Manager, den ich zuvor eingeführt habe, verfügt über viele Umgebungen, die absichtlich gestoppt werden. Wenn Sie NetoworkManager nicht verwenden möchten, die Einstellungen aber auch nach dem Neustart erhalten bleiben sollen, können Sie dies tun, indem Sie direkt in die Einstellungsdatei schreiben. Auch hier denke ich, dass es am besten ist, sich mit dem Befehl ip daran zu gewöhnen.

Bitte sehen Sie hier für Details. Ich habe versucht, das richtlinienbasierte Routing in RHEL 7.4 festzulegen. Festlegen statischer Routen in IFCFG-Dateien Richtlinienbasiertes Routing (PBR) unter RHEL 7 und CentOS 7 festlegen

Schließlich

Bitte verzeihen Sie mir, obwohl es sich um einen ausgeschnittenen Artikel handelt, der nur Zitate und Links enthält.

Recommended Posts

Linux PBR erneut untersucht
Linux
PBR (Policy Base Routing) unter Linux
Linux Memorandum
Linux-Befehl Nr. 4
Linux-Befehl Nr. 3
Linux Übersicht
Linux-Grundlagen
direnv (linux)
Linux-Organisation
Linux-Befehle
Linux-Praxis
Ubuntu Linux 20.04
Linux-Prozess
Linux-Befehl Nr. 5
Über Linux
Linux-Grundlagen
Vergiss Linux
Über Linux
Linux-Befehl
Über Linux
Über Linux
Linux-Weiterleitung