Ich habe es selbst gelöst. Anscheinend gibt es nur sehr wenige Informationen über die Netzwerkfunktionen, die Sie mit Linux ausführen können. Ich habe mich daher entschlossen, meine Lösung detailliert zu dokumentieren und zu erläutern. Dies ist meine endgültige Einrichtung:
- 3 Netzwerkkarten: eth0 (Draht), wlan0 (integriertes WLAN, schwach), wlan1 (USB-WLAN-Adapter, stärkeres Signal als wlan0)
- Alle in einem einzigen Subnetz, jedes mit einer eigenen IP-Adresse.
- eth0 sollte standardmäßig sowohl für eingehenden als auch für ausgehenden Datenverkehr verwendet werden.
- Wenn eth0 fehlschlägt, sollte wlan1 verwendet werden.
- Wenn wlan1 ausfällt, sollte wlan0 verwendet werden.
Erster Schritt : Erstellen Sie eine neue Routentabelle für jede Schnittstelle in /etc/iproute2/rt_tables
. Nennen wir sie rt1, rt2 und rt3
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt1
2 rt2
3 rt3
Zweiter Schritt : Netzwerkkonfiguration in /etc/network/interfaces
. Dies ist der Hauptteil und ich werde versuchen, so viel wie möglich zu erklären:
auto eth0 wlan0
allow-hotplug wlan1
iface lo inet loopback
iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
post-up ip route add default via 192.168.178.1 dev eth0 table rt1
post-up ip rule add from 192.168.178.99/32 table rt1
post-up ip rule add to 192.168.178.99/32 table rt1
post-up ip route add default via 192.168.178.1 metric 100 dev eth0
post-down ip rule del from 0/0 to 0/0 table rt1
post-down ip rule del from 0/0 to 0/0 table rt1
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.97/32 table rt2
post-up ip rule add to 192.168.178.97/32 table rt2
post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
post-down ip rule del from 0/0 to 0/0 table rt2
post-down ip rule del from 0/0 to 0/0 table rt2
iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
post-up ip rule add from 192.168.178.98/32 table rt3
post-up ip rule add to 192.168.178.98/32 table rt3
post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
post-down ip rule del from 0/0 to 0/0 table rt3
post-down ip rule del from 0/0 to 0/0 table rt3
Wenn Sie eingeben ip rule show
, sollten Sie Folgendes sehen:
0: from all lookup local
32756: from all to 192.168.178.98 lookup rt3
32757: from 192.168.178.98 lookup rt3
32758: from all to 192.168.178.99 lookup rt1
32759: from 192.168.178.99 lookup rt1
32762: from all to 192.168.178.97 lookup rt2
32763: from 192.168.178.97 lookup rt2
32766: from all lookup main
32767: from all lookup default
Dies teilt uns mit, dass eingehender oder ausgehender Verkehr von der IP-Adresse "192.168.178.99" die Route-Tabelle rt1 verwendet. So weit, ist es gut. Datenverkehr, der lokal generiert wird (zum Beispiel, wenn Sie einen Ping-Befehl oder einen SSH-Befehl von der Maschine an eine andere Stelle senden möchten), muss jedoch speziell behandelt werden (siehe das große Zitat in der Frage).
Die ersten vier Post-Up-Zeilen /etc/network/interfaces
sind unkompliziert und Erklärungen finden Sie im Internet. Die fünfte und letzte Post-Up-Zeile ist diejenige, die Magie möglich macht:
post-up ip r add default via 192.168.178.1 metric 100 dev eth0
Beachten Sie, dass wir für diese Post-Up-Zeile keine Routentabelle angegeben haben. Wenn Sie keine Routentabelle angeben, werden die Informationen in der Routentabelle gespeichert, in der main
wir sie gesehen haben ip rule show
. Diese Post-Up-Zeile fügt eine Standardroute in die "Haupt" -Routentabelle ein, die für lokal generierten Verkehr verwendet wird, der keine Antwort auf eingehenden Verkehr ist. (Zum Beispiel ein MTA auf Ihrem Server, der versucht, eine E-Mail zu senden.)
Die drei Schnittstellen fügen alle eine Standardroute in die Hauptroutentabelle ein, allerdings mit unterschiedlichen Metriken. Werfen wir einen Blick auf die main
Routentabelle mit ip route show
:
default via 192.168.178.1 dev eth0 metric 100
default via 192.168.178.1 dev wlan1 metric 101
default via 192.168.178.1 dev wlan0 metric 102
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.97
192.168.178.0/24 dev eth0 proto kernel scope link src 192.168.178.99
192.168.178.0/24 dev wlan1 proto kernel scope link src 192.168.178.98
Wir können sehen, dass die Hauptroutentabelle drei Standardrouten enthält, allerdings mit unterschiedlichen Metriken. Die höchste Priorität ist eth0, dann wlan1 und dann wlan0, da niedrigere Metrikzahlen eine höhere Priorität anzeigen. Da eth0
die niedrigste Metrik vorliegt, ist dies die Standardroute, die verwendet wird, solange sie aktiv eth0
ist. Bei einem eth0
Ausfall wird der ausgehende Verkehr auf umgeschaltet wlan1
.
Mit diesem Setup können wir ping 8.8.8.8
ein Terminal und ifdown eth0
ein anderes eingeben. ping
sollte immer noch funktionieren, da dadurch ifdown eth0
die Standardroute entfernt wird, auf die der eth0
ausgehende Verkehr umgeschaltet wird wlan1
.
Die nachgeordneten Zeilen stellen sicher, dass die zugehörigen Routentabellen beim Ausfall ip rule show
der Schnittstelle aus der Routing-Richtliniendatenbank ( ) gelöscht werden, um Ordnung zu schaffen.
Das Problem, das übrig bleibt, ist, dass, wenn Sie den Stecker von eth0
der Standardroute für ziehen, eth0
immer noch da ist und ausgehender Verkehr fehlschlägt. Wir brauchen etwas, um unsere Schnittstellen zu überwachen und auszuführen, ifdown eth0
wenn ein Problem mit der Schnittstelle vorliegt (z. B. NIC-Fehler oder Ziehen des Steckers).
Letzter Schritt : eintreten ifplugd
. Das ist ein Daemon, der Interfaces überwacht und ausführt, ifup/ifdown
wenn Sie den Stecker ziehen oder wenn es ein Problem mit der WLAN-Verbindung gibt /etc/default/ifplugd
:
INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
Sie können jetzt den Stecker ziehen eth0
, der ausgehende Verkehr wird auf umgeschaltet, wlan1
und wenn Sie den Stecker wieder einstecken, wird der ausgehende Verkehr auf umgeschaltet eth0
. Ihr Server bleibt online, solange eine der drei Schnittstellen funktioniert. Für die Verbindung zu Ihrem Server können Sie die IP-Adresse von eth0 verwenden, und wenn dies fehlschlägt, die IP-Adresse von wlan1 oder wlan0.