Smarthome Teil 2:

Zugang von Außen: IPv6, DDNS, ...

Wenn man sich eine Hausautomatisierung aufbaut, kommt man irgendwann an den Punkt, wo man auch gerne von unterwegs auf sein System zugreifen möchte. So kann man z.B. schon mal die Heizung anschalten kurz bevor man nach Hause kommt.

Hintergrundwissen: IPv6, IPv4, Dual Stack, DS-Lite, ...

IPv4 (oder auch Internet Protokoll Version 4) war das ursprüngliche Protokoll zur Kommunikation im Internet. Geräte werden bei diesem Protokoll über eine 32 Bit große Adresse angesprochen. Da für die Vielzahl von Geräten dieser Adressraum nicht mehr ausreicht, wurde später das IPv6 entwickelt. Neben anderen Vorteilen im Protokoll, ist die Adresse hier 128 Bit lang. Da die Umstellung von IPv4 auf IPv6 nicht von heute auf morgen machbar ist (viele Geräte unterstützen noch kein IPv6), existieren derzeit beide Protokolle parallel (vorstellbar, wie zwei parallele, in sich geschlossene Netze). Der Anschluss den man Zuhause hat, ist entweder ein

  • alter IPv4 Anschluss
  • ein Dual Stack Anschluss (hier hat man sowohl eine IPv4 als auch eine IPv6 Adresse)
  • oder ein DS-Lite IPv6 Anschluss (man hat nur eine IPv6 Adresse, Anfragen ins IPv4 werden über IPv6 bis zu einem Gateway des Providers getunnelt.)

Wenn man einen IPv4 Anschluss besitzt…

…fungiert in der Regel der Router als Gateway. Er hat eine öffentliche IP und leitet Anfragen aus dem lokalen Heimnetz ins Internet und die Antworten entsprechend zum jeweiligen Gerät zurück. Auch bekannt als Network Address Translation, kurz NAT. Möchte man nun von Außen auf seinen Raspberry im Heimnetz zugreifen, gibt man dazu die öffentliche IP seines Routers an. Da dieser aber nicht weiß, an welches Gerät er die Anfrage schicken soll, ist eine weitere Einstellung am Router nötig. Dabei ordnet man Zugriffe von Außen, die über einen bestimmten Port kommen, fest seinen Geräten im Heimnetz zu. In den Einstellungen des Routers findet sich die entsprechende Funktion unter dem Begriff Portweiterleitung. In diesem Fall würde man Port 8083 für FHEM (wenn man den default Port verwendet), seinem Raspberry zuordnen. Die FHEM-Seite des Raspberry ist dann von Außen über die IPdesRouters:8083 aufrufbar. Ein Problem gibt es allerdings noch: Die IP-Adresse des Routers ändert sich von Zeit zu Zeit (da man diese in Abständen von seinem Provider zugewiesen bekommt). Abhilfe schafft DynDNS. Fritz Router haben bereits einen solchen Dienst an Bord (MyFRITZ!). Wer das nicht hat, braucht einen externen DynDNS Anbieter. Bezüglich Einrichtung und näherer Erläuterungen siehe unten.

Wenn man einen reinen IPv6 Anschluss (DS-Lite) besitzt…

…sieht das ganze ein wenig anders aus. Bei IPv6 werden einzelne Geräte nicht mehr, wie früher über einen NAT mit dem Internet verbunden, sondern bekommen nun alle jeweils selbst eine eigene globale IP. Wenn man nun von einem Gerät aus eine IPv4 Adresse aufruft, kann man diese Adresse nicht direkt erreichen. Stattdessen wird die Anfrage durch das IPv6 Netz bis zu einem Gateway des Providers geleitet und dort weiter ins IPv4 geroutet (4in6 Tunnel). Erstmal egal wenn man einfach nur im Internet surfen möchte.
Anders aber, wenn man nun von außen über IPv4 auf seinen PC zu Hause, bzw. wie in diesem Fall sein Raspberry Pi zugreifen möchte, das sich aber im IPv6 Netz befindet. Der Zugriff ist dann nicht mehr möglich, weil man sich die IPv4 Adresse des Gateways mit vielen anderen Unitymediakunden teilt und das Gateway die Anfrage von außen nicht an den eigenen IPv6 Anschluss durchroutet.
Was bedeutet das nun? Damit wir unseren Raspberry Pi über eine IPv4 Adresse von einem beliebigen Punkt über das Internet erreichen können, benötigen wir zum einen (wie auch früher bei IPv4), einen DynDNS Anbieter, da sich auch die eigene IPv6-Adresse gelegentlich ändert. Zum anderen benötigen wir einen Portmapper, der die Ports, die wir auf unserem Raspberry erreichen wollen, vom IPv4 ins IPv6 routet.

DynDNS und Portmapper

Ich selbst nutze den Service von feste-ip.net von COSIMO. Hier kann man mit Einrichtung eines Dynamischen DNS auch direkt mehrere Portmapper erstellen.
Die Konfiguration, wie sie im Folgenden erklärt wird, sollte aber bei anderen Anbietern vergleichbar funktionieren.
Nach dem Einloggen legt man zunächst unter “Dynamisches DNS” einen neuen Hostnamen an. Ist dieser Hostname verfügbar, bekommt man eine ID und ein Kennwort (das brauchen wir später, um vom Raspberry die aktuelle IP an den DynDNS zu übermitteln). Anschließend klicken wir in der Hostliste auf den neu hinzugefügten Eintrag und klicken dann auf “IPv6 Features”. Hier gibt es nun die Option “Neues Portmapping erstellen”. Ein solches Portmapping muss man für jeden Port erstellen, der auf dem Raspberry erreicht werden soll. Für FHEM wäre das z.B. der Port 8083, der als Zielport angegeben werden muss.
Hat man ein Portmapping hinzugefügt, erscheint eine Übersichtsliste mit dem IPv6 Host, dem entsprechenden Zielport unter IPv6 und eine IPv4-Adresse unter der der Port zu erreichen ist (in der Regel ein anderer Port).

Konfiguration auf dem Raspberry Pi

Nun muss der DynDNS noch wissen, auf welche IP der DNS Eintrag verweisen soll. Dies geht ganz einfach, indem man sich mit der erhaltenen ID und Kennwort vom Raspberry aus beim DynDNS meldet. Dieser hinterlegt dann die IP, von der er die Informationen bekommen hat, bei dem entsprechenden DNS Eintrag. Fürs erste reicht es einfach auf dem Raspberry folgende Zeile aufzurufen (falls man feste-ip.net nutzt):

curl "http://HOST-ID:HOST-PASSWORT@v6.members.feste-ip.net/nic/update?hostname=HOSTNAME"

In der Hostliste bei feste-ip.net sollte nun die IP des Raspberry auftauchen.
Hinweis: Nutzt man den DynDNS für IPv4 sieht der curl Aufruf ein klein wenig anders aus.
Ich habe mir auf dem Raspberry ein kleines Bash-Skript abgelegt, das die IP mit obigem Aufruf regelmäßig aktualisiert.

FHEM mit IPv6 Da man mit der beschriebenen Konfiguration über das Internet per IPv6 auf FHEM zugreift, muss auch dieses für das entsprechende Protokoll konfiguriert sein. Hierzu ersetzt man in der fhem.cfg die Zeile

 define WEB FHEMWEB 8083 global

durch

define WEB FHEMWEB IPV6:8083 global

Außerdem muss man noch folgendes Paket nachinstallieren:

sudo apt-get libio-socket-inet6-perl

Nach Neustart von FHEM solltet ihr euer Smarthome dann auch von unterwegs erreichen können…

Wenn ihr FHEM vom Internet her erreichbar macht, solltet ihr nicht vergessen, ein PASSWORT für die Seite zu vergeben!
Außerdem sollte die Firewall des Raspberrys über Konfiguration von Iptables bzw. Ip6tables angepasst werden!

SMARTHOME
smarthome raspberry pi fhem

Neuer Kommentar