Policy Based Routing: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Zeile 54: Zeile 54:
 
   172.16.143.0    0.0.0.0        255.255.255.0  U    0      0        0 vmnet8
 
   172.16.143.0    0.0.0.0        255.255.255.0  U    0      0        0 vmnet8
 
   0.0.0.0        192.168.1.2    0.0.0.0        UG    0      0        0 ra0
 
   0.0.0.0        192.168.1.2    0.0.0.0        UG    0      0        0 ra0
 +
 +
Das Policy Based Routing erweitert diese Konzept nun folgendermaßen. Statt einer Routingtabelle gibt es gleich mehrere. root kann sogar eigene Tabellen anlegen. Jede Tabelle hat eigene Einträge wie bei sie auch die klassiche Routingtabelle hat. Der Router hat nun also mehrere Tabellen in denen er nachschauen kann was der Next Hop für ein bestimmtest Ziel hat. Soweit, sogut, jedoch muss der Router nun noch wissen in welcher der vielen neuen Tabellen er jetzt tatsächlich nachschauen muss.
 +
 +
Hier kommt ein Rule List (= Regel Liste) ins Spiel. Innerhalb dieser Liste steht in welcher Routingtabelle der Router nachschauen soll. Als Kriterium kommen bestimmte Eigenschaften des Datenpaketes in Frage, wie Quell-IP, Type of Service, Firewall Remark oder auch das Netzwerkinterface über welches das Paket reinkam.
 +
 +
Auf gut Deutsch kann in der Liste also drin stehen:
 +
 +
  Wenn ein Paket von 192.168.2.17 kommt, dann siehe in Routing Tabelle 5 nach.
 +
 +
Natürlich steht das nicht wirklich so drin. Eine echte Rulelist sieht so aus:
 +
 +
  0:      from all lookup local
 +
  2000:  from all lookup 2
 +
  3000:  from all lookup 3
 +
  3500:  from all tos 04 lookup 32
 +
  4000:  from 192.168.0.14 lookup 4
 +
  4000:  from 192.168.0.3 lookup 4
 +
  4000:  from 192.168.0.121 lookup 4
 +
  4000:  from 192.168.0.30 lookup 4
 +
  32000:  from all lookup 32
 +
  32766:  from all lookup main
 +
  32767:  from all lookup default
 +
 +
Die Zahlen vor den Anweisungen stellen die Priorität dar. Das heißt das System geht die Liste in der Reihenfolge der Zahlen durch. Wenn das Kriterum, in diesem Fall die "from ..." Anweisungen auf das Paket passen wird die Regel ausgeführt. In diesem Fall die verschieden "lookup"s. Das bedeutet wenn eine Regel greift wird in der zugehörigen Routingtabelle nachgeschaut. Findet sich in der Routingtabelle ein Eintrag der auf das Paket zutriff, wird also das Ziel des Paketes in der Tabelle erwähnt, so ist die Abarbeitung abgeschlossen. Der Router hat sich also entschieden. Findet der Router in der Tabelle keinen Routingeintrag, so geht er zur nächsten Eintrag der _Regelliste_ über und prüft diese. Dieses passiert solange bis eine Route gefunden wurde, oder die Regelliste komplett durchlaufen ist.
 +
 +
Übrigens die Zahlen hinter den Lookups sind natürlich die verschiedenen Routingtabellen. Diese "numersichen" Tabellen sind von root manuell angelegt worden. Die Routing Tabellen "local", "main" und "default" sind standardmäßig enthalten. local enthält alle Regeln die sich aus der Konfiguration der Netzwerkkarten ergeben. Dementsprechend kann diese Routingtabelle (als einzige) nicht von root verändert werden. "main" enthält die Routingtabelle wie man sie vom normalen Destinationbased-Routing kennt. Man kann sich diese Tabelle mit dem Befehl "route" ansehen. "default" wird normalerweise als letzte  ausgeführt und dient dem Aufräumen. Alles was bisher zu keinem Ergebniss geführt hat sollte hier abgehandelt werden. Standardmäßig ist diese Tabelle allerdings leer.
 +
  
  

Version vom 20. Mai 2007, 15:54 Uhr

Dieser Artikel nimmt am Linux-Club Wiki Wettbewerb teil, aus diesem Grunde soll an dem Artikel nur von dem Erstautor Änderungen bis zum 22. Mai 2007 um 20:00Uhr gemacht werden. Danach wird die Jury die Artikel in dieser Kategorie beurteilen, und die Sieger bekannt geben.
Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.


Dieser Artikel will die Grundlagen von Policy Based Routing sowie die zugehörigen Konfigurationsmöglichkeiten unter Linux erklären. Der Artikel setzt voraus, dass der Leser grundlegendes Verständnis im Thema Routing unter Linux hat. route, nestat, Routing Table, NAT, Masquerading und ähnliches sollten als keine Fremdwörter für den Leser sein.

Was ist Policy Based Routing?

Unter dem Begriff "Policy Based Routing" versteht man die Möglichkeit Routing Entscheidungen an Hand eines vordefinierten Regelwerkes zu treffen. Dies unterscheided sich stark von den bisher eingesetzten Routingmöglichkeiten bei welchen ein Router nur an Hand des Zieles eines Datenpaketes entscheided an welchen Next Hop das Paket weitergereicht wird.

Mit PBR ist es nun möglich das ein Router auch die Quelle eines Paketes, die Größe des Paketes, bestimmte Flags, das Protokoll und noch vieles mehr berücksichtig und dann entscheided was der Next Hop für das Paket sein soll.

Für Weiteres siehe Quelle [1].

Vorteile von PBR (Oder: Wozu braucht man das überhaupt?)

Sie auch Quelle [2].

Ereichen des gleichen Ziels über zwei Verbindungen

In der Vergangenheit als das Internet noch überschaubar war, hatte man oftmals zwei Anbindungen an seine Kommunikationspartner. Eine über ein kommerzielles Netz, welche zuverlässig aber teuer war und eine Anbindung über das Internet, welche günstig aber unzuverlässig war.

Je nachdem von wo nun Daten zum Partner geschickt wurden, wurde entweder die kommerzielle oder die öffentliche Anbindung genutzt. Man musste also an Hand der Quelle der Daten unterschieden welche Daten wie geroutet wurden. Das sonst übliche Routing auf Basis des Zieles konnte man hier nicht einsetzen, da das Ziel ja jedesmal identisch war.

QoS

Heute dürfte QoS (Quality of Service) eine größere Rolle spielen.

Angenommen ein Internetprovider hat zwei Kundengruppen: Privatkunden und Firmenkunden. Die Privatkunden zahlen nur einen geringen Preis für die Internetanbindung, wärend die Firmenkunden einen hohen Preis zahlen. Nun möchten die Firmenkunden natürlich auch einen höhere Verbindungsgeschwindigkeit garantiert bekommen als dies für die Privatkunden üblich ist. In einem solchen Umfeld könnte der der Internetprovider an Hand der Quelle eines Datenpaketes entscheiden ob dieses mit Vorgang behandelt wird oder nicht.

Ein weiteres Szenario kennt man von VoIP (Voice over IP). Die Datenpakete eines Telefongespräches müssen zügig beim Empfänger ankommen, wenn man vermeiden will dass dieser ein Echo, oder einfach eine "schlechte Leitung" im Gespräch hört. Bandbreite steht leider nicht unbegrenzt zur Verfügung, so dass man entscheiden muss welches Datenpaket über eine bessere Leitung (weil schneller) übertragen wird und welche nicht. Auch hier kann PBR wieder helfen. Anhand des im Paket eingesetzten Protokolls kann ein Router der PBR-fähig ist entscheiden ob ein Datenpaket über ein gute Leitung geschickt werden muss, oder ob es eine weniger gute Leitung nehmen kann.

Sonstiges

In letzter Zeit kam leider auch das Thema "Netzneutralität" in den Medien auf. Auch dies wäre ein Anwendungsfall für PBR.

Nachteile von PBR

Die Nachteile von PBR liegen vor allem im höhren Administrationsaufwand. Das Regelwerk für die Router muss erstellt und gepflegt werden. Dynamische Routing wird schwieriger einzubinden und auch die Fehlersuche im Netzwerk wird komplizierter, da man nicht einfach ein Traceroute absetzen kann um zu sehen welche Route die Daten nehmen würden (dies kann sich von der Route des Traceroutes nämlich unterscheiden).

Konfiguration von PBR unter Linux

Voraussetzungen

Damit PBR unter Linux funktioniert, muss der Kernel dies unterstützen. Die Kernel der größeren Distributionen sind heute standardmäßig mit den notwendigen Optionen übersetzt worden, so dass man sich nicht selbst darum kümmern muss. Wer seinen Kernel selbst kompiliert sollte darauf achten, dass CONFIG_IP_ADVANCED_ROUTER und CONFIG_IP_MULTIPLE_TABLES auf "y" gesetzt sind.

Des Weiteren benötigt man das Programm "ip" welches sich, je nach Distribution, im Paket "iproute" bzw. "iproute2" befindet. Dieses Programm wird heute meist automatisch bei der Installation mitgeliefert, so dass man es in den seltensten Fällt nachinstallieren muss.

Prinzip (oder: Erklär mir wie es funktioniert, ohne mir die Sourcecodekommentare zu zeigen)

Wie muss man sich das Policy Based Routing technisch vorstellen?

Vorweg eine kurze Anmerkung. Ich verwende nachfolgende sowohl Router als Firewall gleichwertig. Zwar kann eine Firewall mehr als ein Router, allerdings ist diese mehr für das Policy Based Routing vorerst nicht von Interesse.

Das klassische Destination-Based Routing arbeitet folgendermaßen. Ein Datenpaket erreicht den Router/Firewall und durchläuft erstmal die PreRouting-Tabelle des Firewallsystems (vergleiche: http://de.wikipedia.org/wiki/Bild:Nfk-traversal.png). Unter Umständen kann das Paket hier verändert werden. Dies erläutere ich später noch genauer. Nach der PreRouting-Tabelle steht die Routing Entscheidung an. D.h. der Router muss nun entscheiden ob und wohin das Paket weitergeleitet werden muss. Diese Entscheidung traff der Router bisher anhand einer Tabelle, der sogenannten Routing Tabelle. In dieser Tabelle stand nur drin, was der Next Hop, also der nächste Weiterleitungspunkt für ein Paket mit einem bestimmten Ziel ist. Anbei ein klassische Routingtabelle:

 Ziel            Router          Genmask         Flags Metric Ref    Use Iface
 192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 ra0
 192.168.181.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
 172.16.143.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
 0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 ra0

Das Policy Based Routing erweitert diese Konzept nun folgendermaßen. Statt einer Routingtabelle gibt es gleich mehrere. root kann sogar eigene Tabellen anlegen. Jede Tabelle hat eigene Einträge wie bei sie auch die klassiche Routingtabelle hat. Der Router hat nun also mehrere Tabellen in denen er nachschauen kann was der Next Hop für ein bestimmtest Ziel hat. Soweit, sogut, jedoch muss der Router nun noch wissen in welcher der vielen neuen Tabellen er jetzt tatsächlich nachschauen muss.

Hier kommt ein Rule List (= Regel Liste) ins Spiel. Innerhalb dieser Liste steht in welcher Routingtabelle der Router nachschauen soll. Als Kriterium kommen bestimmte Eigenschaften des Datenpaketes in Frage, wie Quell-IP, Type of Service, Firewall Remark oder auch das Netzwerkinterface über welches das Paket reinkam.

Auf gut Deutsch kann in der Liste also drin stehen:

 Wenn ein Paket von 192.168.2.17 kommt, dann siehe in Routing Tabelle 5 nach.

Natürlich steht das nicht wirklich so drin. Eine echte Rulelist sieht so aus:

 0:      from all lookup local
 2000:   from all lookup 2
 3000:   from all lookup 3
 3500:   from all tos 04 lookup 32
 4000:   from 192.168.0.14 lookup 4
 4000:   from 192.168.0.3 lookup 4
 4000:   from 192.168.0.121 lookup 4
 4000:   from 192.168.0.30 lookup 4
 32000:  from all lookup 32
 32766:  from all lookup main
 32767:  from all lookup default

Die Zahlen vor den Anweisungen stellen die Priorität dar. Das heißt das System geht die Liste in der Reihenfolge der Zahlen durch. Wenn das Kriterum, in diesem Fall die "from ..." Anweisungen auf das Paket passen wird die Regel ausgeführt. In diesem Fall die verschieden "lookup"s. Das bedeutet wenn eine Regel greift wird in der zugehörigen Routingtabelle nachgeschaut. Findet sich in der Routingtabelle ein Eintrag der auf das Paket zutriff, wird also das Ziel des Paketes in der Tabelle erwähnt, so ist die Abarbeitung abgeschlossen. Der Router hat sich also entschieden. Findet der Router in der Tabelle keinen Routingeintrag, so geht er zur nächsten Eintrag der _Regelliste_ über und prüft diese. Dieses passiert solange bis eine Route gefunden wurde, oder die Regelliste komplett durchlaufen ist.

Übrigens die Zahlen hinter den Lookups sind natürlich die verschiedenen Routingtabellen. Diese "numersichen" Tabellen sind von root manuell angelegt worden. Die Routing Tabellen "local", "main" und "default" sind standardmäßig enthalten. local enthält alle Regeln die sich aus der Konfiguration der Netzwerkkarten ergeben. Dementsprechend kann diese Routingtabelle (als einzige) nicht von root verändert werden. "main" enthält die Routingtabelle wie man sie vom normalen Destinationbased-Routing kennt. Man kann sich diese Tabelle mit dem Befehl "route" ansehen. "default" wird normalerweise als letzte ausgeführt und dient dem Aufräumen. Alles was bisher zu keinem Ergebniss geführt hat sollte hier abgehandelt werden. Standardmäßig ist diese Tabelle allerdings leer.


Bedienungsanleitung ip

Ein Beispiel

Quellen

  1. Englischer Wikipedia Eintrag zum Thema Policy Based Routing
  2. Policy Based Routing with Linux - Online Edition
  3. Homepage von iproute2
  4. Gentoo Seite welchen den Kernelsupport erläutert