Anleitung: 2 Default Gateways auf einem Linux einrichten mit iproute

Anleitung

Wozu benötigt man 2 Default Gateways in einem System?

Eigentlich gar nicht aber manchmal tritt eben dieser Fall ein, dass man 2 Gateways braucht. Sei es weil 2 Netzwerkkarten verbaut sind oder man bestimmten Traffic nur durch ein bestimmtes Device oder mit einer bestimmten IP routen möchte. Sollte man hier kein konsistentes Routing haben, kann es zu asynchronem Routing kommen und einige Pakete könnten im Router somit verloren gehen.

Ein anderer Fall ist wenn man ein VPN im Einsatz hat und nicht generell den gesamten Traffic durch das VPN leitet. Hat man hier nun eine Applikation und gibt als „outgoing“ IP die VPN IP an so wird dieser Traffic natürlich auch durch das Default Gateway geroutet. Die folgenden Gateways können mit dieser IP natürlich nichts anfangen und es landet im Nirvana. 

Lösung?

Man kann mittels iproute2, welches in fast allen Linux Distributionen bereits enthalten und meistens schon installiert ist, eine zweite Routingtabelle erstellen und bestimmten Traffic regelbasiert direkt auf ein anderes Gateway routen. Somit lernt Linux, dass es 2 verschiedene Gateways hat und wohin welcher Traffic geroutet werden soll.

Klingt komplizierter als es ist 😉 

Wichtig!
Ich weise schon mal vorab darauf hin, dass alle IP Adressen und Gateways hier nur als Beispiel genannt sind. Die Daten müssen an eure IP’s und Gateways angepasst werden.

Ausgangskonfiguration

In obigen Fall fragte mich also ein Freund wieso seine Applikation nicht ins Internet geht obwohl der Server eine permanente Internet Verbindung hat. Nach ein wenig suchen fand ich dann heraus, dass als Ausgangs IP tatsächlich die VPN Adresse konfiguriert war.

Wir haben also eine public IP: 192.168.0.116 auf eth0 mit dem Gateway 192.168.0.1

Eine VPN IP: 10.8.5.58 auf tun0 (Hat natürlich kein Gateway da es eth0 benutzt)

Das tun0 könnte ebenso gut eine zweite physische Netzwerkkarte sein.

In der /etc/network/interfaces würde das so aussehen:

 

# 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.116
    netmask 255.255.255.0
    gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
    address 10.8.5.58
    netmask 255.255.255.0

 

 

Hinzufügen einer zweiten Routingtabelle für das zweite Gateway

Für die neue Routingtabelle müssen wir zuerst in der vorhandenen Tabelle eine Referenz auf die zweite Tabelle erstellen.

Es muss dazu die Datei /etc/iproute2/rt_tables bearbeitet werden

255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep
1 rt2

Hat man am Ende einfach „1 rt2“ hinzugefügt kann man die Datei speichern.

Die zweite Routing Tabelle befüllen

Nun fehlen eigentlich nur noch 4 Regeln um die zweite Routingtabelle zu benutzen.

ip route add 10.8.5.0/24 dev tun0 src 10.8.5.58 table rt2
ip route add default via 10.8.5.1 dev tun0 table rt2

So würden die beiden ersten Befehle für die zweite Routingtabelle aussehen. Die erste Regel besagt, dass das Netzwerk 10.8.5.0/24 immer durch das tun0 gehen soll und die tun0 IP 10.8.5.58 ist.

Die Zweite Regel sagt, dass das gesamte 10.8.5.0/24 Netzwerk über das Gateway 10.8.5.1 durch das Interface tun0 gehen soll.

Wichtig!
Achtung, ich gehe hier davon aus, dass immer eine statische VPN IP existiert und diese sich nie ändert. Sollte dies nicht der Fall sein muss bei jedem Reboot die Tabelle neu befüllt werden mit der aktuellen IP.

Routing Regeln für die Gateways festlegen

Kommen wir jetzt zu den Routingregeln damit das System auch weiß wann es diese zweite Routingtabelle zu benutzen hat.

ip rule add from 10.8.5.58/32 table rt2
ip rule add to 10.8.5.58/32 table rt2

Hiermit legen wir fest, dass der eingehende sowie der ausgehende Traffic der IP 10.8.5.58 immer die Routingtabelle „rt2“ benutzen soll.

Das war es auch schon. Wenn man das ganze nun noch dauerhaft machen möchte, gibt es diese Lösung für den Fall das 2 Netzwerkkarten vorhanden sind.

Die /etc/network/interfaces erneut bearbeiten und die Zeilen mit „post-up…“ beim jeweilgen Interface hinzufügen

# 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.116
    netmask 255.255.255.0
    gateway 192.168.0.1

# The secondary network interface
allow-hotplug eth1
iface eth1 inet static
    address 10.8.5.58
    netmask 255.255.255.0
    post-up ip route add 10.8.5.0/24 dev eth1 src 10.8.5.58 table rt2
    post-up ip route add default via 10.8.5.1 dev eth1 table rt2
    post-up ip rule add from 10.8.5.58/32 table rt2
    post-up ip rule add to 10.8.5.58/32 table rt2

Diese Lösung funktioniert natürlich nicht wenn man es mit dem VPN benützen möchten.

Für ein VPN Routing gibt es zwei Möglichkeiten. Entweder wir fügen in die /etc/rc.local folgendes hinzu:

ip route add 10.8.5.0/24 dev tun0 src 10.8.5.58 table rt2
ip route add default via 10.8.5.1 dev tun0 table rt2
ip rule add from 10.8.5.58/32 table rt2
ip rule add to 10.8.5.58/32 table rt2
#Wichtig, das muss vor dem "exit0" stehen.
oder man macht das nach einem Reboot erneut manuell. Die Konfiguration kann man mit diesen beiden Befehlen prüfen
ip route list table rt2
ip rule show
Dauert insgesamt ca 10 Minuten und danach sollte es genau so funktionieren wie gewünscht ;-) Das funktioniert übrigens auch Prima in Proxmox LXC Containern ohne sich selbst abzuschießen ;-)
Share it!Share on FacebookEmail this to someoneShare on Google+Tweet about this on Twitter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*
*