Ich verwende CentOS und verwende ip route
und ip rule
für das Routing.
Ich habe derzeit eineip rule
from 10.8.23.0/28 table 1234
Undip route
default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234
Es scheint, dass ip rule
die zweite Zeile in erfolgreich war ip route
, sodass meine Pakete auch dann noch gesendet werden, wenn die Ziel-IP 10.10.10.10 ist, test-interface
wenn die Quell-IP ist 10.8.23.0/28
.
Wie kann ich sicherstellen, dass 10.10.10.10 via 10.10.10.1 eth1
die ìp-Regel außer Kraft gesetzt wird, auch wenn die Quell-IP der Regel entspricht? Hoffe, das ergibt Sinn :)
Durch den Test ip route get 10.10.10.10
bekomme ich:
10.10.10.10 via 10.10.10.1 dev eth1 src 10.8.23.1
aber ip route get 10.10.10.10 src 10.0.0.13
gibt mir:
10.10.10.10 via 10.10.10.254 dev test-interface src 10.8.23.1
Wird also src IP
gegenüber der Ziel-IP priorisiert.
Antwort1
Sie können es sich einfach als eine Möglichkeit vorstellen, ip rule
mehrere IP-Routingtabellen zu erstellen/übernehmen (nicht nur die Standardtabelle).
Um Ihr Problem zu lösen, müssen Sie einen weiteren ip rule
Eintrag hinzufügen, um Ihren spezifischen Routenfall zu behandeln. Sie können beispielsweise den folgenden Befehl verwenden:
$ sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10
Hier gehe ich davon aus, 10
dass klein genug ist, um als erstes angezeigt zu werden ip rule
. Dies hängt von der Ausgabe von ab ip rule ls
. Es werden Ihnen alle Regeln nach Priorität angezeigt (ein kleinerer Wert bedeutet eine höhere Priorität und wird zuerst angezeigt).
Wenn Sie Quell- und Zielprüfungen in Ihrem kombinieren müssen ip rule
, können Sie Folgendes verwenden:
$ sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10
Die Tabelle 123
sollte die richtige Route enthalten, beispielsweise:
$ sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123