Auf der Suche nach einer eleganten iproute2-Lösung für Host mit 2 Schnittstellen in 2 Netzwerken und 3 Gateways

7

Ich habe einen Linux-Webserver mit 192.168.0.2/24, der eth0 zugewiesen ist, und 172.16.0.2/24, der eth1 zugewiesen ist. Ich darf das nicht ändern. Hier ist das bisherige Routing:

172.16.0.0/24 dev eth1 proto kernel scope link src 172.16.0.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
172.16.0.0/16 via 172.16.0.1 dev eth1
default via 192.168.0.1 dev eth0

Die Standardroute führt zum Internet, auf das der Computer zum Herunterladen zugreifen muss. Jetzt kommen auch Pakete (Anfragen) aus dem Internet über 172.16.0.254. Wie muss ich Routing-Tabellen und -Regeln einrichten, um diese Anfragen zu beantworten? iptablesist hier nicht möglich.

Update: Scheint so, aber es sieht für mich nicht elegant aus:

ip r a 172.16.0.0/24 dev eth1 table 10
ip r a 172.16.0.0/16 via 10.16.0.1 t 10
ip r a default via 172.16.0.254 t 10
ip rule add from 172.16.0.2 t 10
Frx
quelle
Was sieht daran nicht elegant aus? Sie erstellen eine zweite Tabelle und wählen sie basierend auf der Quelladresse aus.
Derobert
Ich würde auch eine Auswahl gemäß der angegebenen Ausgabeschnittstelle hinzufügen (z ip rule add oif eth1 t 10. B. ).
BatchyX

Antworten:

0

Dies wird als einfaches quellenbasiertes Routing bezeichnet und im LARTC-HOWTO behandelt:

http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.simple.html

Wenn Sie das Kopieren und Einfügen des Inhalts der ursprünglichen Routing-Tabelle (ohne Standard-Gateway) als unelegant empfinden, müssen Sie dies nicht tun. Sie können ein einfaches Skript verwenden:

ip route flush table 10
ip route show table main | grep -v ^default | while read ROUTE; do ip route add table 10 $ROUTE; done
ip route add table 10 default via 172.16.0.254
ip rule add from 172.16.0.2 table 10
ip route flush cache
Josip Rodin
quelle
-1

Ich denke du kannst nicht.

Wenn Anwendungen (Webserver) antworten, sind dies neue Pakete für den Kernel, die nur einer Routing-Tabelle folgen. Sie können nicht mehrere Standardgateways haben und eines auswählen, je nachdem, an welcher Schnittstelle ein Paket eingetroffen ist, das die Anwendung zum Senden dieser Antwort veranlasst hat.

Bitte verwenden Sie nur ein Standard-Gateway. Führen Sie NAT nicht in mehreren Subnetzen wie diesem aus. Ihr Netzwerkdesign ist hier fehlerhaft. Ja wirklich.

Und wenn Sie dies tun, dann erwarten Sie nicht, dass die Portweiterleitung hier Magie bewirken kann.

gertvdijk
quelle
"Sie können nicht mehrere Standard-Gateways haben und eines auswählen, je nachdem, an welcher Schnittstelle ein Paket eingetroffen ist, das die Anwendung zum Senden dieser Antwort veranlasst hat." Sicher kannst du. Das Linux-Routing kann die Quelladresse berücksichtigen. Und selbst ohne das, wenn OP nicht die Einschränkung "no iptables" hatte, können Sie dies mit der Verbindungsverfolgung tun. Und dies ist nicht unbedingt ein fehlerhaftes Netzwerkdesign, sondern hängt von den Einschränkungen ab, die dazu geführt haben.
Derobert
@ downvoter: statt downvoting schreibe bitte eine antwort.
Gertvdijk
@gertvdijk: Die Lösung ist in der Frage bereits.
BatchyX