Raspberry Pi: SSTP-VPN-Server installieren

Tausend Wege führen nach Rom. So auch bei den VPN-Server-Protokollen, die bekanntesten sind PPTP, L2TP/IPSec und OpenVPN. Meist trifft die Wahl auf OpenVPN. Dafür gibt es gute Gründe, OpenVPN ist einfach zu konfigurieren und dazu noch das sicherste VPN-Protokoll. Ganz anders sieht es hier bei PPTP und L2TP/IPSec aus. Die Probleme liegen hier aber klar auf der Hand. PPTP ist unsicher und leicht zu knacken, und die Einrichtung von L2TP/IPSec ist vergleichsweise kompliziert.

Microsoft hat bereits einen Nachfolger für PPTP entwickelt, dieser nennt sich SSTP. Da es sich um eine Microsoft-Entwicklung handelt, wird SSTP auf Windows-Geräten von Haus aus unterstützt.

Glücklicherweise haben sich die Studenten der Universität Tsukuba in Japan daran gemacht, eine VPN-Server-Software zu entwickeln, die unter anderem auch die Möglichkeit beinhaltet, einen SSTP-Server zu emulieren. Und um die Einrichtung eben dieses Multi-VPN-Servers soll es heute gehen, die Serversoftware heißt SoftEther und ist kostenlos und Open Source, der Quellcode ist auf GitHub einsehbar.

So, genug zur Einleitung, jetzt geht es zum praktischen Teil.

Download von SoftEther

SoftEther muss natürlich vor der Installation erst einmal heruntergeladen werden. Die aktuellsten Downloadlink bekommst du auf dieser Seite, die Optionen für den Download müssen wiefolgt aussehen.

Feld Wert
Software SoftEther VPN (Freeware)
Component SoftEther VPN Server
Platform Linux
CPU ARM EABI (32bit)

Zum Zeitpunkt dieses Tutorials (25. Dezember 2015) ist die Version 4.19 (Build 9599) aktuell, der Download dieser geht folgendermaßen:

wget http://www.softether-download.com/files/softether/v4.19-9599-beta-2015.10.19-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.19-9599-beta-2015.10.19-linux-arm_eabi-32bit.tar.gz -O softether.tgz

Installation und Konfiguration von SoftEther

SoftEther wurde nun heruntergeladen. Das Archiv kann dementsprechend auch gleich extrahiert werden.

tar xzf softether.tgz; rm softether.tgz

Nun wird in den Ordner vpnserver navigiert, danach eine ausführbare Datei erstellt.

cd vpnserver; make

Jetzt startet man den Vorgang, indem man dreimal hintereinander die 1 auf der Tastatur drückt und jeweils mit ENTER bestätigt.

Nachdem der Vorgang abgeschlossen ist, navigieren wir wieder aus dem Verzeichnis und verschieben dieses nach /usr/local.

cd ..
sudo mv vpnserver /usr/local
cd /usr/local/vpnserver

Um die Dateien zu schützen, vergeben wir diesen bestimmte Zugangsrechte.

sudo chmod 600 *
sudo chmod 700 vpnserver
sudo chmod 700 vpncmd

Hinzufügen zum Autostart

Der VPN-Server soll bei jedem Neustart selbstverständlich automatisch starten. Aus diesem Grund legen wir ein Init-Script an, welches beim Start des Pis ausgeführt wird.
Dazu wird der Editor nano geöffnet und das Init-Script angelegt.

sudo nano /etc/init.d/vpnserver

Daraufhin wird der folgende Code hineinkopiert.

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server

DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0

case "$1" in
    start)
        $DAEMON start
        touch $LOCK
        ;;
    stop)
        $DAEMON stop
        rm $LOCK
        ;;
    restart)
        $DAEMON stop
        sleep 3
        $DAEMON start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

Nun wird nur noch gespeichert, dies erledigt man mit Strg+O, ENTER und Strg+X.
Danach müssen wir einige Schritte vollziehen, damit das Script im Autostart landet.

sudo mkdir /var/lock/subsys
sudo chmod 755 /etc/init.d/vpnserver
sudo /etc/init.d/vpnserver start
sudo update-rc.d vpnserver defaults

Jetzt ist der VPN-Server im Autostart und läuft auch bereits.

Überprüfen des VPN-Servers

Wir überprüfen jetzt, ob der VPN-Server problemlos läuft. Dazu wechseln wir in das Programmverzeichnis und starten den Terminal-Client für SoftEther.

cd /usr/local/vpnserver
sudo ./vpncmd

Drücke nun 3, bestätige mit ENTER und tippe check ein.

Wenn alles klappt, dann kannst du darauf exit eintippen, um den Client zu schließen.

Für die weitere Konfiguration gibt es jetzt zwei Wege: Entweder du lädst dir den Manager für Windows herunter, sodass die komplette Konfiguration über eine GUI läuft, oder du nutzt die Kommandozeile.

Ich werde die Kommandozeile nutzen, da diese systemunabhängig ist.

Änderung des Admin-Kennwortes

Wir öffnen wieder den eben geschlossenen Client.

sudo /usr/local/vpnserver/vpncmd

Hier tippen wir 1 ein und bestätigen mit ENTER.
SoftEther wird zwei Abfragen machen, diese können wir jeweils mit ENTER bedenkenlos überspringen.
Die Kommandozeile sollte jetzt mit VPN Server> beginnen. Wenn sie dies tut, können wir ServerPasswordSet eintippen. Daraufhin folgt die Kennwortabfrage, wähle hier ein sicheres Kennwort.

Erstellen eines virtuellen Hubs

Was ist ein Hub? Ein Hub ist bei SoftEther sozusagen eine Konfiguration für einen VPN-Server. Rein theoretisch können hunderte Hubs angelegt werden, beispielsweise einen Hub für Privates und einen für die Arbeit. Ich gehe jetzt einfach mal davon aus, dass der Raspberry Pi nur für private Zwecke genutzt wird, weshalb der Hub in diesem Falle schlicht und einfach VPN lautet.

Um nun also besagten Hub zu erstellen, tippen wir folgenden Befehl ein.

HubCreate VPN

Jetzt wird nach einem Administrator-Kennwort für den Hub gefragt, dieses wirst du immer benötigen, wenn du nicht als Server-Administrator angemeldet bist und den Hub verwalten willst. Den erstellten Hub wählen wir jetzt aus.

Hub VPN

Aktivieren von SecureNAT

SecureNAT ist eine sehr einfache Möglichkeit später vom Hub auf das interne Netzwerk zuzugreifen. Wenn SecureNAT nicht aktiviert wäre, müsstest du einen seperaten DHCP-Server besitzen, und diesen auch entsprechend konfigurieren, um auf das interne Netz zugreifen zu können. SecureNAT wird mit folgendem Befehl aktiviert:

SecureNatEnable

Hinzufügen von Benutzern

Jetzt sind wir bei einem der entscheidensten Punkte angelangt, dem Hinzufügen der Benutzer für den Hub. Benutzer lassen sich im Allgemeinen mit dem Befehl UserCreate erstellen, eine Liste aller Benutzer lässt sich mit UserList ausgeben. Auch eine Einteilung in Gruppen ist möglich, sodass beispielsweise im Hub Privat die Gruppen "Familie" und "Freunde" existieren können. Jeder Nutzer kann einen unterschiedlichen Authentifizierungsmodus besitzen (Kennwort, Zertifikat, etc.). Wir erstellen hier im Beispiel den Nutzer "julian".

UserCreate julian

Wie bereits erwähnt, gibt es unterschiedliche Möglichkeiten zur Authentifizierung. Standardmäßig ist dies die Variante per Kennwort, andere Varianten können über die folgenden Befehle genutzt werden.

In diesem Tutorial verwende ich die Variante mit Kennwort, somit wird mit dem folgenden Befehl ein Kennwort für den Nutzer "julian" gesetzt.

UserPasswordSet julian

Einrichten von SSTP

SSTP setzt genau wie OpenVPN auf ein Zertifikat. Signierte Zertifikate kosten Geld, deswegen erstellen wir uns selbst eines. Glücklicherweise hat SoftEther dafür eine Funktion implementiert, die wir wiefolgt nutzen:

ServerCertRegenerate CN

Die CN ist dann die IP des Raspberry Pis oder auch seine Domain. Aber moment mal! Der heimische DSL-Anschluss hat doch keine feste IP, muss ich mein Zertifikat jetzt ständig ändern? Für diese Problematik gibt es DynDNS-Dienste. NO-IP wäre ein kostenloser Anbieter, der dies ermöglicht. SoftEther hat aber bereits einen eigenen DynDNS-Service eingebaut, vollständig vorkonfiguriert, sodass dafür die Konfiguration entfällt. Die daraus resultierende DynDNS-Adresse bekommen wir dann durch folgenden Befehl:

DynamicDnsGetStatus

Zurückgegeben wird dann folgende Ausgabe:

Item                                  |Value
--------------------------------------+--------------------------
Assigned Dynamic DNS Hostname (Full)  |vpn123456789.softether.net
...

Uns interessiert nur der Wert der ersten Zeile. Denn jetzt können wir auch das Zertifikat generieren, dazu wird der Befehl angewandt, also:

ServerCertRegenerate vpn123456789.softether.net

Wenn du bereits ein SSL-Zertifikat besitzt oder eines über openssl erstellt hast, dann kannst du den Befehl ServerCertSet PFAD/ZUM/Zertifikat.cer nutzen, um dieses zu implementieren.

Jetzt haben wir das Zertifikat erstellt, welches wir an unsere VPN-Clienten verteilen müssen. Wir verwenden den folgenden Befehl, um das Zertifikat in einer Datei namens cert.cer zu speichern:

ServerCertGet ~/cert.cer

Nun noch mit folgendem Befehl den SSTP-Service starten und daraufhin das Verwaltungsprogramm schließen.

SstpEnable yes
exit

Wie sieht es mit Smartphones aus?

Da SSTP ein Microsoft-Protokoll ist, unterstützen weder Android noch iOS die dementsprechenden Protokolle, die sicherste Alternative ist L2TP. Selbst Windows Phone (8.1) unterstützt lediglich L2TP. Da aber SoftEther die Konfigurationshürde von L2TP/IPSec nimmt, aktivieren wir dieses zusätzlich, um auch von diesen Geräten auf unser VPN zuzugreifen.
Der Befehl dazu lautet:

IPsecEnable

Nun kommen einige Abfragen, welche ich nun erkläre.

  1. Enable L2TP over IPsec Server Function: yes
    L2TP mit IPSec-Verschlüsselung wird aktiviert, sodass die Clients darauf zugreifen können.

  2. Enable Raw L2TP Server Function: no
    würde L2TP ohne Verschlüsselung erlauben, nicht empfehlenswert, da sehr unsicher

  3. Enable EtherIP / L2TPv3 over IPsec Server Function: no
    kein Heim-Router unterstützt diese Funktion, weshalb sie deaktiviert wird

  4. Pre Shared Key for IPsec: eine beliebige Zeichenfolge
    wird zur Validierung des Clients verwendet

  5. Default Virtual HUB in a case of omitting the HUB on the Username: VPN
    der Hub, der verwendet wird, wenn er vom User nicht explizit angegeben wurde

Mehr ist es nicht, nun können auch andere Clients auf das VPN zugreifen.

Letzte Schritte

Nun ist es auch fast geschafft. Wir verschieben nur noch das Zertifikat in den Home-Ordner des Benutzers pi, damit wir dieses auch mit einem SFTP-Client herunterladen und als vertrauenswürdiges Zertifikat installieren können, und zu guter Letzt noch eine Portfreigabe in dem Router einstellen. Aber erstmal der Reihe nach.

Verschieben des Zertifikats

Das Zertifikat ist momentan nur für den Root-Nutzer erreichbar. Also wechseln wir den Nutzer, indem wir sudo su eintippen, danach können wir folgenden Code kopieren und ausführen, dann ist das Zertifikat auch schon verschoben.

cd ~
chown pi:pi cert.cer
mv cert.cer /home/pi/cert.cer
exit

Der Befehl navigiert zuerst in den Ordner /root, gibt dem Nutzer pi danach die Rechte am Zertifikat, verschiebt es den Home-Ordner von pi und beendet dann die Root-Sitzung, sodass du wieder die Rechte des Benutzers pi hast.
Von dort kann das Zertifikat mit einem SFTP-Client deiner Wahl heruntergeladen werden, FileZilla und Cyberduck sind zwei mögliche Beispiele.

Installation als vertrauenwürdiges Zertifikat unter Windows

Besser als auf der offiziellen Microsoft-Seite kann ich es nicht erklären, deshalb hier der Link zur Hilfeseite.

Einrichten der Portfreigabe

Leider gibt es für das Einrichten einer Portfreigabe keine allgemeine Anleitung, ich erkläre es einfach mal am Beispiel der AVM Fritz!Box 7390.

Zuerst müssen wir das Webinterface der Fritz!Box aufrufen, indem wir http://fritz.box/ laden und, sofern gesetzt, uns mit einem Passwort einloggen.
Nun gehen wir im Menü (links) auf Internet und auf den Unterpunkt Freigaben, um dort den Reiter Portfreigaben auszuwählen.

Um eine neue Portfreigabe anzulegen, klicken wir nun auf den Button Neue Portfreigabe. Bei dem Dropdown Portfreigabe aktiv für wählen wir Andere Anwendungen, um die Portfreigabe für einen beliebigen Service anlegen zu können. Nun können wir eine Bezeichnung der Portfreigabe wählen, welche lediglich strukturelle Relevanz hat. Die dritte Einstellung hört auf den Namen von Port. Hierbei geben wir den Port 443 (TCP) ein, da dieser der einzig relevante für die SSTP-Verbindung ist. Nun wählen wir den Raspberry Pi bzw. dessen IP-Adresse, um diese Portfreigabe für den Minicomputer zu erlauben. Zuletzt muss die Angabe "an Port" angegeben werden, diese ist ebenfalls 443.

Für den L2TP/IPSec-Server müssen folgende Ports freigegeben werden:

Fazit

Sind all diese Schritte abgeschlossen, so hat man eine sehr sichere und schnelle VPN-Verbindung, welche eine hervorragende Stabilität aufweist. Natürlich gibt es keinen offiziellen Client für Systeme außerhalb des Windows-Universums, aber der Server ist ja auch inoffiziell.
Übrigens: SoftEther enthält auch eine OpenVPN-Emulation, für diese gibt es weit mehr Clients, sodass hier einer plattformübergreifenden VPN-Lösung nichts im Wege steht.

Quellen: Digital Ocean, Jan Karres, Steven Eppler's Blog

Kommentar hinterlassen

Markdown wird unterstützt.

Kommentare

der befehl IPsecEnable geht nicht laut deiner anleitung schritt für schritt

Hallo Mario,
danke für das Feedback. Ich habe die Anleitung 2015 geschrieben, es kann dadurch natürlich sein, dass der Installationsprozess jetzt anders abläuft.

Wenn die Ausführung des SstpEnable-Befehls geklappt hat, dann kann es sein, dass der IPSecEnable-Befehl möglicherweise umbenannt oder gar gelöscht wurde. Versuche doch einmal, nur IPSec einzugeben, vielleicht schlägt dir SoftEther ja den korrekten Befehl vor.

Viele Grüße,
Julian