Zugriff per OpenVPN auf die CCU – Teil 1

Ein Remote-Access zur Hausautomatisierung kann sehr praktisch sein. CloudMatic bietet hier eine Lösung, ist allerdings kostenpflichtig. Wenn man jedoch bereits einen Server betreibt, bietet es sich an, diesen auch als VPN-Server zu benutzen. Das hat ausserdem den Vorteil, dass man auch auf andere Ressourcen im Remote-Network zugreifen kann, z.B. auf den Router oder die Webcam. Nachfolgend wird das Setup für Ubuntu 18.04 beschrieben.

Netzwerk-Setup

Die Idee ist, dass sich sowohl die CCU3, als auch mein Handy oder Laptop auf den OpenVPN-Server einwählen. Da sich die CCU nicht ohne grössere Verrenkungen direkt mit dem Server verbinden kann, muss dass ein Router übernehmen. Bei mir ist das ein Asus RT-N66U mit Tomato Firmware. Selbstverständlich ist sowohl der Client lnx001, als auch der Tomato-Router über jeweils einen weiteren Router mit dem Internet verbunden.

Homematic Installation - LAN/WLAN
Mein Netz - LAN/WLAN
Internet
DSL-Router
dynamic IP
myrouter
10.70.11.1
ccu3
10.70.11.3
Webcam
...
Fibre-Router
dynamic IP
lnx001
192.168.178.1
myserver
10.50.11.1

Wichtig sich zu merken ist, dass 2 Netzwerke aufgespannt werden: 10.50.11.0/24 und 10.70.11.0/24. Im letzteren ist die CCU3 und eventuell noch andere Geräte, wie etwa eine Webcam. All diese Geräte sollen direkt über OpenVPN vom Client lnx001 und anderen erreichbar sein.

OpenVPN server keys

Zuerst werden die notwendigen Pakete installiert (als root):

Als nächstes muss die Certification Authority angelegt werden. Dafür sollten als erstes die Einstellungen in ~/openvpn-ca/vars angepasst werden, vor allem KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL und KEY_OU. Anschliessend:

Eine Fehlermeldung bezüglich des fehlenden .rnd-file kann ignoriert werden. Die Zertifikate werden trotzdem erstellt. Am Schluss sollte die Frage nach der Signatur und dem Commit mit "y" beantwortet werden:

Wenn das erfolgreich abgeschlossen ist, noch die Diffie-Hellmann keys und die HMAC-Protection erzeugen:

Letzters wäre eigentlich nicht nötig, erhöht aber die Sicherheit (siehe Hardening OpenVPN Security) und sollte daher immer verwendet werden.

OpenVPN client keys

Nun müssen noch die Zertifikate und Keys für einen Client erzeugt werden. Ich verwende als Client-Name immer den Hostname.

Nach dem interaktiven Bestätigen oder Modifizieren der Angaben sollte nicht vergessen werden, das Zertifikat zu signieren und zu commiten. Pro Gerät und Benutzer (Handy, Laptop, Tablet etc.) sollte ein Key erzeugt werden. Das macht ersten parallele Verbindungen zum Server möglich und zweitens können einzelne Keys so gesperrt werden (z.B. beim Verlust des Geräts), ohne dass man auf allen Keys neue installieren muss.

Server konfigurieren

Die Server-Keys müssen nun in die OpenVPN-Konfiguration unter /etc kopiert werden:

Jetzt muss noch die /etc/openvpn/server.conf angelegt werden. Ich habe alles herausgelöscht, was für unser Beispiel nicht zwingend notwendig ist. Es sei jedoch darauf hingewiesen, dass es wesentlich mehr Optionen gibt, als nachfolgend aufgeführt.

Das Routing zwischen den Netzen muss noch konfiguriert werden. Dafür legen wir ein Verzeichnis ccd an und erstellen Konfigurationen für den Asus-Router. Es ist wichtig, dass der Dateiname exakt der Name des Key (hier: myrouter.key) ohne Endung ist. Nachfolgend wird der Router so konfiguriert, dass er im OpenVPN-Netz immer die IP 10.50.11.11 erhält und er als Router für das Netz 10.70.11.0 agiert.

Jetzt ist die Einrichtung des Server fast abgeschlossen und es kann ein erster Test durchgeführt werden.

Erster Test

Falls eine Firewall o.ä. installiert ist, ist jetzt ein guter Zeitpunkt den UDP-Port 1194 zu öffnen.

Dann sollten die erzeugten Zertifikate und Keys (für lnx001: lnx001.crt, lnx001.csr und lnx001.key, für myrouter entsprechend) auf das jeweilige Gerät und ta.key und ca.crt auf alle Geräte transferiert werden.

Unter Ubuntu kann man OpenVPN über das UI des NetworkManagers konfigurieren. Eventuell ist vorher die Installation des Plugins notwendig:

Dann können mit Klick auf das Netzwerksymbol in der oberen Leiste die Netzwerkverbindungen editiert werden. Für eine neue Verbindung auf "Add" klicken:

Neue OpenVPN-Verbindung
Zertifikate und Server-IP

Nun auf "Advanced" klicken. Es öffnet sich folgender Dialog:

Cipher wählen
TLS Authentication konfigurieren

Nach dieser Konfiguration kann die Client-Verbindung zum OpenVPN-Server aufgebaut werden. Auf dem Client sollte es keine Fehlermeldungen geben und auf dem Server sollte man in der Datei /etc/openvpn/openvpn-status.log seine Verbindung sehen. Bei Erfolg hat man erstmal nur Zugriff auf den Server und noch nicht auf die CCU, da die Verbindung zum Router und das Routing der Netzwerk-Pakete noch nicht steht. Auch die Verbindung in den Rest des Internets funktioniert noch nicht, man kann also nicht surfen.

Wie das geht, erkläre ich im 2. Teil.