Routing vorbereiten, Schnittstellen konfigurieren und Routing einrichten

Da unser Home-Router durch verschiedene Internet-Anbindungen mehrere Ausgänge und somit mehrere IP-Adressen besitzt, müssen wir dem Linux-Kernel beibringen, jede Verbindung einzeln zu behandeln und als Upstream- und Downstream zu verwenden. Der Linux-Kernel kennt normalerweise von Standard aus nur einen einzigen Standardweg (Default-Route / Upstream) für Pakete, die er lokal keiner Schnittstelle zuordnen kann und verschickt diese über diesen bekannten Standard-Weg (Default-Route).

Definieren der Routing-Tabellen-Namen

Der Linux-Kernel (kompiliert mit der Option "advanced router") bietet mit Hilfe des Userspace-Programms ip den nötigen Konfigurations-Mechanismus, um dem Linux-Kernel mit mehreren Upstreams / Wegen bekannt zu machen. Zuerst definieren wir für alle Schnittstellen zu unseren DSL-Anbindungen die notwendigen Tabellennamen, um die einzelnen Routeninformationen zu einem späteren Zeitpunkt wieder konkret nachvollziehen zu können.

Wir bearbeiten nun die Datei /etc/iproute2/rt_tables :

#
# reserved values
#
255     local
254     main
253     default
0       unspec

#
# Direct Upstreams
#
101     dsl-connection-001
102     dsl-connection-002
103     dsl-connection-003

 

Wir fügen unserer bereits bestehenden Konfiguration einfach nur den Teil von "Direct Upstreams" hinzu. Für jeden Upstream / jede Anbindung definieren wir hier unsere Routing-Tabellen-Namen, welche die Zuordnung von Name und ID ermöglicht. Man könnte diesen Schirtt auch überspringen, müsste sich dann aber umständlich die einzelnen IDs merken (101, 102, ...).

Schnittstellen einrichten

Nun definieren wir die einzelnen Anbindungen. Für unser Beispiel habe ich mir folgendes gedacht: Wir verwenden für jede DSL-Anbindung einen eigenen DSL Hardware-Router, wie z.B. eine AVM!FritzBox, ZyXEL oder sonstigen Hardware-Router mit integrieter ADSL2+ Unterstützung und füttern diese mit den Zugangsdaten des Internet-Service-Providers (ISP).

Im LAN-Segment der einzelnen Router vergeben wir folgende IP-Adressen:

Router 001: 192.168.1.1 netmask 255.255.255.252 broadcast 192.168.1.3
Router 002: 192.168.1.5 netmask 255.255.255.252 broadcast 192.168.1.7
Router 003: 192.168.1.9 netmask 255.255.255.252 broadcast 192.168.1.11
usw.

Im LAN-Segment des HOME-Routers vergeben wir folgende IP-Adressen:

eth0: 192.168.1.2 netmask 255.255.255.252 broadcast 192.168.1.3
eth1: 192.168.1.6 netmask 255.255.255.252 broadcast 192.168.1.7
eth2: 192.168.1.10 netmask 255.255.255.252 broadcast 192.168.1.11
usw.

eth0 ist dabei logisch mit Router 001 verbunden, sowie eth1 logisch mit Router 002 usw.

WICHTIG: Definieren sie keine DEFAULT-GATEWAYS, außer Sie wissen was Sie tun! Wenn Sie DEFAULT-GATEWAYS verwenden, stellen Sie sicher, dass Ihre Linux-Distribution diese Routen mit dem Userspace-Programm ip einrichtet. Definieren Sie dann die DEFAULT-ROUTE so, dass diese Information in der Routing-Tabelle default gespeichert wird, sowie eine metric >= 10 besitzt! Zudem ist die selbe DEFAULT-ROUTE auch der jeweiligen verknüpften Routing-Tabelle dsl-connection-xxx hinzuzufügen.

Beispiel-Konfiguartion unter Gentoo 2008.1:

modules=( "iproute2" )

config_eth0=( "192.168.1.2/30 brd 192.168.1.3" )
config_eth1=( "192.168.1.6/30 brd 192.168.1.7" )
config_eth2=( "192.168.1.10/30 brd 192.168.1.11" )
config_bond0=( "192.168.10.2/30 brd 192.168.10.3" )

routes_eth0=( "default via 192.168.1.1 table default metric 10"
              "default via 192.168.1.1 table dsl-connection-001"
)

routes_eth1=( "default via 192.168.1.5 table default metric 10"
              "default via 192.168.1.5 table dsl-connection-002"
)

routes_eth2=( "default via 192.168.1.9 table default metric 10"
              "default via 192.168.1.9 table dsl-connection-003"
)

 

Linux-Kernel mit den verschiedenen Wegen bekannt machen

Die meisten Internet-Service-Providers erlauben es nicht, Pakete über deren Internet-Leitung zu verschicken, die nicht der originalen IP-Adresse entstammen. Wenn z.B. eine Anfrage auf dem zweiten Internet-Anschluss ankommt, aber über den ersten Internet-Anschluss beantwortet wird, dann würde der ISP diese Antwort verwerfen, wodurch diese am Ziel niemals ankommen würde.

In diesem Schritt bringen wir dem Linux-Kernel bei, dass er je nach SOURCE-IP-Adresse der eigenen Maschine das Paket über die jeweilige Schnittstelle - die dafür vorgesehen ist - verschicken muss.

/sbin/ip rule add from 192.168.1.2 lookup dsl-connection-001
/sbin/ip rule add from 192.168.1.6 lookup dsl-connection-002
/sbin/ip rule add from 192.168.1.10 lookup dsl-connection-003
...

HINWEIS: Stellen Sie sicher, dass diese Kommandos nach jedem Systemstart ausgeführt werden. Unter Gentoo ist dies über die Datei /etc/conf.d/local.start möglich.

Testen können wir unsere Anbindungen, indem wir einen PING mit jeweils der SOURCE-IP-Adresse der verschiendenen Schnittstellen ausprobieren.

ping -I 192.168.1.2 194.145.226.26
ping -I 192.168.1.6 194.145.226.26
ping -I 192.168.1.10 194.145.226.26

Wenn alles richtig konfiguriert wurde, müssten wir bei jeder PING-Anfrage auch die beabsichtigten Antworten erhalten haben. Zudem können wir während den laufenden PING-Anfragen die Konfiguration über die Beobachtung der Aktivitäts-LEDs am Router des jeweiligen Anschlusses prüfen. Je nach verwendeter IP-Adresse, müssen die LEDs des entsprechenden Routers aktiv werden.

Wenn wir die Default-Route auch in der Routing-Tabelle default eingetragen haben, dann müsste es möglich sein, auch ohne Angabe der SOURCE-IP den Host 194.145.226.26 (www.powerns.de Frankfurt am Main) zu erreichen. Linux entscheidet dabei selbst, über welche Schnittstelle es die Anfrage verschicken soll.

Durch die Angabe verschiedener METRICS kann die automatische Auswahl der Schnittstelle beeinflusst werden. Schnittstellen mit niedriger Metric haben hier Vorrang!

Informationen zum allgemeinen Routing findet man bei Wikipedia unter folgendem Artikel:
http://de.wikipedia.org/wiki/Routing

Seite 1: Bündelung mehrerer Internet-Zugänge zur Steigerung der Geschwindigkeit
Seite 2: Kernel-Module aktivieren, Userspace-Programme einrichten und Grundkonfiguration vornehmen
Seite 3: Routing vorbereiten, Schnittstellen konfigurieren und Routing einrichten
Seite 4: vTUN installieren und einrichten
Seite 5: Dynamisches Routing mit OLSR einrichten
Seite 6: Abschluss