Die sichere Konfiguration eines VPNs gehört zu den komplizierteren Disziplinen eines Netzwerkadministrators. Das Dead Simple VPN verspricht, den Aufwand auf ein Minimum zu reduzieren.
Es gibt immer wieder Situationen, in denen man einen sicheren Tunnel ins Internet oder eine sichere Verbindung ins heimische Netzwerk aufbauen muss – etwa, falls man auf einer Geschäftsreise aus einem offenen Hotel-WLAN heraus Daten auf das NAS-Gerät im Büro schieben möchte, oder wenn man auf einer Konferenz das unverschlüsselte WLAN nutzen muss und vermeiden will, dass Fremde Logins oder Hash-Werte aus dem ungesicherten Datenstrom herausfischen.
Der klassische Weg für diesen Schutz führt über ein virtuelles privates Netz oder kurz VPN. Es bohrt quasi einen Tunnel aus dem gerade genutzten Netz von Ihrem Rechner durch das Internet zu einem vertrauenswürdigen Server in einem vertrauenswürdigen Netzwerk. Dritte haben dadurch keinen Zugriff mehr auf die übertragenen Daten.
Zu den klassischen Werkzeugen für den Aufbau eines VPNs gehören OpenVPN und das etwas modernere Wireguard [1]. In der Praxis fällt die Handhabung dieser Tools allerdings nicht gerade leicht. Abhilfe verspricht hier das Dead Simple VPN [2]: Hier genügt nach der Installation ein einziges Kommando, um die VPN-Verbindung aufzubauen.
Installation
Bislang findet sich Dead Simple VPN (DSVPN) noch nicht in den Paketquellen der gängigen Distributionen. Lediglich Arch Linux führt das Programm im AUR. Dort genügt für die Installation der Befehl yay -S dsvpn im AUR-Helper Yay.
Bei anderen Distributionen müssen Sie die Anwendung aus dem Quellcode kompilieren. Das hört sich allerdings schwieriger an, als es in der Praxis ist. Listing 1 demonstriert das Vorgehen auf einem frisch installierten Ubuntu 19.04. Das letzte Kommando im Listing führt bereits das VPN-Programm aus und zeigt die Hilfe zu den einzelnen Parametern an (Abbildung 1).
Listing 1
$ sudo apt install git $ git clone https://github.com/jedisct1/dsvpn.git $ cd dsvpn $ make $ sudo make install $ dsvpn --help DSVPN 0.1.3 usage: dsvpn "server" <key file> <vpn server ip or name>|"auto" [...]
Der Befehl make install installiert DSVPN an der Paketverwaltung vorbei, es erscheint daher nicht in den üblichen Paketmanagementwerkzeugen. Um das Programm wieder sauber aus dem System zu entfernen, führen Sie es entweder im Quellcode-Verzeichnis sudo make uninstall aus oder löschen mit Root-Rechten die Datei /usr/local/sbin/dsvpn. Weitere Programmdateien oder Verzeichnisse entstehen bei der Installation nicht.

Abbildung 1: Dead Simple VPN lässt sich in wenigen Momenten direkt mit den Bordwerkzeugen von Ubuntu bauen. Nach der Installation liefert die Hilfe erste Hinweise zur Bedienung.
Raspberry Pi
Die ARM-CPU des Raspberry Pi arbeitet mit der Multimedia- und Signalverarbeitungserweiterung Neon. Dead Simple VPN unterstützt diese Funktion, jedoch müssen Sie den Neon-Befehlssatz mit dem Kommando env OPTFLAGS=-mfpu=neon make beim Bauen aktivieren.
Konfiguration
Für den Verbindungsaufbau benötigen Sie zunächst einen Schlüssel. DSVPN unterscheidet dabei nicht zwischen einem privaten und einem öffentlichen Key. Mit dem folgenden Kommando erstellen Sie die Schlüsseldatei vpn.key im aktuellen Verzeichnis mithilfe des im System vorhandenen Zufallsgenerators /dev/urandom:
$ dd if=/dev/urandom of=vpn.key count=1 bs=32
Später benötigen Sie den Key auch auf den Client-Rechnern, die sich in das DSVPN des Servers einklinken sollen. Kopieren Sie die Schlüsseldatei daher schon jetzt auf einen USB-Stick.
Damit haben Sie die Grundlagen gelegt und die Installation auf dem Server vollständig abgeschlossen. Wiederholen Sie nun sämtliche Schritte auf dem Client-Rechner, bis auf das Erstellen der Schlüsseldatei. Nehmen Sie stattdessen den vorbereiteten USB-Stick, und kopieren Sie die Datei vpn.key auf das Client-System. Als Ablageort empfiehlt sich zum Beispiel ein Unterordner VPN/ im Home-Verzeichnis oder der Home-Ordner selbst.
Nun rufen Sie, wie in Listing 2 gezeigt, den VPN-Dienst auf dem Server auf. In der Grundkonfiguration lauscht das System auf Port 443. Das hat den Vorteil, dass der eigentlich für HTTPS-Verbindungen genutzte Port in der Regel auch bei öffentlichen Hotspots (etwa solchen von Hotels oder Veranstaltungen) funktioniert.
Da Sie allerdings eine Port-Weiterleitung des Ports vom Router auf den DSVPN-Server benötigen, kommen Sie damit jedoch eventuell einem NAS in die Quere, das in der Regel die Ports 80 und 443 für verschlüsselte Verbindungen benötigt (siehe Kasten “Weitergeleitet”). Erweitern Sie den Aufruf daher bei Bedarf um die gewünschte Port-Nummer (Zeile 5).
Listing 2
$ sudo dsvpn server vpn.key auto Interface: [tun0] net.ipv4.ip_forward = 1 Listening to *:443 $ sudo dsvpn server vpn.key auto 4443 Interface: [tun0] net.ipv4.ip_forward = 1 Listening to *:4443
Weitergeleitet
In einem typischen Heimnetzwerk sorgt ein WLAN-Router dafür, dass die angebundenen Rechner den Weg ins Internet finden. Der umgekehrte Weg, vom Internet auf einen bestimmten Rechner im LAN, ist jedoch nicht ohne Weiteres möglich: Unaufgefordert zugesandte Anfragen aus dem Internet lässt der WLAN-Router in der Regel einfach fallen.
Für das VPN-Netzwerk müssen Sie daher eine Port-Weiterleitung vom WLAN-Router auf den mit DSVPN ausgestatteten Rechner einrichten. Das Vorgehen unterscheidet sich von Hersteller zu Hersteller kaum; wir konzentrieren uns auf eine Fritzbox mit aktueller Firmware in der Version 7.10. Öffnen Sie mit der URL http://fritz.box das Administrationsbackend in einem Webbrowser. Dort gelangen Sie über Internet | Freigaben in den Reiter Portfreigaben.
Mit einem Klick auf die Option Gerät für Freigaben hinzufügen am Ende der Seite starten Sie einen Assistenten, der Ihnen bei der folgenden Konfiguration hilft. Zuerst wählen Sie das passende Gerät aus, danach klicken Sie auf den Schalter Neue Freigabe. Im Dialog ändern Sie nun die Auswahl auf Portfreigabe und tragen die Daten wie in Abbildung 2 gezeigt ein. Die Bezeichnung dürfen Sie frei wählen, beim Port müssen Sie sich an dem beim Aufruf von dsvpn angegebenen Port orientieren.

Abbildung 2: In einem Heim- oder Büronetzwerk geht in Sachen VPN ohne eine Port-Weiterleitung vom Router auf den VPN-Server nichts. Typisch für ein VPN ist der Port 4443. Möchten Sie hingegen aus restriktiven Netzen ausbrechen, bietet sich Port 443 an.
Verbindungsaufbau
Zur Kontrolle rufen Sie ip addr show tun0 auf. Dessen Ausgabe sollte zeigen, dass es nun mit tun0 ein neues Netzwerkgerät gibt, und auch dessen IP-Adresse ausgeben (Listing 3). Ob die Port-Weiterleitung funktioniert, können Sie mit Seiten wie Canyouseeme.org überprüfen (Abbildung 3). Die Seite sollte automatische Ihre externe IP-Adresse ermitteln, sodass Sie nur noch die Portnummer (hier 4443) korrigieren müssen. Ergibt die Überprüfung Success, können Sie zum nächsten Schritt übergehen.
Listing 3
$ ip addr show tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 192.168.192.254 peer 192.168.192.1/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 64:ff9b::c0a8:c0fe peer 64:ff9b::c0a8:c001/96 scope global
valid_lft forever preferred_lft forever
inet6 fe80::f7eb:4642:e501:e5f6/64 scope link stable-privacy
valid_lft forever preferred_lft forever

Abbildung 3: Über die Webseite Canyouseeme.org prüfen Sie, ob die Port-Weiterleitung funktioniert. Beachten Sie, dass dabei auch der DSVPN-Server aktiv sein muss.
Mit dem Kommando aus Listing 4 aktivieren Sie für einen ersten Test die VPN-Verbindung aus einem entfernten Netz heraus zu Ihrem Rechner nach Hause, etwa über einen vom Handy aufgespannten Hotspot. Danach sollten Sie umgehend alle Ressourcen des Heim- oder Büronetzes auch von unterwegs nutzen können. Dazu gehören zum Beispiel Dateifreigaben oder Netzwerklaufwerke (Abbildung 4). Die Verbindung bleibt so lange erhalten, bis Sie DSVPN mit [Strg]+[C] auf dem Server oder dem Client wieder beenden.
Listing 4
$ sudo dsvpn client vpn.key Externe IP 4443

Abbildung 4: Nur ein Beispiel für den Nutzen einer VPN-Verbindung: Hier greifen wir über den Hotspot eines Smartphones aus dem Mobilfunknetz heraus auf die Netzwerkfreigaben im heimischen Netzwerk zu.
Möchten Sie das DSVPN regelmäßig verwenden, empfiehlt es sich, noch eine DynDNS-Adresse zu holen und den Dienst auf dem WLAN-Router einzurichten. Dadurch erreichen Sie Ihr Netz nicht mehr nur über die sich immer wieder ändernde Internet-IP, sondern über eine sprechende URL. Die meisten Router-Hersteller integrieren eine entsprechende Funktion in die Konfigurationsoberfläche; bei einer Fritzbox finden Sie die Einstellungen unter Internet | Freigaben | DynDNS. Viele DynDNS-Anbieter verlangen allerdings eine monatliche Gebühr. Es gibt jedoch auch engagierte Services wie etwa den DynDNS Service von Ddnss.de, der bis zu fünf Hosts kostenlos anbietet [3].
Automatisieren
Dead Simple VPN bleibt in vielen Bereichen seinem Motto treu: Es gibt weder ein Werkzeug zum Erstellen der Schlüsseldatei noch eine Benutzerverwaltung. Der Entwickler hält sich auch dabei zurück, das Programm als Dienst in das System zu integrieren. Zu Systemd schreibt er auf der Homepage des Projekts: “Ich werde nie und nimmer irgendwelche Funktionsvorschläge akzeptieren, die irgendetwas mit Systemd zu tun haben”. Seine Abneigung gegen das Init-System bedeutet allerdings nicht, dass sich DSVPN nicht mit Systemd verwalten ließe: Man muss nur die entsprechenden Service-Dateien von Hand anlegen.
Basierend auf den Vorlagen des griechischen Entwicklers Evaggelos Balaskas ist das schnell gemacht [4]. Legen Sie dazu unter /etc/systemd/system/ die Dateien dsvpn_server.service und dsvpn_client.service an, und befüllen Sie sie mit den Inhalten aus Listing 5 (Server) und Listing 6 (Client). Vergessen Sie dabei nicht, den Pfad zur Schlüsseldatei, die IP-Adresse des Servers sowie die Port-Nummer des vom WLAN-Router auf den DSVPN-Server weitergeleiteten Ports anzupassen.
Listing 5
[Unit] Description=Dead Simple VPN - Server [Service] ExecStart=/usr/local/sbin/dsvpn server /root/vpn.key auto 4443 Restart=always RestartSec=15 [Install] WantedBy=network.target
Listing 6
[Unit] Description=Dead Simple VPN - Client [Service] ExecStart=/usr/local/sbin/dsvpn client /root/vpn.key IP-Adresse 4443 [Install] WantedBy=network.target
Danach müssen Sie die Systemd-Konfiguration mit dem Kommando sudo systemctl daemon-reload auf dem Client wie auch dem Server aktualisieren. Anschließend lässt sich die Verbindung von Hand oder bei Bedarf auch automatisch während des Bootens aktivieren (Listing 7). Tauschen Sie das enable in den letzten zwei Kommandos gegen disable, schalten Sie den automatisierten Start wieder ab.
Listing 7
### VPN-Verbindung von Hand aufbauen: $ sudo systemctl restart dsvpn_server.service $ sudo systemctl restart dsvpn_client.service ### Bei jedem Start VPN automatisch aktivieren: $ sudo systemctl enable dsvpn_server.service $ sudo systemctl enable dsvpn_client.service
Firewall
Ist man auf größtmögliche Privatsphäre angewiesen, gilt es darauf zu achten, dass keine Daten am VPN vorbei ins Internet tröpfeln oder “leaken”, wie der Netzwerker sagt. Dazu braucht es jedoch eine Firewall, die sämtliche am VPN vorbeiströmenden Datenpakete abfängt. In einem Blog-Beitrag beschreibt der bereits erwähnte Entwickler Evaggelos Balaskas, wie sich eine solche mit Iptables umsetzen lässt [6].
Fazit
Dead Simple VPN füllt eine Lücke, die andere VPN-Lösungen lassen. Es funktioniert zum Beispiel in abgeschotteten Umgebungen, die nur die Ports TCP/80 und TCP/443 zum Surfen im Internet zulassen. Wireguard und andere schlanke VPN-Lösungen wie zum Beispiel Glorytun [5] benötigen hingegen zwingend auch UDP, ein TCP-Port alleine genügt nicht. Bei DSVPN steht die Verbindung zwischen Client und Server mit einem Kommando, bei OpenVPN müssen Sie sich durch eine längere Konfiguration arbeiten.
In der Praxis spielt DSVPN daher seine Stärken aus, wenn man nur selten ein VPN benötigt und sich dafür die längliche Konfiguration von OpenVPN nicht lohnt. Als Minuspunkt fällt auf, dass es DSVPN lediglich für Linux und Mac OS X gibt. In vielen Situationen wäre es jedoch wünschenswert, auch das Android- oder iOS-Smartphone durch das VPN in ein sicheres Netz zu tunneln. Der Entwickler schreibt, dass Dead Simple VPN nicht Wireguard und Co. ersetzen soll. Das Programm löst für ihn nur ein bestehendes Problem, vielleicht ja auch bei Ihnen.
Infos
-
Wireguard: Ferdinand Thommes, “Wächter über die Verbindung”, LU 11/2018, S. 24, https://www.linux-community.de/41598
-
Dead Simple VPN: https://github.com/jedisct1/dsvpn
-
DynDNS Service: https://ddnss.de
-
Skripte für DSVPN: https://github.com/ebal/scripts/tree/master/dsvpn
-
Glorytun: https://github.com/angt/glorytun
-
“A Dead Simple VPN”: https://balaskas.gr/blog/2019/07/20/a-dead-simple-vpn/





