openVPN mit DynDNS für Zugriff aufs Heimnetzwerk installieren
Und gleich der nächste Artikel hinterher. Mein letztes kurzes persönliches Projekt war das aufsetzen eines openVPN für das persönliche Heimnetzwerk mitsamt Routing und Vollzugriff fürs Netzwerk und das erreichen per DynDNS Adresse. Hierfür wird folgendes benötigt.
- Ein Account bei einem DynDNS Anbieter. Oder eine selbst gebaute Lösung. Ich benutze goip.de.
- Einen Router, welcher selbst eingetragene DynDNS Update URLS unterstützt (ich habe eine Fritzbox verwendet)
- einen Linux Rechner, welcher 24/7 betrieben werden kann. (z.B. einen Raspberry Pi)
- openVPN sowohl auf dem Client, als auch auf dem Server
Zuallererst konfigurieren wir unseren DynDNS Dienst. Im Falle von goip.de brauchen wir einen Account. Den erstellen wir uns auf der Homepage. Eine genau Anleitung dazu finden wir hier: (klick mich)
Die genaue update URL die wir für die Fritzbox brauchen, ist diese:
Als nächstes setzt man den Server auf, der später der VPN Server werden soll. Man kann dazu jede beliebige Linux Distribution nehmen. In meinem Fall war es ein Raspbian. Anschließend installiert man die Software openvpn.
Nun erstellt man die benötigten Zertifikate die zu einem fehlerfreien Betrieb notwendig sind. Man kopiert das RSA Skripte Verzeichnis nach /etc/openvpn/
Falls das Verzeichnis nicht hier liegt, kann man es innerhalb des Pakets suchen. Dazu führt man je nach Distribution einen der folgenden Befehle aus: Für Debian basierte Systeme
oder für RPM basierte Systeme
Nun geht es ans generieren der Zertifikate. Zuerst editiert man die Variablen die man für das generieren des Zertifikats nutzt. Wichtig sind folgende Parameter: KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, and KEY_EMAIL. Möchte man die Sicherheit bzw. den Paranoialevel erhöhen, so kann man die Schlüssellänge beim Parameter KEY_SIZE auf 2048 ändern.
Hat man die vars Datei erfolgreich editiert, sourced man sie. ./clean-all
führt man nur einmal beim initialen anlegen aus, da es alles bisher generierte löscht.
Nun erstellt man die Zertifikate nach der Reihe und ändert die Felder ggf. ab.
Als nächstes erstellen wir das Server Zertifikat. Die Fragen beantwortet man natürlich mit ja, damit sie erfolreich in die Datenbank aufgenommen werden.
Jetzt erstellt man das Client Zertifikat. $CLIENTNAME steht für den tatsächlichen Namen des Zertifikats. Diesen Schritt kann man beliebig oft wiederholen, um mehreren Clients Zugriff aufs VPN zu geben. Beendet man seine Shell Sitzung, so ist vor dem generieren des Zertifikats erneut ein . ./vars
auszuführen. Dasselbe gilt bei allen Änderungen, die man an den Zertifikaten vornimmt. In der Regel braucht man das aber nur, um neue Client Zertifikate anzulegen.
Als letzten Schritt erstellt man noch das Diffie Hellmann Zertifikat. Je nach System und Schlüssellänge kann das sehr lange dauern.
Für einzelne Clients kann man eine zusätzliche spezifische Konfiguration pflegen. Das ist nützlich, da man hier z.B. die VPN IP festlegen kann, oder ob z.B. das Gateway umgestellt wird. Dazu erstellt man wie oben in der Konfiguration eingetragen das Verzeichnis
Die Datei für den Client benennt man wie das Zertifikat. Hat man mit ./build-key client1
Die Zertifikate für client1 generiert, so heißt die Datei auch im client-config Verzeichnis auch client1
Serverseitig fehlt noch der Kernelparameter, um Routing zu aktivieren. Hierzu editiert man für eine persistente Änderung die Datei /etc/sysctl.conf
und fügt folgende Zeile hinzu. Ggf. gibt es ein Template, bei dem man die Zeile auch einfach einkommentieren kann.
Allerdings wird die Konfigurationsdatei erst beim nächsten Boot gesetzt. Um Routing im Live Betrieb zu aktivieren, muss folgender Befehl ausgeführt werden.
Außerdem fehlt die Route zurück ins VPN Netz vom Standard Gateway (der Router im Heimnetz). In unserem Fall ist es das Netz 10.12.0.0. Die Route sieht dann wie folgt aus
Für die einfache Zertifikats- und Client Konfigurationsverteilung habe ich mir eine Kombination aus Template und Skript zum verpacken der VPN Zertifikate ausgedacht.
Das Template legt man unter /etc/openvpn_client.in
an.
Der Inhalt ist folgender
Ich habe mir ein Konzept ausgedacht, um einfach Zertifikate gepackt als Tarball zum direkten Nutzen, zu erstellen.
Dafür habe ich folgendes Skript geschrieben, welches man unter /etc/openvpn/easy-rsa/keys/maketar.sh
ablegt. Auch wird
eine Konfiguration mit den richtigen relativen Pfaden generiert.
Dem Skript gibt man dann noch Ausführrechte
Nun kann man einfach in zwei Schritten ein Client Zertifikat erstellen, welches man dem Client direkt übergeben kann, damit er es direkt ready-to-run auf seinem Client benutzen kann.
Jetzt befindet sich ein Tarball im keys/ Verzeichnis mit dem Namen client2.tar.gz. Diesen Tarball muss der Client nur dann nach Zustellung nur noch entpacken.
Auf dem Server startet man noch den Dienst und aktiviert ihn beim Systemstart. Je nach Distribution und Init System geht das wie folgt:
oder für SysVinit basierte Systeme
Auf dem Client entpackt man den Tarball und führt folgende Befehle aus, um eine Verbindung mit dem Server aufzubauen.
Eine weiterführende Dokumentation zur openVPN Einrichtung findet man hier: (klick mich)