Zugriff per OpenVPN auf die CCU – Teil 2

Im 1. Teil habe ich beschrieben, wie man einen eigenen OpenVPN-Server aufsetzt und eine erste Client-Verbindung herstellt. Damit kann man im Moment noch nicht soviel anfangen.

Routing auf dem Server

Was fehlt, ist das Routing auf dem Server. Zum einen für die ausgehenden Verbindungen ins Internet, damit man gleichzeitig surfen kann und und zum anderen müssen die zwei Netze miteinander kommunizieren können.

Für beides habe ich ein Script (firewall.sh) geschrieben, welches manuell nach dem Start des Server ausgeführt werden muss. Das geht sicher auch eleganter, aber für mich reicht es. Zur Konfiguration müssen die Variablen vpnnet , remotenet und localif angepasst werden. Die Variable tunif ist in einer Standardkonfiguration immer tun0, kann also so belassen werden. Man kann sich die Netzwerkinterfaces (für localif) mit ifconfig anzeigen lassen.

#!/bin/bash

vpnnet="10.50.11.0"
remotenet="10.70.11.0"
localif="eth0"
tunif="tun0"

# enable IP-Forwarding in Linux kernel
echo "1" > /proc/sys/net/ipv4/ip_forward

function enableForSubnet {

# Allow traffic initiated from VPN to access "the world"
iptables -I FORWARD -i $tunif -o $localif -s $1/24 -m conntrack --ctstate NEW -j ACCEPT

# Allow established traffic to pass back and forth
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Masquerade traffic from VPN to "the world" -- done in the nat table
iptables -t nat -I POSTROUTING -o $localif -s $1/24 -j MASQUERADE
}

if [ `iptables -L FORWARD | grep -c $vpnnet` -eq 0 ]
 then
  enableForSubnet $vpnnet
  enableForSubnet $remotenet
 fi

Soll der lokale Rechner lnx001 soll vom OpenVPN-Server immer dieselbe IP gepusht bekommen, ist auf dem Server im /etc/openvpn/ccd Verzeichnis eine Datei lnx001 mit folgendem Inhalt anzulegen:

ifconfig-push 10.50.11.10 255.255.255.0

Nach dem Neustart des OpenVPN-Servers (systemctl restart openvpn) sollte man jetzt auf dem lnx001 surfen können. Das man auch wirklich über den Server geht, kann überprüft werden, in dem man die ausgehende, externe IP herausfindet:

$> wget -O - -q icanhazip.com
3.15.39.XX

Die angezeigt IP sollte die public IP des Servers sein.

Homematic Router

Die CCU3 soll permanent mit dem OpenVPN verbunden sein. Dafür kann man einen ausgedienten Rechner verwenden oder besser handelsübliche Router umkonfigurieren. Letzteres verbraucht weniger Energie und Platz und macht auch keine Lärm. Für die Anbindung eines privaten Netzwerks haben heutige Geräte mehr als genug CPU-Power. Mir ist leider kein Router bekannt, der OpenVPN von Haus aus unterstützt. Daher kommt man hier nicht um die Installation eines alternativen OS herum. Für verschiedene Router gibt es auch verschiedene Möglichkeiten (zum Beispiel Freetz für FritzBox, Open-WRT für WRT-Router etc.). Diese alle zu beleuchten, würden den Rahmen dieses Artikels sprengen. Ich stelle daher nur mein Lösung auf Basis von einem Asus RT-N66U mit Tomato Firmware vor. Wenn die Firmware auf dem Router ist und man den Internetaccess konfiguriert hat, kann es losgehen.

Als erstes wird ein OpenVPN-Client angelegt und wie gewohnt konfiguriert:

Es ist wichtig, hier nicht den Servernamen sondern die IP anzugeben. Ansonsten schlägt bei einem Verbindungsabbruch die DNS-Auflösung fehl (welche versucht über das noch existierende Tunnel-Interface zu gehen) und der Router kann den Server nicht mehr finden. Das ist sicher ein unschöner Bug, mit der IP umgeht man ihn jedoch geschickt.

Der Punkt "Verify server certificate" ist ein Sicherheitsfeature und sollte wenn möglich eingeschaltet werden (eigentlich auch beim Client). Hier muss der Servername angegeben werden, welcher beim Erstellen des Zertifikats eingegeben wurde.

Unter dem Tab "Keys" wird der Text der entsprechenden Zertifikate und Keys hineinkopiert. Davon kann ich verständlicherweise keinen Screenshot zeigen. Ich zeige aber, der Inhalt welcher Datei in welches Feld muss:

  • Static Key: ta.key
  • Certificate Authority: ca.crt
  • Client Certificate: myrouter.crt
  • Client Key: myrouter.key

Wenn das vollbracht ist, kann man die Verbindung testen. Sollte es nicht gehen, liefert das /etc/openvpn/openvpn.log auf dem Server hoffentlich den entscheidenden Hinweis.

Geräte einrichten

Bei erfolgreichem Verbindungsaufbau sind nun die CCU3 und auch die anderen Geräte so zu konfigurieren, dass sie diesen Router als Gateway in das Internet nutzen. Dafür sollten sie zum einen über LAN oder WLAN mit dem Router verbunden sein. Zum anderen möchte man sie von lnx001 erreichen können, wofür eine statische IP sehr praktisch ist. Man wählt eine IP, die der Router nicht als dynamische IP ausgibt (unter 10.70.11.50) und noch nicht belegt ist. Als Gateway und DNS-Server werden ebenfalls der Router eingetragen. Hier die Konfiguration der CCU3 mit fester IP 10.70.11.3:

Viel Erfolg!