Policy Routing ist nicht ganz einfach und im Idealfall musst du als Benutzer darüber auch nicht viel wissen, da es einfach im Hintergrund dafür sorgt, dass das Mesh-netzwerk richtig funktioniert. Dennoch sollen hier einige Grundlagen des Policy Routings in der Meshkit Firmware erklärt werden, damit die Möglichkeit besteht zu begreifen was hier passiert.
Das freifunk-policyrouting-Paket ist standardmässig installiert und wird benötigt, um Traffic je nach Herkunft unterschiedlich weiterleiten zu können.
Eigener Traffic soll über die eigene Internetleitung geschickt werden, während Traffic aus dem Freifunknetz auch nur ins Freifunknetz weitergeleitet werden darf. Als eigener Traffic ist per Default aller Traffic definiert, der entweder lokal, also vom Freifunkrouter selbst generiert wurde oder der aus der Firewall-Zone LAN kommt. Als Freifunktraffic wird alles betrachtet, was das Node über ein Interface erreicht hat, das zur Zone Freifunk gehört. Für eine Erklärung der Zonen siehe: LAN, WAN und Freifunk - Die einzelnen Zonen im Router.
Das Bild verdeutlicht dies:
Warnung
Diese Einstellungen sind komplex und es ist leicht Dinge kaputt zu machen. Ändere an den EInstellungen also nur etwas, wenn du genau weisst was du tust.
Policy Routing kann in LuCI unter Administration ‣ Freifunk ‣ Policy Routing konfiguriert werden. Das Paket das diese Funktion für LuCI mitbringt ist luci-app-freifunk-policyrouting und ist in der Regel schon installiert. Ansonsten muss es noch nachinstalliert werden, siehe Pakete installieren.
Hinweis
Will man auch Traffic aus der LAN-Zone nur übers Freifunknetz schicken dann fügt wählt man bei Firewallzonen zusätzlich auch noch lan aus.
Die Konfiguration für das policy Routing befindet sich in /etc/config/freifunk-policyrouting und kann entweder direkt bearbeitet werden oder mit uci verändert werden.
config 'settings' 'pr'
option 'strict' '1'
option 'fallback' '1'
option 'zones' 'freifunk'
option 'enable' '1'
Zum Bearbeiten mit uci:
uci set freifunk-policyrouting.pr.strict=1
uci set freifunk-policyrouting.pr.fallback=1
uci set freifunk-policyrouting.pr.enable=1
uci set freifunk-policyrouting.pr.zones=freifunk
uci commit freifunk-policyrouting.pr.zones
Beschreibung der einzelnen Optionen:
Option | Beschreibung | Default |
---|---|---|
strict | Wenn keine Route ins Internet über das Freifunknetz verfügbar ist dann würde Traffic aus Freifunk über die eigene Leitung geroutet. Der Wert 1 verhindert dies durch Einfügen einer Firewallregel die dies verbietet. Will man in diesem Fall erlauben den Traffic über das eigene Internet zu routen dann den Wert auf 0 setzen | 1 |
fallback | Gibt an, ob bei Ausfall der eigenen Internetleitung der eigene Traffic über Freifunk ins Internet geroutet werden soll. Wird als Wert 1 gesetzt dann darf Freifunk als Fallback verwendet werden. | 0 |
enable | 1 aktiviert Policy Routing, 0 deaktiviert es | 0 |
zones | Zonen die für die die Policy Routing Regeln gelten sollen. |
Wurden alle Einstellungen gemacht/verändert dann muss Policy Routing noch mit
/etc/init.d/freifunk-policyrouting restart
neu gestartet werden, damit diese Konfiguration aktiv wird.
Hinweis
Will man auch Traffic aus der LAN-Zone nur übers Freifunknetz schicken dann fügt man der Option zones noch lan hinzu, also zones=”freifunk lan”.
Zum Anzeigen und Verändern der Routingtabellen und -regeln wird ip verwendet. Wichtige Kommandos von ip sind in diesem Zusammenhang:
Kommando | Aktion |
---|---|
ip rule show | zeigt alle Regeln |
ip route show | zeigt alle Routen aus der main Routingtabelle |
ip route show table olsr | zeigt alle Routen aus der olsr Routingtabelle |
Zunächst wollen wir uns für einen Überblick alle Regeln ansehen und geben dazu auf der Shell des Routers ip rule show ein. Als Ausgabe erscheint auf einem Knoten auf dem Policyrouting für die Freifunkzone aktiviert wurde:
0: from all lookup local
1000: from all lookup olsr
2000: from all lookup localnets
20000: from all iif wlan0 lookup olsr-default
20000: from all iif wlan0-1 lookup olsr-default
20001: from all iif wlan0 unreachable
20001: from all iif wlan0-1 unreachable
32766: from all lookup main
32767: from all lookup default
100000: from all lookup olsr-default
Die Zahl in der ersten Spalte gibt die Priorität an. In dieser Reihenfolge werden die Regeln durchlaufen. Danach folgen Bedingungen die zutreffen müssen, damit ein Paket das weitergeleitet werden soll diese Regel benutzt. Zum Beispiel meint from all iif wlan0-1 von allen IPs, von denen Pakete über die Schnittstelle wlan0-1 empfangen wurden. Schliesslich folgt eine Anweisung, wie mit dem Paket zu verfahren ist. unreachable besagt, wir brechen hier ab wenn zuvor keine passende Route gefunden wurde. lookup dagegen ist eine Anweisung, zu welcher Routingtabelle gesprungen werden soll um dort eine passende Route zu finden. Wird keine passende Route in dieser Tabelle gefunden dann wird mit der nächsten regel fortgefahren.
Für Policy Routing sind folgende Routingtabellen von Bedeutung:
Tabelle | Beschreibung |
---|---|
local | enthält lokale Hostrouten |
olsr | enthält alle von OLSR empfangenen Routen mit Ausnahme der Defaultroute |
olsr-default | enthält die von OLSR empfangene Defaultroute (sofern vorhanden) |
localnets | Enthält Routen zu direkt erreichbaren Netzwerken |
main | Dies ist die Hauptroutingtabelle von Linux. Hier steht unter anderem die eigene Defaultroute über den eigenen Internetzugang (sofern vorhanden). |
default | wird nicht verwendet |
Zwei Beispiele sollen helfen zu verstehen, wie Traffic aus verschiedenen Zonen anders behandelt wird:
Von einem an LAN angeschlossenen Rechner oder vom Node selbst soll eine Verbindung mit einer Adresse im Internet aufgebaut werden. Daher muss eine Defaultroute gefunden werden.
Zunächst werden die Regeln 0, 1000 und 2000 durchlaufen und dementsprechend die Tabellen local, olsr und localnets befragt. Hier wird jedoch keine Defaultroute gefunden. Die Regeln mit den Prioritäten 20000 und 20001 werden übersprungen, da die Bedingungen iif wlan0 bzw. iif wlan0-1 nicht zutreffen. Die Regel mit der Priorität 32766 verweist nun auf die main Routingtabelle. Wird hier nun eine Defaultroute gefunden, dann benutzt das Paket die gefundene Route. Wird keine gefunden suchen wir weiter. Die default Tabelle ist leer und wird daher übersprungen. Wurde ausgewählt dass Fallback übers Freifunknetz möglich sein soll erreichen wir schliesslich die Regel mit der Priorität 100000, die die Anweisung enthält, in der Tabelle olsr-default nachzuschauen. Wird dort eine defaultroute gefunden wird diese benutzt und das Paket übers Mesh geschickt. Wenn nicht dann hatten wur kein Glück. In diesem Fall kennt das Node keine Route ins Internet.
Ein über WLAN verbundener Rechner oder Access Point will eine Verbindung mit einer Adresse im Internet aufbauen. Der Rechner ist über die Schnittstelle wlan0 verbunden, die zur Zone Freifunk gehört. Es muss nun wiederum eine Defaultroute gefunden werden.
Zunächst werden die Regeln 0, 1000 und 2000 durchlaufen und dementsprechend die Tabellen local, olsr und localnets befragt. Hier wird jedoch keine Defaultroute gefunden. Eine der Regeln mit der Priorität 20000 trifft zu, es wird also die Tabelle olsr-default befragt. Wird in dieser Tabelle eine Defaultroute gefunden, dann wird diese benutzt. Wird keine gefunden geht es weiter mit den Regeln mit Priorität 20001 die hier sind, weil die Option strict gewählt wurde. Die Suche nach einer Route wird hier durch die Anweisung unreachable abgebrochen und dem Rechner mitgeteilt, dass der Knoten keine defaultroute für ihn kennt. Hätte man nicht die Option strict gewählt dann würde als nächstes die Tabelle main befragt und dort die eigene Defaultroute des knotens gefunden und benutzt.