Die Anschaffung einer 2. DSL Leitung stellte mich vor folgendes Problem: Wie schaffe ich es, beide Leitungen zu benutzen und ihre Routen gemäß der Bandbreiten zu gewichten? Der Server, der diese Aufgabe erledigen sollte, war sowieso schon lange in Betrieb und benötigte nur eine kleine Umkonfiguration sowie ein wenig zusätzliche Hardware, sprich 2 Netzwerkkarten. Mein erster Versuch, das Multipath Routing mit 2 Netzkarten zu bewerkstelligen stellte sich als schwieriges Unterfangen ein und so baute ich kurzerhand eine 3. NIC ein.
Was soll nun passieren und was passiert nicht?
Multipath Routing bedeutet, dass die Daten die Möglichkeit bekommen, mehrere Wege (Paths) in ein Netz zu bekommen. Das suchen sie sich jedoch nicht selbst aus, sondern der Router (in diesem Fall der Server) entscheidet, welche Pakete über welche Route also welchen Internetanschluss laufen. Hierfür gibt es verschiedene Gewichtungsmöglichkeiten der einzelnen Routen die man nach Lust und Laune oder Bandbreite einstellen kann. Man nutzt also nur beide Leitungen abwechselnd nach festen Kriterien, bündelt aber nicht die Anschlüsse (bonding)! Ein Download nutzt weiterhin immer nur eine Leitung (load balancing)! Aber zum Technischen:
Konfiguration:
Vorneweg: Für sämtliche Befehle werden root Rechte benötigt! Es bietet sich also an, direkt in einer root-shell zu arbeiten!
Vorraussetzung ist ein Linux PC / Server mit installiertem Paket iproute. Zuerst legt man 2 neue Routing Tables in der Datei /etc/iproute2/rt_tables an, indem man am Ende folgendes einfügt
200 se555 #Routingtable für Verbindungen zu Router 1
201 v721 #Routingtable für Verbindungen zu Router 2
Die Namen für die einzelnen Tables können natürlich auch anders vergeben werden. Nun kommt die eigentliche Arbeit, das Einstellen der Routen. Hier gibt es mehrere Ansätze wo die Informationen hinterlegt werden sollen. Die einen plädieren für ein Script, ich konnte mich mehr mit dem Ansatz anfreunden, die Informationen direkt in die /etc/network/interfaces Datei einzutragen. Bei mir sieht die Datei wie folgt aus:
iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0
# Connection zu SE555
iface eth1 inet static
address 192.168.1.199
netmask 255.255.255.0
post-up ip route add 192.168.1.1 dev eth1 src 192.168.1.199 table se555
post-up ip route add default via 192.168.1.1 table se555
post-up ip rule add from 192.168.1.199 table se555
post-down ip rule del from 192.168.1.199 table se555
# Connection V721
auto eth2
iface eth2 inet static
address 192.168.1.198
netmask 255.255.255.0
post-up ip route add 192.168.1.2 dev eth2 src 192.168.1.198 table v721
post-up ip route add default via 192.168.1.2 table v721
post-up ip rule add from 192.168.1.198 table v721
post-down up rule del from 192.168.1.198 v721
Dabei gehören folgende IPs zu folgenden Geräten:
eth0 192.168.1.200 LAN Interface
eth1 192.168.1.199 Uplink zu Router 1
eth2 192.168.1.198 Uplink zu Router 2
192.168.1.1 Router 1
192.168.1.2 Router 2
Ist alles eingestellt, können die Interfaces hochgefahren werden mittels ifconfig eth1 up bzw. ifconfig eth2 up. eth0 sollte ja bereits up sein, sofern man per ssh verbunden ist. Sind nun alle Schnittstellen aktiv, kann die Konfiguration schnell mit ifconfig überprüft werden. Der Befehl ip route gibt Übersicht über das Routing der einzelnen Interfaces. Nun muss dem System nur noch mitgeteilt werden über welche Route, was geroutet werden soll und in welchem Verhältnis. In meinem Fall ist Anschluss 1 eine DSL6000 Leitung und Anschluss 2 eine DSL25000 Leitung. Die Bandbreite von A1 ist also knapp 1/4 von A2, darum sollen Pakete in diesem Verhältnis auf die Leitungen aufgeteil werden. Das Routing, bzw. die Verteilung der Pakete erfolgt nach Eingabe von:
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 25 nexthop via 192.168.1.2 dev eth2 weight 75
Damit sollte nun alles Funktionieren. Die default route wird nun auch angezeigt, wenn man ip route erneut zu rate zieht. Bei mir siehts wie folgt aus:
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.198
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.200
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.199
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
default
nexthop via 192.168.1.1 dev eth1 weight 25
nexthop via 192.168.1.2 dev eth2 weight 75
Nun muss nur noch der DHCP Server so eingestellt werden, das als Router bzw. Gateway die 192.168.1.200, also das LAN Interface benutzt wird. Und voila, das Multipath Routing konfiguriert!
Folgeartikel: http://maltekueppers.de/wp/?p=1356
ENDGÜLTIGE LÖSUNG: http://maltekueppers.de/wp/?p=1363
Quellen:
http://lartc.org/howto/lartc.rpdb.multiple-links.html
http://www.debian-administration.org/articles/377
http://wiki.ubuntuusers.de/Multiple_Uplink_Routing