Ein Kunde aus dem ISP-Bereich setzt Ubuntu 12.04 (Precise Pangolin) Server als Firewall-Router ein. Bislang reichte das vorhandene öffentliche IP-Subnetz aus, allerdings wurden die verfügbaren IP-Adressen knapp, so das ein weiteres Subnetz hinzugefügt werden musste.
Der nachfolgende Beitrag betrachtet lediglich die Anbindung des weiteren Subnetzes und das Routing, wie die Firewall gestaltet wird ist nicht Bestandteil.
In diesem Szenario verhält es sich so, das alle öffentlichen IP-Adressen auf dem Ubuntu-basierten Firewall-Router konfiguriert werden. Die Firewall regelt dann, welche Dienste zum Internet hin zur Verfügung stehen.
Die öffentlichen IP-Adressen sind als virtuelle Netzwerkkarten auf dem Firewall-Router konfiguriert. Selbstverständlich und sofern vorhanden können die IP-Adressen auf realen Netzwerkkarten zugewiesen werden. Die Handhabung ist in diesem Fall identisch.
Plan A – Route zum weiteren Gateway anlegen
Der Versuch ein weiteres Gateway anzulegen wird unter Ubuntu mit einer Fehlermeldung beim Starten des Interfaces (“ifup ethX”) oder beim (Neu-)Starten des Netzwerks (“/etc/init.d/networking restart”) quittiert:
RTNETLINK answers: File exists Failed to bring up eth0:1
Hintergrund ist, das bereits eine Standardroute vorhanden ist und folglich keine Zweite hinzugefügt werden kann. Das Interface wird zudem nicht unbedingt vollständig gestartet.
Daraus ergibt sich, das man kein weiteres Gateway anlegen kann. Stattdessen legt das erste Interface, das mit einer IP-Adresse aus dem anderem Subnetz konfiguriert ist, eine Route zum Gateway dieses Subnetzes fest:
(Auszug aus "/etc/network/interfaces", IP-Adressen geändert) auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 100.100.100.2 netmask 255.255.255.224 network 100.100.100.0 broadcast 100.100.100.31 gateway 100.100.100.1 auto eth0:1 iface eth0:1 inet static address 200.200.200.2 netmask 255.255.255.192 network 200.200.200.128 broadcast 200.200.200.63 post-up /sbin/route add -net 200.200.200.0 netmask 255.255.255.192 gw 200.200.200.1
Nach dem Starten des Interfaces (oder einem Neustart des Netzwerks) kann man die Routen mit “route -n” prüfen:
Ziel Router Genmask Flags Metric Ref Use Iface 0.0.0.0 100.100.100.1 0.0.0.0 UG 0 0 0 eth0 300.300.300.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 200.200.200.0 200.200.200.1 255.255.255.192 UG 0 0 0 eth0 200.200.200.0 0.0.0.0 255.255.255.192 U 0 0 0 eth0 100.100.100.0 0.0.0.0 255.255.255.224 U 0 0 0 eth0
Auf “eth1” ist ein anderes Subnetz konfiguriert, was an dieser Stelle nicht weiter interessant ist. Per Vorgabe wird eine Standardroute zum ersten Gateway vom System angelegt (Zeile 5 der route-Ausgabe), diese wird allerdings aufgrund der explizit gesetzten Route zum anderen Gateway nicht verwendet.
Plan B – Mehrere Routing-Tabellen
Alternativ kann man statt klassischem Routing weitere Routing-Tabellen anlegen. Auf diese Weise lässt sich eine grössere Trennung vornehmen. Zu diesem Zweck muss das Paket “iproute2” installiert sein. Bei Ubuntu “versteckt” sich “iproute2” im Paket “iproute” das per Standard installiert sein sollte.
Man legt zuerst eine weitere Routing-Tabelle an:
Die Datei “/etc/iproute2/rt_tables” editieren und am Ende der Datei eine fortlaufende Nummer und einen Namen für die weitere Routing-Tabelle hinzufügen:
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt2
In diesem Beispiel (Übernommen aus dem Thomas Krenn-Wiki, siehe Quellen) wurde “1 rt2” hinzugefügt. Im nächsten Schritt muss dementsprechend die Datei “/etc/network/interfaces” angepasst werden:
(Auszug aus "/etc/network/interfaces", IP-Adressen geändert) auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 100.100.100.2 netmask 255.255.255.224 network 100.100.100.0 broadcast 100.100.100.31 gateway 100.100.100.1 auto eth0:1 iface eth0:1 inet static address 200.200.200.2 netmask 255.255.255.192 network 200.200.200.128 broadcast 200.200.200.63 post-up ip route add 200.200.200.0/26 dev eth0:1 src 200.200.200.2 table rt2 post-up ip route add default via 200.200.200.1 dev eth0:1 table rt2 post-up ip rule add from 200.200.200.2/32 table rt2 post-up ip rule add to 200.200.200.2/32 table rt2
Troubleshooting
Hatte man dennoch mal ein weiteres Gateway konfiguriert, so bleiben, auch wenn es nicht ersichtlich ist, Reste zurück. Am einfachsten bringt man das System durch einen “reboot” wieder in einen sauberen Zustand.
Persönliche Bemerkung
Laut Recherche soll es ebenfalls mit zwei oder mehreren Gateways und unterschiedlichen Metriken funktionieren. Im Test hatten wir damit allerdings keinen Erfolg.
Quellen
Thomas Krenn – Wiki – Zwei Default Gateways in einem System
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Schreibe einen Kommentar