GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, mehrere Standard-Gateways für ausgehende Verbindungen zu haben?

Ich habe es selbst gelöst. Es scheint sehr wenig Informationen über die Netzwerkfunktionen zu geben, die Sie mit Linux machen können, also habe ich mich entschlossen, meine Lösung im Detail zu dokumentieren und zu erklären. Dies ist mein letztes Setup:

  • 3 NICs:eth0 (Kabel), wlan0 (integriertes WLAN, schwach), wlan1 (USB-WLAN-Adapter, stärkeres Signal als wlan0)
  • Alle in einem einzigen Subnetz, jeder mit seiner 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 fehlschlägt, sollte wlan0 verwendet werden.

Erster Schritt :Erstellen Sie eine neue Routing-Tabelle 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 ip rule show eingeben Sie sollten 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 sagt uns, dass der von der IP-Adresse "192.168.178.99" ein- oder ausgehende Datenverkehr die rt1-Routing-Tabelle verwendet. So weit, ist es gut. Aber Verkehr, der lokal generiert wird (z. B. wenn Sie von der Maschine zu einem anderen Ort pingen oder ssh möchten), erfordert eine besondere Behandlung (siehe das große Zitat in der Frage).

Die ersten vier Post-up-Zeilen in /etc/network/interfaces sind einfach und Erklärungen können im Internet gefunden werden, die fünfte und letzte Post-up-Zeile ist diejenige, die Magie geschehen lässt:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

Beachten Sie, dass wir für diese Postup-Zeile keine Routing-Tabelle angegeben haben. Wenn Sie keine Routing-Tabelle angeben, werden die Informationen in main gespeichert Routing-Tabelle, die wir in ip rule show gesehen haben . Diese Postup-Zeile fügt eine Standardroute in die "Haupt"-Routentabelle ein, die für lokal generierten Datenverkehr verwendet wird, der keine Antwort auf eingehenden Datenverkehr ist. (Zum Beispiel ein MTA auf Ihrem Server, der versucht, eine E-Mail zu senden.)

Die drei Schnittstellen setzen alle eine Standardroute in die Hauptroutentabelle, wenn auch mit unterschiedlichen Metriken. Werfen wir einen Blick auf die main Routing-Tabelle 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 hat, wenn auch mit unterschiedlichen Metriken. Die höchste Priorität ist eth0, dann wlan1 und dann wlan0, da niedrigere Metrikzahlen eine höhere Priorität anzeigen. Seit eth0 die niedrigste Metrik hat, ist dies die Standardroute, die verwendet wird, solange eth0 ist oben. Wenn eth0 ausfällt, wechselt der ausgehende Datenverkehr zu wlan1 .

Mit diesem Setup können wir ping 8.8.8.8 eingeben in einem Terminal und ifdown eth0 in einem anderen. ping sollte trotzdem funktionieren, weil ifdown eth0 entfernt die Standardroute in Bezug auf eth0 , wird der ausgehende Datenverkehr auf wlan1 umgestellt .

Die Postdown-Zeilen stellen sicher, dass die zugehörigen Routing-Tabellen aus der Routing-Richtliniendatenbank gelöscht werden (ip rule show ), wenn die Schnittstelle ausfällt, um alles aufgeräumt zu halten.

Das Problem, das übrig bleibt, ist, dass wenn Sie den Stecker von eth0 ziehen die Standardroute für eth0 ist immer noch da und der ausgehende Datenverkehr schlägt fehl. Wir brauchen etwas, um unsere Schnittstellen zu überwachen und ifdown eth0 auszuführen wenn es ein Problem mit der Schnittstelle gibt (z. B. NIC-Fehler oder jemand, der den Stecker zieht).

Letzter Schritt :Geben Sie ifplugd ein . Das ist ein Daemon, der Schnittstellen überwacht und ifup/ifdown ausführt 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 auf eth0 ziehen , wird der ausgehende Datenverkehr auf wlan1 umgestellt und wenn Sie den Stecker wieder einstecken, wechselt der ausgehende Datenverkehr zurück zu eth0 . Ihr Server bleibt online, solange eine der drei Schnittstellen funktioniert. Um sich mit Ihrem Server zu verbinden, können Sie die IP-Adresse von eth0 verwenden und falls dies fehlschlägt, die IP-Adresse von wlan1 oder wlan0.


Linux bietet eine bessere Lösung als Ihre Skriptumgehung:Active-Backup-Bonding.

Auf diese Weise hat Ihre Maschine nur einen IP-Adresse (und eine MAC-Adresse) und schaltet Schnittstellen automatisch und transparent um, wenn eine Schnittstelle nicht mehr verfügbar ist. Keine Unterbrechung einer TCP-Verbindung (weder zu Ihrem internen LAN noch zum Internet).

Ich verwende dieses Setup selbst, um auf meinem Debian-Laptop automatisch von eth0 auf wlan0 umzuschalten, wenn ich meinen Laptop von der Dockingstation trenne.

Mein /etc/network/interfaces:

# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0

# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
        pre-up sleep 5
        wpa-conf /etc/wpa_supplicant.conf
        bond-master bond0
        bond-primary eth0

# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
        bond-slaves eth0 wlan0
        bond-primary eth0
        bond-mode active-backup
        bond-miimon 10
        bond_downdelay 10
        bond_updelay 4000

Sie können dieses Setup problemlos um mehrere WLAN-Geräte erweitern. Einstellen des primary_reselect Option zu better (Automatisch den schnellsten Link auswählen) sollte hier helfen.

Weitere Informationen finden Sie unter https://wiki.linuxfoundation.org/networking/bonding und https://wiki.debian.org/Bonding

Und (natürlich) die Linux-Kernel-Dokumentation unter https://www.kernel.org/doc/Documentation/networking/bonding.txt


Linux
  1. Linux – Deep Freeze-ähnliche Software für Fedora?

  2. Wie gebe ich ein Passwort für mehrere Windows ein?

  3. Ist das Festlegen von Standard-Mount-Optionen für Udisks wirklich nicht möglich?

  4. Standard-Feldtrennzeichen für awk

  5. Wie lege ich einen Standard-Nick für neue irssi-Verbindungen fest?

Wie man nach mehreren Zeichenfolgen, Mustern oder Wörtern sucht

Auflösen der Mac-Adresse von der IP-Adresse in Linux?

Ist es möglich, dass die Root- und die Home-Partition unterschiedliche Dateisysteme haben und sich auf separaten physischen Geräten befinden?

Wie kann ich die Gesamtzahl der TCP-Verbindungen für einen bestimmten Port und Zeitraum nach IP ermitteln?

So entfernen Sie alle Standard-Gateways

Angabe der IP-Adresse für ausgehende Verbindungen auf einem Multi-IP-Host