Der richtige Weg dazu ist, bind () an die Schnittstelle, die Sie für ausgehende Pakete verwenden möchten. Da Sie dann Routen mit den Befehlen ip route
und einrichten ip rule
können, um zu steuern, wie Pakete basierend auf ihrer ausgehenden Schnittstelle weitergeleitet werden. Für mein Beispiel gehe ich von folgendem Netzwerk aus:
- eth0:
- Adresse: 192.168.0.2/24
- Standardgateway: 192.168.0.1
- eth1:
- Adresse: 192.168.1.2/24
- Standardgateway: 192.168.1.1
Ich werde zwei Routing-Tabellen erstellen, eine für ausgehenden Datenverkehr für eth0 mit dem Namen alternate und eine für eth1 mit dem Namen main. Die Routing-Tabelle main ist immer vorhanden und die normale Tabelle, die von den Befehlen route
und verwendet wird ip route
. Die meisten Leute beschäftigen sich nie mit anderen Tabellen. Um die Tabelle mit dem Namen alternate zu erstellen, fügen wir die folgende Zeile hinzu /etc/iproute2/rt_tables
:
10 alternate
Die Standardpriorität der Tabelle main ist 254. Die Regeln, für die die Routing-Tabelle gilt, werden vom ip rule
Befehl gesteuert . Standardmäßig druckt dieser Befehl eine Liste der vorhandenen Regeln aus, die ungefähr so aussehen sollten:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Dies bedeutet im Grunde, dass nach einer Route in der Tabelle local
gesucht wird, die eine spezielle Tabelle ist, die vom Kernel für lokale Routen wie z. B. meine eigene IP-Adresse verwaltet wird. Dann werden table main und table default ausprobiert. Die Tabellenvorgabe ist normalerweise leer. Wenn also keine Übereinstimmung in main vorliegt, gibt es keine Route zum Host. Lassen Sie uns zunächst die Tabelle abwechselnd mit den Regeln für eth0 füllen.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
Normalerweise soll die alternate
Tabelle ähnlich wie die main
Tabelle aussehen . Die einzigen Unterschiede bestehen darin, dass das Routing unterschiedlich sein sollte. Möglicherweise möchten Sie die zweite Zeile oben nicht einfügen, wenn der gesamte NFS-, HTTP- usw. Datenverkehr über das Standardgateway auf eth0 geleitet werden soll, auch wenn er für das Netzwerk auf eth1 bestimmt ist. Im nächsten Schritt fügen Sie eine Regel hinzu, wann diese alternative Routingtabelle verwendet werden soll:
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
Diese Regel besagt, dass jeder Datenverkehr, der von einer Adresse im 192.168.0-Netzwerk kommt, die alternate
Routing-Tabelle anstelle der normalen main
Tabelle verwendet. Der letzte Schritt besteht darin, sicherzustellen, dass alle Clients, die eth0
bind verwenden müssen, daran gebunden sind. Mit setzen Sie wget
zum Beispiel --bind-address=192.168.0.2
für NFS dasclientaddr=192.168.0.2
Mount-Option. Wenn Sie LibWWW mit Perl verwenden, können Sie die Option localaddr in LWP :: UserAgent festlegen, um die lokale Schnittstelle zu steuern, an die es gebunden ist. Wenn Sie zufällig einen Client haben, den Sie nicht steuern können, können Sie möglicherweise mithilfe einer iptables-Regel die Adresse ändern. Dies ist jedoch eher ein Hack und funktioniert möglicherweise nicht. Sie benötigen eine SNAT-Regel, die in der PREROUTING-Kette der nat-Tabelle oder der mangle-Tabelle eingerichtet ist. Sie benötigen weiterhin die oben angegebenen geänderten Routingtabellen, damit dies funktioniert.
iftop
und sie zeigen jeweils die richtige Art von Verkehr. Ich danke dir sehr.