Zwei Default Gateways in einem System

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
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

Das könnte Sie auch interessieren

FTP Backup Script
KSM (Kernel Samepage Merging)
Rccmd USV Shutdown Client Installation im Textmodus unter Linux