Mit einem Adapter eine Verbindung zu mehreren Ethernet-Routern herstellen

Mit einem Adapter eine Verbindung zu mehreren Ethernet-Routern herstellen

Mögliches Duplikat:
So überbrücken Sie zwei verschiedene Internetverbindungen

ich suche nach der besten Methode, um über nur einen Ethernet-Adapter eine Verbindung zu mehreren Routern herzustellen, und nach den damit verbundenen Nebenwirkungen.
Ich habe einen Linux-PC mit einem Ethernet-Port, der an einen Switch angeschlossen ist. Dieser Switch ist mit mehreren Routern mit unterschiedlichen Netzwerken verbunden (z. B. 192.168.1.1, 192.168.2.1, 192.168.3.1). Ich möchte in der Lage sein, einen Socket an ein bestimmtes „Gerät“ zu binden, daher verwende ich für diese Verbindung den entsprechenden Router.
Ich glaube, dass dies erreicht werden kann, indem man für jeden Router eine virtuelle ETH-Schnittstelle erstellt und für jeden die richtige IP/das richtige Subnetz/das richtige GW einstellt.
Die Fragen sind: Ist das richtig? Wie geht das? Sollte ich seltsame Nebenwirkungen befürchten?
* Die gesamte Netzwerkgeschwindigkeit aller Router zusammen wird nicht einmal 10 M überschreiten.

Antwort1

Hier sind keine virtuellen Schnittstellen erforderlich. Was Sie möchten, sind mehrere IP-Adressen auf demselben Gerät und gute Routing-Tabellen mit Policy-Routing, um auszuwählen, welche Routing-Tabelle verwendet werden soll. Nun zum Konfigurationsteil. Lassen Sie uns Ihre IP-Adressen mit /32 konfigurieren, damit wir unsere On-Link-Routen selbst erstellen können

ip addr flush dev eth0
ip addr add 192.168.1.yourhost/32 dev eth0
ip addr add 192.168.2.yourhost/32 dev eth0
ip addr add 192.168.3.yourhost/32 dev eth0

Nun zur Routing-Tabelle. Die erste Routing-Tabelle gleicht Pakete ab, die an Ihre LANs gehen.

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.2.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.3.0/24 dev eth0 src 192.168.1.yourhost table 2

table 2gibt an, welche Routing-Tabelle verwendet werden soll. 2 ist eine beliebige Zahl. Zahlen können Namen zugeordnet werden, indem /etc/iproute2/rt_tables bearbeitet wird. Fügen wir 2 landieser Datei Folgendes hinzu, jetzt können Sie einfach verwenden table lan.

Lassen Sie uns nun standardmäßig diese Routing-Tabelle verwenden:

ip rule add table lan

Wenn Sie sich nun die Ausgabe von ansehen ip rule, sehen Sie in etwa Folgendes:

0:      from all lookup local 
99:     from all lookup lan
32766:  from all lookup main 
32767:  from all lookup default

localist eine reservierte Tabelle, die verwendet wird, damit der Kernel prüfen kann, ob eine IP-Adresse seine eigene IP-Adresse ist, lanist unsere Tabelle, mainist die übliche Routing-Tabelle, die Sie kennen, und defaultist eine spezielle Tabelle für Pakete, die wir nicht routen können. Grundsätzlich probiert der Kernel diese Regeln aus, indem er mit der ersten beginnt, und wenn er in dieser Tabelle keine Route finden kann, geht er zur nächsten Regel über.

Also haben wir eine weitere Routing-Tabelle hinzugefügt, in der wir unsere Routen zum LAN ablegen, die vor der mainTabelle getestet werden. Jetzt fügen wir eine Standardroute in main hinzu: Wenn Sie einen Socket nicht an eine IP-Adresse binden, verwenden Sie nur diese Standardroute. Wählen wir 192.168.1.1:

ip route add default via 192.168.1.1 src 192.168.1.yourhost

Wenn Sie Ihren Socket nun an 192.168.2.IhrHost binden, möchten Sie nicht diese Standardroute verwenden, sondern eine andere. Fügen wir diese Standardroute zu einer anderen Routing-Tabelle hinzu:

ip route add default via 192.168.2.1 src 192.168.2.yourhost dev eth0 table 3
# and while we are at it, let's do this for 192.168.3.1 as well
ip route add default via 192.168.3.1 src 192.168.3.yourhost dev eth0 table 4

Jetzt möchten Sie diese Routing-Tabelle verwenden, aber nur, wenn Ihr Socket an diese anderen IP-Adressen gebunden ist.

ip rule add from 192.168.2.yourhost iif lo table 3
ip rule add from 192.168.3.yourhost iif lo table 4

from 192.168.2.yourhostbewirkt, dass der Kernel die Tabelle nur dann ausprobiert, wenn die IP-Quelladresse im Paket 192.168.2.IhrHost lautet. iifErmöglicht die Angabe, von welcher Schnittstelle das Paket empfangen wurde (was beim Weiterleiten von Datenverkehr nützlich ist), mit einer speziellen Ausnahme: Dies iif lobedeutet, dass der Datenverkehr lokal generiert wurde.

ip route getJetzt können Sie überprüfen, ob es funktioniert, indem Sie es versuchen oder Befehle zum Testen Ihrer Routing-Tabellen verwenden :

$ ip route get 192.168.2.5
192.168.2.5 dev eth0  src 192.168.2.yourhost 
    cache
$ ip route get 64.34.119.12
64.34.119.12 via 192.168.1.1 dev eth0 src 192.168.1.yourhost 
    cache
$ ip route get 64.34.119.12 from 192.168.2.yourhost
64.34.119.12 via 192.168.2.1 dev eth0 src 192.168.2.yourhost 
    cache

verwandte Informationen