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!