Mehrere Netzwerkkarten unter Linux: Wie kann die Route über die bestehende Route zurückgegeben werden?

Mehrere Netzwerkkarten unter Linux: Wie kann die Route über die bestehende Route zurückgegeben werden?

Wenn es einen Linux-Host mit zwei Schnittstellen in zwei verschiedenen Netzwerken gibt (dem primären Netzwerk und dem Out-of-Band-Verwaltungsnetzwerk; nennen Sie sie „primär“ und „mgmt“), wie kann der Rückverkehr über dieselbe Schnittstelle zurückgeleitet werden, von der er kam?

Mit anderen Worten: Von meinem Platz aus greife ich über einen Router entweder auf die primäre oder die Verwaltungsschnittstelle des Computers zu. Wenn ich per SSH auf die primäre Schnittstelle zugreife, ist das kein Problem. Wenn ich per SSH auf die Verwaltungsschnittstelle zugreife, kommt mein Paket beim Server an, aber der Server sendet seine Antwort über das Standard-Gateway zurück, das sich auf der primären Schnittstelle befindet. Daher wird meine Verbindung nicht hergestellt. Wie kann ich den Server dazu bringen, auf Anfragen über das Verwaltungsnetzwerk zu antworten, die über das Verwaltungsnetzwerk eingehen?

Antwort1

Die Antwort darauf habe ich größtenteils hier gefunden:https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming

Mehr Infos hier:http://linux-ip.net/html/routing-tables.html

Vielen Dank auch an Tom Yan für seine Antwort, die die meisten benötigten Teile enthielt. Aber ich veröffentliche diese Antwort, weil keine der anderen wirklich vollständig, absolut genau oder leicht verständlich ist.

Der folgende Prozess funktioniert bei mir unter Centos 7. Ich konnte ihn nicht mit NetworkManager zum Laufen bringen, da NetworkManager und nicht liest /etc/sysconfig/network-scripts/rule-*und route-*ich keinen entsprechenden nmcliBefehl finden konnte, um diese Änderungen dauerhaft zu machen. Wenn jemand einen solchen Befehl hat, teilen Sie ihn bitte mit. Der erste erforderliche Schritt besteht also darin, NetworkManager zu deaktivieren:

systemctl disable NetworkManager
systemctl enable network
systemctl stop NetworkManager
systemctl start network

Die Linux-Kernel 2.2 und 2.4 unterstützen mehrere Routing-Tabellen, die jeweils von 0 bis 255 nummeriert sind. Die beiden normalerweise verwendeten Routing-Tabellen sind local(Routing-Tabelle 255) und main(Routing-Tabelle 254). Diese sind in aufgeführt /etc/iproute2/rt_tables. Sie können eine neue Routing-Tabelle erstellen, indem Sie eine unbenutzte Nummer auswählen (siehe /etc/iproute2/rt_tables) und sie zu hinzufügen /etc/iproute2/rt_tables.

In meinem Fall ist die „primäre“ Schnittstelle eth0192.168.20.20 mit Gateway 192.168.20.1 und die „MGMT“-Schnittstelle eth1192.168.5.5 mit Gateway 192.168.5.1.

Ich wähle die neue Routing-Tabellennummer 200 und den neuen Routing-Tabellennamen mgmt.

echo "200 mgmt" >> /etc/iproute2/rt_tables

Als Nächstes müssen Sie eine Regel erstellen, um die neue Routing-Tabelle für den Verkehr zu verwenden, der über die Verwaltungsschnittstelle empfangen wurde. Andere Ressourcen im Internet sagen, dass Sie dies nur für eine Schnittstelle tun müssen, aber Sie müssen es aus folgendem Grund wirklich für beide tun: Beachten Sie, dass, wenn Sie nur eine Schnittstelle aufrufen, diese Schnittstelle auf Ping reagieren kann, aber wenn Sie beide Schnittstellen aufrufen, die zuerst aufgerufene Schnittstelle auf Ping reagiert und die zweite nicht. Das heißt, wenn Sie mgmtzuerst die Schnittstelle und dann die primäre Schnittstelle aufrufen, wird die primäre Schnittstelle nicht reagieren. Es empfiehlt sich also, die Regeln für beide Schnittstellen zu definieren.

Dies kann einmalig (nicht dauerhaft) wie folgt erfolgen:

ip rule add from 192.168.20.20 table main
ip route add default via 192.168.20.1 dev eth0 table main

ip rule add from 192.168.5.5 table mgmt
ip route add default via 192.168.5.1 dev eth1 table mgmt

An diesem Punkt sollten beide Schnittstellen reagieren. Um es dauerhaft zu machen, beachten Sie, dass beim Lesen alle Dateien und /etc/sysconfig/network-scripts/ifup-routesanalysiert werden und jede Zeile entsprechend als Argument an oder übergeben wird . Erstellen Sie also vier neue Dateien wie folgt:rule-*route-*ip rule addip route add

echo "from 192.168.20.20 table main" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 192.168.20.1 dev eth0 table main" > /etc/sysconfig/network-scripts/route-eth0

echo "from 192.168.5.5 table mgmt" > /etc/sysconfig/network-scripts/rule-eth1
echo "default via 192.168.5.1 dev eth1 table mgmt" > /etc/sysconfig/network-scripts/route-eth1

Nach dem Neustart sollten beide Schnittstellen standardmäßig funktionieren.

Antwort2

Quellbasiertes Routing / ip rule.

Angenommen , primaryhat 1.2.3.4und mgmthat 2.3.4.5(und ihre Standard-Gateways sind 1.2.3.1bzw. 2.3.4.1):

ip rule add from 1.2.3.4 table 234
ip route add default via 1.2.3.1 dev primary table 234

(das Obige sollte optional sein)

ip rule add from 2.3.4.5 table 345
ip route add default via 2.3.4.1 dev mgmt table 345

verwandte Informationen