Zwei Default Gateways in einem System
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Dieser Artikel beschreibt die Einrichtung von 2 oder mehr Default Gateways unter Linux
Problembeschreibung
Sie haben in einem Linux-System 2 oder mehr Netzwerkkarten verbaut und jedes der Netzwerke hat sein eigenes Default Gateway. Standardmäßig können Sie nur ein Default Gateway in einem System haben, es würde im beschriebenem Fall zu asynchronem Routing kommen, bei dem die Router ggf. die Pakete verwerfen.
Lösung
Man kann für die Lösung dieses Problems das Programm iproute2 verwenden, welches in allen modernen Linuxdistributionen enthalten und i.d.R. auch bereits installiert ist. Normalerweise hat ein Linuxsystem nur eine Routingtable in der entsprechend auch nur ein Default Gateway eingetragen sein kann. Mit iproute2 haben Sie die Möglichkeit zum einen weitere Routingtables anzulegen und zum anderen Regelbasiert diese vom System verwenden zu lassen.
Ausgangslage
Wir gehen davon aus, dass wir 2 Interfaces haben, eth0 und eth1. Die beiden Netze, die verwendet werden sollen sind 192.168.0.0/24 und 10.10.0.0/24, jeweils die .1 soll das Gateway des jeweiligen Netzes sein. Unter Debian würde die Ausgangskonfiguration des Netzes wie folgt aussehen: /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 gateway 192.168.0.1 # The secondary network interface allow-hotplug eth1 iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0
Hinzufügen einer zweiten Routingtable
Um eine neue Routingtable hinzuzufügen, muss die Datei /etc/iproute2/rt_tables bearbeitet werden. Wir werden die Routingtable "rt2" nennen und ihr eine Präferenz von 1 geben. Die genannte Datei sollte dann wie folgt aussehen:
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt2
Konfiguration der neuen Routingtable
Ab jetzt fehlen lediglich 4 Befehle zum eigentlichen Ziel. Als erstes sollte die neue Routingtable befüllt werden, was mit folgenden Befehlen bewerkstelligt wird:
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 ip route add default via 10.10.0.1 dev eth1 table rt2
Mit dem ersten Befehl wird festgesetzt, dass das Netz 10.10.0.0/24 über das Interface eth1 erreichbar ist, der zweite Befehl setzt das Default Gateway.
Routingregeln
Damit das System weiss, wann es unsere neue Routingtable zu nutzen hat, müssen 2 Regeln konfiguriert werden:
ip rule add from 10.10.0.10/32 table rt2 ip rule add to 10.10.0.10/32 table rt2
Hiermit wird festgelegt, dass sowohl Traffic von der IP 10.10.0.10 als auch Traffic, der zu/über die IP 10.10.0.10 gehen soll, die Routingtable rt2 nutzen soll.
Konfiguration dauerhaft machen
Die "ip rule"- und "ip route"-Befehle werden nach einem Reboot ungültig, weshalb man sie in ein Script schreiben sollte (z.B. /etc/rc.local), dass beim booten nach dem Netzwerk gestartet wird. Bei Debian kann man diese Befehle auch direkt in die /etc/network/interfaces eintragen, was dann wie folgt aussieht:
iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0 post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 post-up ip route add default via 10.10.0.1 dev eth1 table rt2 post-up ip rule add from 10.10.0.10/32 table rt2 post-up ip rule add to 10.10.0.10/32 table rt2
Mehr als 2 Netzwerkkarten/Gateways
Wenn sie mehr als 2 Netzwerke haben, können sie für jedes weitere analog zu dem behandeltem Beispiel eine eigene Routingtable erstellen.
Konfiguration mit DHCP
Bei DHCP ist die zugewiesene IP Adresse zum Zeitpunkt der Konfiguration noch nicht bekannt. In der Datei /etc/network/interfaces
kann zumindest Netzadresse und Gateway eingestellt werden:
auto eth1 iface eth1 inet dhcp post-up ip route add default via via 10.10.0.1 dev eth1 table rt2 post-up ip rule add from 10.10.0.10/32 table rt2 post-up ip rule add to 10.10.0.10/32 table rt2 post-up /etc/network/if-up.d/routeadd
Das post-up Script setzt die aktuell zugewiesene IP-Adresse:
$ sudo vi /etc/network/if-up.d/routeadd #!/bin/bash set -e IP1=`ip addr show dev eth1 | grep 'inet ' | awk '{print $2}' | cut -d/ -f 1` ip route add 10.10.0.10/32 dev eth1 src $IP1 table rt2
Prüfen der Konfiguration
Um sicher zu gehen, dass die Regeln als auch die Routeneinträge korrekt getätigt sind, kann man folgende Befehle zur Prüfung nutzen:
ip route list table rt2 ip rule show
Weblinks
Linux Advanced Routing & Traffic control Vollständige Dokumentation und Howtos für iproute2