4.2. Routing für mehrere Uplinks/Provider (multiple uplinks/providers)

Eine übliche Konfiguration ist die folgende, bei der zwei Provider ein LAN, (lokales Netzwerk) oder einen einzelnen Computer, mit dem großen Internet verbindet.

                                                                 ________
                                          +------------+        /
                                          |            |       |
                            +-------------+ Provider 1 +-------
        __                  |             |            |     /
    ___/  \_         +------+-------+     +------------+    |
  _/        \__      |     if1      |                      /
 /             \     |              |                      |
|      LAN      |----+ Linux Router |                      |     Internet
 \_           __/    |              |                      |
   \__     __/       |     if2      |                      \
      \___/          +------+-------+     +------------+    |
                            |             |            |     \
                            +-------------+ Provider 2 +-------
                                          |            |       |
                                          +------------+        \________

Normalerweise ergeben sich zwei Fragen bei diesem Setup.

4.2.1. Geteilter Zugang

Die Erste ist, wie bekommt man Routingantworten eingehender Pakete über einen bestimmten Anbieter, sagen wir Provider 1, wieder über den gleichen Anbieter heraus.

Lass uns zunächst einen symbolischen Namen vergeben. Also ist $IF1 der Name unserer ersten Schnittstelle (if1 in der Abbildung) und der Name des zweiten Interface ist $IF2. Dann verbinden wir $IP1 mit der IP-Adresse von $IF1 und $IP2 mit der zu $IF2 gehörige IP-Adresse. Als nächstes wollen wir, dass $P1 die IP-Adresse des Gateways von Provider 1 ist und $P2 die IP-Adresse des Gateways von Anbieter 2. Zum Schluß lassen wir $P1_NET das Netzwerk-IP $P1 sein, und $P2_NET die Netzwerk-IP von $P2.

Es werden zwei zusätzliche Routingtabellen, T1 und T2, angelegt. Diese werden in /etc/iproute2/rt_tables hinzugefügt. Dann legst du das Routing in den Tabellen folgendermaßen fest:

	  ip route add $P1_NET dev $IF1 src $IP1 table T1
	  ip route add default via $P1 table T1
	  ip route add $P2_NET dev $IF2 src $IP2 table T2
	  ip route add default via $P2 table T2
	
Nichts Besonderes, nur eine Route zum Gateway aufbauen und eine Default-Route über diesen Gateway festlegen, so wie du es im Falle eines einzigen Upstream-Provider tun würdest, nur jetzt je Anbieter die Routen in einer jeweils separaten Tabelle. Beachte, es reicht aus die Netzwerkroute inklusive Gateway, wie oben anzugeben um jeden Host in diesem Netzwerk zu finden.

Als nächstes setzen wir die main-Routing-Tabelle. Es ist eine super Idee, Dinge für direkte Nachbarn, an die Schnittstelle zu routen, wo dieser Nachbar verbunden ist. Beachte die 'src' Argumente, sie stellen sicher, dass die richtige ausgehende IP-Adresse ausgewählt wird.

	    ip route add $P1_NET dev $IF1 src $IP1
	    ip route add $P2_NET dev $IF2 src $IP2
	  
Dann, die Einstellungen für die Standardroute:
	    ip route add default via $P1
	  
Weiter gehts mit dem Einstellen der Routing-Regeln. Dazu legen wir tatsächlich fest, welche Routingtabelle für welche Route ist. Du musst sicher stellen, dass deine Route einer bestimmten Schnittstelle wirklich die entsprechende Quelladresse zugeordnet bekommen hat:
	    ip rule add from $IP1 table T1
	    ip rule add from $IP2 table T2
	  
Mit diesen Befehlen wird gewährleistet, dass alle Antworten des einkommenden Datenverkehrs an einer bestimmten Schnittstelle auch von dieser Schnittstelle angenommen werden.

Warning

Hinweis von Leser Rod Roark: 'Wenn $P0_NET das lokale Netzwerk und $IF0 die Schnittstelle ist, sind folgenden zusätzlichen Einträge empfehlenswert:

	ip route add $P0_NET     dev $IF0 table T1
	ip route add $P2_NET     dev $IF2 table T1
	ip route add 127.0.0.0/8 dev lo   table T1
	ip route add $P0_NET     dev $IF0 table T2
	ip route add $P1_NET     dev $IF1 table T2
	ip route add 127.0.0.0/8 dev lo   table T2                                      
	
'

Nun, das ist nur die allereinfachste Installation. Es arbeitet für alle Prozesse des Router selbst und das lokale Netzwerk, solange es maskiert ist. Wenn nicht, dann benötigst du entweder einen IP-Bereich von beiden Anbietern oder du maskierst einen der beiden Anbieter. In beiden Fällen musst du zusätzlich Regeln aussuchen, welcher Anbieter die Route von den Basis-IP-Adressen der Computer im lokalen Netzwerk ist.

4.2.2. Load balancing

Die zweite Frage ist, wie man ausgehenden Verkehr über die beiden Anbieter verteilen kann. Das ist eigentlich nicht schwer, wenn Sie bereits den Zugriff, nach den Regeln von oben, geteilt haben.

Anstatt sich für einen der beiden Provider als Standardroute zu entscheiden, legst du die Standardroute auf eine Mehrwegeroute (multipath route). Der Standardkernel kann die routen über beide Provider ausgleichen. Das geht folgendermaßen (ein weiteres Beispiel im Abschnitt über Split-Zugang):

	    ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
	    nexthop via $P2 dev $IF2 weight 1
	  
Damit werden die Routen über beide Provider verteilt. Mit den Parametern von weight optimiert man die Gewichtung für den ein oder anderen Provider.

Beachte, der Ausgleich wird nicht perfekt sein, es ist Routen-Basierend und Routen werden zwischengespeichert. Das bedeutet, Wege zu hä,ufig verwendeten Seiten, werden immer über denselbe Anbieter gehen.

Außerdem, wenn du das wirklich tun willst, möchtest du vermutlich auch nach Julian Anastasov's Patch auf http://www.ssi.bg/~ja/#routes, Julian's Route-Patch-Seite schauen. Er macht es leichter damit zu arbeiten.