Skip to content

mesh VPN Server installieren

lhampe edited this page Dec 5, 2014 · 3 revisions

Mesh-VPN-Server

Prinzipiell gesehen gibt es bereits eine Vielzahl von Anleitungen und How-Tos, wie eine komplette freifunk-Infrastruktur samt Internet-Gateway zu installieren und zu konfigurieren ist. Allerdings hat sich herausgestellt, dass auf Grund von sich ändernden Gegebenheiten (andere Kernelversionen, neue Pakete, neue Versionen der Software usw.) es sinnvoll erscheint, hier die genaue Beschreibung der momentanen Münchener Infrastruktur darzustellen. Die für die Einrichtung verwendeten Quellen sind am Ende des Textes jeweils angeführt und dienen zum Nachschlagen einzelner Details. Einige Passagen wurden aus dem sehr gut dokumentierten Artikel der freifunk Community Weil am Rhein entliehen. Ein sehr herzliches Dankeschön sei an dieser Stelle an unsere Mitstreiter ins Drei-Länder-Eck gesandt!

Das freifunk-Netz unterscheidet sich grundsätzlich von den "normalen" Netzwerken, die wir aus unserem Alltag kennen dadurch, dass es sich um ein vermaschtes Funk-Netzwerk handelt. Wikipedia weiss hierzu:

"In einem vermaschten Netz (engl. Mesh) ist jeder Netzwerkknoten mit einem oder mehreren anderen verbunden. Die Informationen werden von Knoten zu Knoten weitergereicht, bis sie das Ziel erreichen. Wenn jeder Teilnehmer mit jedem anderen Teilnehmer verbunden ist, spricht man von einem vollständig vermaschten Netz."

und

"Vermaschte Netze sind im Regelfall selbstheilend und dadurch sehr zuverlässig: Wenn ein Knoten oder eine Verbindung blockiert ist oder ausfällt, kann sich das Netz darum herum neu stricken. Die Daten werden umgeleitet und das Netzwerk ist nach wie vor betriebsfähig. Das Konzept vermaschter Netze lässt sich auf kabelgebundene wie auf Funknetzwerke als auch auf die Interaktion von Programmen anwenden. Mobile Ad-hoc-Netzwerke (MANet), die von vielen Verbrauchergeräten unterstützt werden, stellen einen Unterbereich der vermaschten Netzwerke dar. In großen Netzen findet man oftmals eine Struktur, die sich aus mehreren verschiedenen Topologien zusammensetzt. So ist das Internet in weiten Teilen ein vermaschtes Netz, trotzdem gibt es „Hauptverkehrsadern“ (die Backbone-Leitungen), die einem Ring ähneln. Bei vollvermaschten Netzen mit n Knoten ist die Anzahl der Verbindungen (n^2 -n)/2; dies ist zugleich die obere Grenze der Verbindungsanzahl bei teilvermaschten Netzen."

Leider ist davon auszugehen, dass wir nicht in einer idealen Umgebung leben und ein vollvermaschtes Netzwerk aufbauen werden können. Es werden sich demnach mit hoher Wahrscheinlichkeit - am Anfang aber in jedem Fall - Netz-Inseln bilden, die keine Funk-Verbindung miteinander haben. Um dieses Problem zu umgehen und die Inseln zu einem quasi Netzwerk zu verbinden kommen ein oder mehrere zentrale Server zum Einsatz, zu denen sich die freifunk-Router verbinden können. Diese Server leiten eingehenden Netzwerkverkehr dann in die außer Reichweite befindlichen Funkmaschen weiter. Aus verschiedenen Gründen (hauptsächlich wegen der hohen Leistungsfähigkeit bei der Verschlüsselung und der kleinen Binaries haben wir uns in München für den fastd-Server entschieden. Im Folgenden wird detailliert erläutert, wie ein solcher fastd-Server installiert und konfiguriert wird. Das Routing übernimmt wie in den Funkmaschen batman-adv.

Vorbereitungen

Die zentralen Elemente sind das batman-adv Kernelmodul und der fastd VPN-Server. Als Betriebssystem wird von Debian Wheezy mit ein Linux-Kernel in der Version 3.2.41 ausgegangen. Das Vorgehen für andere Linux-Distributionen sollte ähnlich sein. Allerdings wird man in diesen Fällen unter Umständen um das Kompilieren von fastd und batman-adv/batctl vermutlich nicht herumkommen. Weiterhin wird von einer Einrichtung als Benutzer root ausgegangen. Falls dem nicht so ist, muss den Befehlen welche Superuser-Rechte benötigen ein sudo vorangestellt werden (Also, sudoer sollte man schon sein, sonst wird es nichts mit der Server-Einrichtung). Des Weiteren sei an dieser Stelle auch darauf hingewiesen, dass davon auszugehen ist, dass dieser zentrale Server bei einem Dienstleister angemietet wird - sei es als ein dedizierter Server oder als ein VPS o.ä. Gerade bei virtuellen Servern besteht die latente Gefahr, dass der Betreiber/Hoster das Laden eigener Kernel-Module nicht gestattet oder dies auf Grund der Virtualisierung nicht möglich ist.

Installation von batman-adv und fastd

Grundsätzlich benötigen wir für unser Vorhaben die folgenden Software-Pakete: batman-adv: B.A.T.M.A.N advanced Kernelmodul batctl: Konfigurationswerkzeug fastd: VPN-Server

Diese Software-Pakete sind nicht Teil der Standart-Debian-Distribution und müssen daher über ein externes Repository bezogen werden. Dies fügen wir in der Datei /etc/apt/sources.list wie folgt hinzu: deb http://repo.universe-factory.net/debian/ sid main

Ist dies erledigt, müssen noch die öffentlichen Schlüssel des Repository importiert werden (hiermit wird dann die Identität der Pakete überprüft):

gpg --keyserver pgpkeys.mit.edu --recv-key AB7A88C5B89033D8
gpg --keyserver pgpkeys.mit.edu --recv-key 16EF3F64CB201D9C
gpg -a --export AB7A88C5B89033D8 | sudo apt-key add -
gpg -a --export 16EF3F64CB201D9C | sudo apt-key add -

Erst jetzt können wir mit der eigentlichen Arbeit beginnen und die benötigten Pakete installieren. Dies geschieht mit den folgenden Befehlen:

apt-get update
apt-get install batman-adv-dkms
apt-get install batcl

Um das noch inaktive batman-adv Kernelmodul zu laden geben wir folgendes ein:

modprobe batman-adv

Die auf den verschiedenen Gateways verwendeten Modulversionen sollten kompatibel sein. Zur Zeit - 24.09.2014 - benutzen wir ein Setup welches mittels dem Befehl

batctl -v

die Version "batctl debian-2013.4.0-2 [batman-adv: 2013.4.0]" auswirft.

Damit es Zukunft automatisch während des Boot-Vorgangs geladen wird fügen wir noch die folgende Zeile der Datei /etc/modules hinzu:

batman-adv

Damit haben wir unserem Gateway die mesh-Routing-Fähigkeit gegeben. Jetzt fehlt "nur" noch der eigentliche Tunnel-Dienst, damit die einzelnen freifunk-Router miteinander verbunden sind und sich im gleichen Netz befinden. Mittels

apt-get install fastd

installieren wir das fastd-VPN-Paket aus dem gleichen Repository wie auch die beiden batman-Pakete. Der Tunnel-Server arbeitet (authentifiziert und verschlüsselt) basierend auf je einem Schlüssel-Paar für den Client und den Server, welches für jede einzelne Verbindung eines freifunk-Routers zu unserem Server erstellt werden muss. Wir kümmern uns jetzt zunächst um die Konfiguration des Servers. Mit den Befehlen

mkdir /etc/fastd/ffmuc-mesh-vpn
mkdir /etc/fastd/ffmuc-mesh-vpn/peers

legen wir die beiden Verzeichnisse an, die für die Konfiguration unseres Netzwerks und einzelnen Peers (Teilnehmer) benötigen. Eigentlich ist der Name des Verzeichnisses ffmuc-mesh-vpn beliebig wählbar. In München wird allerdings die freifunk-TLD .ffmuc verwendet; insofern ist es naheliegend, alle Ports, Interfaces und Verzeichnisse entsprechend anzupassen.

Als nächstes generieren wir ein Schlüsselpaar und speichern es in der Datei keys:

fastd --generate-key >> keys

Die Ausgabe der Datei sollte dem folgenden Beispiel ähneln:

cat keys
2014-04-26 21:15:27 +0200 --- Info: Reading 32 bytes from /dev/random...
Secret: 90722f73f2c23b672ad419f66191420444a3e7a9a69c9fa139e0da096570b857
Public: a7d7cfbd2d4a463ffd8d6faff71fffbef7761ae95d685913d774e38aa1f31596

Den privaten Schlüssel speichern wir nun in der Datei /etc/fastd/freifunk/secret.conf in Form der folgenden Zeile:

secret "90722f73f2c23b672ad419f66191420444a3e7a9a69c9fa139e0da096570b857";

Der eingetragene Schlüssel muss an dieser Stelle selbstverständlich durch den tatsächlich generierten Schlüssel ersetzt werden. Beide Dateien (keys und secret.conf) schützen wir durch eine Einschränkung der Rechte vor dem Zugriff Dritter:

chmod 600 keys
chmod 600 secret.conf

Der öffentliche Schlüssel wird nicht für die Konfiguration des fastd-Servers benötigt, wohl aber später für die Konfiguration der Clients. Schließlich erzeugen wir die zentrale Konfigurationsdatei /etc/fastd/freifunk/fastd.conf mit folgendem Inhalt:

log level warn;
log to syslog level info;
interface "mesh-vpn";
method "xsalsa20-poly1305"; 
#method "aes128-gcm";
method "salsa2012+gmac"; # new method, between gateways for the moment (faster)
bind 0.0.0.0:10000;
include "secret.conf";
secure handshakes yes;
mtu 1426;
include peers from "/etc/fastd/ffmuc-mesh-vpn/peers/";
on up "
 ip link set address 10:80:00:XX:66:66 up dev $INTERFACE        #<--- XX ist anzupassen und durch die IP-Adresse des GW zu ersetzen; also z.B. 10:80:00:11:66:66 für GW01
 batctl if add $INTERFACE
";

Wer seine Konfiguration maßschneidern möchte, der findet eine detaillierte Beschreibung der verfügbaren Optionen am Ende des Textes. Im Unterverzeichnis /etc/fastd/ffmuc-mesh-vpn/peers werden wir zu einem späteren Zeitpunkt für jeden Client eine Datei mit dem öffentlichen Schlüssel des Clients anlegen:

key "INCOMING_CONNECTION_PARTNER_PUBLIC_KEY";

Der öffentliche Schlüssel wird von Gluon auf den Clients zum Zeitpunkt der Erstkonfiguration angelegt und muss per e-Mail an den Gateway-Administrator ([email protected] oder [email protected]) übermittelt werden. Doch davon später mehr. Jetzt müssen wir den fastd-Server nur noch starten. Dies bewerkstelligen wir mit einer einfachen Kommandozeile:

/etc/init.d/fastd start

Da mit dem Installieren des fastd-Pakets gleichzeitig die zugehörigen Links in den /etc/rc.X-Verzeichnissen erstellt wurden, startet der fastd-Server beim nächsten Bootvorgang automatisch.

Quellen: