Nicco Kunzmann

Essays

OLSR Meshing durch ein NAT-Gateway mit der Berliner Freifunk-Firmware

OLSR Meshing durch ein NAT-Gateway mit der Berliner Freifunk-Firmware

Die Berliner Freifunk-Firmware basiert auf OpenWRT/LEDE. Es gibt einen Blog-Post über die Performance von Tunneling-Protokollen, der verschiedene Methoden vorstellt, einen Tunnel zwischen OpenWRT-Instanzen aufzubauen. Hier möchte ich zeigen, wie ich es geschafft habe, durch ein NAT ein Meshing mit OLSR herzustellen.

Hardware-Setup

Wir haben die Router so zusammengestöpselt:

OpenWRT-1 → NAT → OpenWRT-2

OpenWRT-1 kann den Router OpenWRT-2 durch ein Gateway erreichen, das NAT macht. OpenWRT-2 kann den Router OpenWRT-1 nicht selbst erreichen.

IP-Verbindungen von OpenWRT-1 nach OpenWRT-2 würden diesen Weg gehen:

OpenWRT-1 ⇄ LAN (172.16.0.X) ⇄ Fritzbox → NAT → LAN (192.168.0.X) ⇄ Internet-Gateway ⇄ LAN (192.168.0.X) ⇄ OpenWRT-2

Beispiel: Also kann der OpenWRT-1 eine Verbindung zu OpenWRT-2 aufbauen, indem er sich mit 192.168.0.10 verbindet. OpenWRT-2 sieht, dass diese Verbindung nicht von 172.16.0.3 kommt sondern von 192.168.0.2, der Fritzbox.

Tunnel durch NAT

Man kann durch dieses NAT nicht meshen, weil

Die Idee ist, hier einen Tunnel aufzubauen. Dazu bietet die vorhandene Firmware die Möglichkeit, einen unsicheren OpenVPN-Tunnel herzustellen.

Hier die Kommandos für die Router aus dem Blog-Post:

Diese Kommandos können mit Services→OpenVPN nachgebildet werden, siehe Zusatz oder in System→Startup mit einem & dahinter (Start im Hintergrund) in das das Feld “Local Startup” kopiert werden. In beiden Fällen können die Verbindungen beim Start hergestellt werden.

Dann können die beiden sich einander anpingen.

Die IP-Adressen 10.5.5.2 und 10.5.5.1 sind außerhalb des IP-Adressbereiches 10.22.0.0/16, der für das Meshing der Freifunk-Communty im Potsdam genutzt wird. Ich habe versucht, über IP-Adressen aus diesem Bereich einen Ping durchzuführen, der mir nicht gelungen ist.

Tunnel in der Weboberfläche Anzeigen

Der Tunnel erstellt ein Gerät namens tun0. Das sollte mit dem Befehl ip addr sichtbar werden. Um dieses über Luci, die Router-Weboberfläche zu konfigurieren, muss dieser erstmal als Gerät sichtbar gemacht werden.

Dazu editiere ich die Luci-Einstellungen für das Netzwerk: vi /overlay/upper/etc/config/network bei beiden Routern. i zum Einfügen.

config interface 'tunnelmesh'
        option ifname 'tun0'
        option proto 'none'

Escape und dann :wq zum Schreiben und Schließen.

Nun taucht unter Network→Interfaces das Gerät “tunnelmesh” auf. Dort auf “Edit” klicken und unter “Firewall Settings” die Zone “Freifunk” auswählen. Speichern und Anwenden.

Mesh über den Tunnel

Nun kann ich OLSR einstellen, über den Tunnel zu meshen. Unter Services→OLSR IPv4 kann ich auf Add ein neues Interface hinzufügen. Bei beiden Routern sind die Einstellungen fast gleich:

Speichern und Anwenden.

Über Status→OLSR→Neighbors sollte jetzt ein neuer Nachbar hinzugekommen sein. Die beiden Router sehen sich.

Missglückte Versuche

Wie oben beschrieben habe ich noch anderes ausprobiert.

Der Blog-Post beinhaltet mehrere Techniken:

Zusatz: OpenVPN über die Nutzeroberfläche konfigurieren

Die folgenden Einstellungen sind aus der Datei vi /tmp/etc/openvpn-NAME.conf, wobei NAME mit dem Namen zu ersetzen ist, den Du bei Services→OLSR IPv4→Add eingibst. Das kann bei beiden Routern der selbe sein.

Die Konfiguration über die Weboberfläche habe ich für den Server durchgeführt. Die Konfiguration für den Client habe ich über das Kommando durchgeführt. Es ist nur nötig, entweder die Oberfläche zu benutzen oder das Kommando in Local Startup zu kopieren.

Wenn die VPNs bei Neustart nicht aufgebaut werden, dann mal System→Startup untersuchen, ob openvpn aktiviert ist. Es muss aktiviert sein.

Quellen

Dank an Hannes, der mich mit einer Mail in andere Richtungen gestoßen hat. Der Blog Post über Performance hat eine gute Übersicht gegeben. Ich hatte ein VPN-Konzept geschrieben, das aber noch einen zusätzlichen Rechner erfordern würde. Man kann auch Passwörter und Schlüssel verwenden, um das VPN zu sichern.