Auswahl der ausgehenden Schnittstelle in oder nach der POSTROUTING-Kette beeinflussen?

Auswahl der ausgehenden Schnittstelle in oder nach der POSTROUTING-Kette beeinflussen?

Ich habe ein System, das eine Reihe von KVM-Instanzen hostet. Alle diese sind mit einer einzigen Brücke (sagen wir brvirt) verbunden, mit der auch verbunden ist eth1. Diese Layer-2-Umgebung befindet sich in einem privaten Netzwerk und verwendet 172.16.10.0/24 für eine Adressänderung. Es gibt zwei weitere Schnittstellen auf dem System, die wir eth0(10.10.10.10) und eth2(10.10.20.20) nennen.

Im Allgemeinen wird die externe Konnektivität über SNATdie Adresse von bereitgestellt eth0(und das Standard-Gateway des Hosts ist ebenfalls über diese Schnittstelle). Füreinige Systeme, ich möchte eine explizite 1-1- SNATRegel für das Netzwerk 10.10.20.0/24, das an angeschlossen ist eth2.

Dies ist ein Problem, da die Auswahl der ausgehenden Schnittstelle bereits erfolgt ist, wenn wir die POSTROUTINGKette erreichen, um dies durchzuführen . Der Kernel hat bereits die Standardroute ausgewählt (unter der Annahme einer Verbindung zu einem anderen als einem direkt angeschlossenen Netzwerk). Wenn die Regel also die Quell-IP-Adresse ändert, verwirft die lokale Routing-Infrastruktur das Paket, da es aus dem falschen Layer-2-Netzwerk stammt.SNATSNAT

Gibt es einen Weg, das zu umgehen? Was ichWirklichSie möchten Routing-Entscheidungen auf Grundlage der Quelladresse des Pakets am Ende der POSTROUTINGKette treffen … aber dieser Aufruf erfolgt POSTROUTINGaus gutem Grund.

Antwort1

Dies kann mit einfachem, richtlinienbasiertem Routing erfolgen.

Sie benötigen einen Satz Regeln und Routen mit dem Schema:

ip rule add from 172.16.10.X iif brvirt lookup 200
ip route add default via 1.2.3.4 src 4.3.2.1 dev ethY table 200

Variablen:

172.16.10.X = KVM's IP
200         = Example value for routing_table, has to be unique for each KVM
ethY        = either eth0 or eth2
1.2.3.4     = Example Gateway on iface ethY
4.3.2.1     = Example Source-IP for each KVM

Dies leitet alles weiter, was 172.16.10.Xüber die angegebene Schnittstelle kommt ethY, mit der Quelladresse von4.3.2.1

Sie können es auch komplexer machen, fwmarksaber ich glaube nicht, dass das in diesem Fall nötig ist.

Sie können die Routen mit überprüfen: ip route get iif brvirt from 172.16.10.X 8.8.8.8. Dadurch werden die Route und das Ausgabegerät angezeigt, die der Kernel für eine Verbindung von 172.16.10.Xnach verwenden würde 8.8.8.8.

Hoffe, es beantwortet Ihre Frage,

f0o

verwandte Informationen