Im Beitrag DDNS mit IPV6 habe ich dargestellt welchen Herausforderugen sich stellen bei einem Anschluß ohne öffentliche IPV4 Adresse um Zugriff auf Systeme im Home Netzwerk zu bekommen. Dabei spielt das IPV4toIPV6 Gateway eine entscheidende Rolle. Der Portmapper (3. Im Übersichtsbild) stellt das Bindeglied dieser beiden Welten zur Verfügung und muß neben einer 24×7 Erreichbarkeit auch die notwendige Performance für den richtigen Datendurchsatz mitbringen.

Übersicht der beteiligten Systeme und Komponenten

Auswirkungen von wechselnde IPV6 Adressen

Wechselt die IPV6 Adresse am DSL Anschluß, so wechselt auch die IPV6 Adresse im LAN. In der Fritz Box passiert mit der Freigabe keine automatische Korrektur und sobald der Router eine neue IPV6 Adresse erhalten hat, funktioniert die Freigabe nicht mehr. Jetzt müsste manuell in der Freigabe die neue IPv6 Interface ID eingetragen werden. Das ist natürlich nicht zweckdienlich, eine automatische (statische) Lösung ist hilfreich.

Freigabe Konfiguration in der FritzBox

SLAAC HWADDR

Die Lösung für dieses Verhalten ist denkbar einfach und muss auf dem Device (6. im Überschtsbild), nicht auf dem Router, erfolgen. Die Vergabe der IPv6 Adressen kann umgestellt werden das die ID auf Basis der Hardware (MAC) Adresse erfolgt. Damit wechselt diese nicht. Dadurch ist die sich ändernde Komonente der IPv6 Präfix und der ist dem Router bekannt. SLAAC steht für Stateless Adress Autoconfiguration Configuration, dieses ist das Gegenteil von DHCP vergabe und wird in der /etc/dhcd.conf auf dem System eingestellt.

Wie bekommt der Portmapper die neue Konfiguration?

Damit das HomeLAN über den Portmapper erreichbar ist benötigt der Portmapper jetzt die richtige IPv6 Adresse des openVPN Servers. Ist der Server mit dem Portmapper ein Linux Server ist es recht einfach über ssh. Dazu muss der openVPN Server Zugriff ohne Interaktion auf den Portmapper Server erhalten. Das geht indem die Keys der Server ausgetauscht werden. Jetzt kann ohne Anmeldung ein Befehl auf dem Portmapper Server vom openVPN Server erfolgen. Die Schritte für den Update/ re-config des Portmappers kann in einem Shell Skript zusammengefasst werden. Jetzt muss bei Änderung der IPv6 Adresse am Router die Konfiguration neu gesetzt werden oder aber in periodischer Folge die Konfiguration überprüfen und falls notwendig aktualisieren.

Mit Linux hat man einfache und effektive Möglichkeiten dieses periodisch in der Crontab laufen zu lassen. Das Intervall von einer Minute ist auf jeden Fall klein genug, ggf. ist ein längerer Zeitraum auch möglich.

Skriptvorschlag

Nachfolgendes Skript zeigt generell wie die Überprüfung der 6Tunnel Konfiguration und der Update von dem VPN-Server auf den Portmapper Server erfolgt. Hierbei handelt es sich um einen Vorschlag der auch erweitert oder anders umgesetzt werden kann. Durch das periodische aufrufen des Skriptes in der CRONTAB wird auf einen IPv6 Adresswechsel zeitnah reagiert. Hier in dem Skript habe ich den hostname und den User unkenntlich gemacht (******). Diese Angaben sind auf die Umgebung anzupassen. Probiert habe ich es mit root, sollte aber auch mit anderen Usern gehen.

#!/bin/bash
# Parameter für 6tunnel
 export tunnelserver="****.georg-keller.de"
 export tunneluser="********"
 export ipv6=$(/sbin/ifconfig eth0 | grep inet6 | grep 2003 | cut -b15-51)
 export ipv4port="1194"
 export ipv6port="1194"
 export home="/usr/local/skripte"
 #
 # wechsel in das Programmverzeichnis
 #
 cd $home
 #
 # 1. Ermittle die eigene IPV6 Adresse auf Interface eth0
 # 2. Prüfe auf dem Server wie die Konfiguration mit 6tunnel ausschaut
 # 3. Vergleiche die beiden IPV6 Adressen
 # 4. Sind die Adressen identisch -> nix machen, sind die unterschiedlich -> 6tunnel stoppen und mit aktuellen Parametern neu starten
 #
 ****
 #
 # Ermittle die Remote Konfiguration
 #
 ssh $tunneluser@$tunnelserver "ps -ax | grep 6tunnel | grep -v bash | grep -v ps | grep -v grep > /tmp/6tunnel.txt"
 scp $tunneluser@$tunnelserver:/tmp/6tunnel.txt /usr/local/skripte/6tunnel.txt >> /dev/null
 export remoteconfig=$(cat /usr/local/skripte/6tunnel.txt | cut -b36-90 | uniq)
 export localconfig=$(echo $ipv4port $ipv6 $ipv6port)
 #
 # Zeige die Konfig an
 #
 echo "Remote Konfiguration: $remoteconfig"
 echo "Locale Konfiguration: $localconfig"
 #
 # Vergleiche die beiden Konfigurationen, sind die identisch dann  do nothing, sonst neu setzen
 #
 if
         [ "$remoteconfig" != "$localconfig" ]; then
                 ssh $tunneluser@$tunnelserver "killall -9 6tunnel"
                 ssh $tunneluser@$tunnelserver "6tunnel $ipv4port $ipv6 $ipv6port"
                 #
                 # Status ausgeben
                 #
                 echo "6TUNNEL neu gesetzt"
         else
                 #
                 # Status ausgeben
                 #
                 echo "nix zu tun"
 fi

Deutlich zu erkennen ist die Kommunikation von Ipv4 und IPv6 auf dem openVPN Server. Schaut man in der Console nach wird man sehen, Systeme die über den Portmapper sich mit dem openVPN Server verbinden erhalten die IPv6 Adresse des Portmappers und nicht des openVPN Clients.

::: Client Status List :::
 Name       Remote IP                                   Virtual IP      Bytes Received      Bytes Sent      Connected Since
 A71        2a01:238:4271:b200:1863:5c2c:e1cd:c749      10.8.0.8        4,4KiB              3,5KiB          Nov 5 2020 - 09:42:13

Wer also die Remote IP des Clients auswerten möchte muss dieses auf dem Portmapper Server machen. Desweiteren geht dieses nur mit TCP und NICHT mit UDP. Das liegt an der Portmapper Software. Noch ein Hinweis, die openVPN Konfiguration muss Dual Stack tauglich sein. Hier sind ein paar Anpassungen zu machen. Bei mir war das die Erweiterung auf IPv6 in der /etc/openvpn/server.conf. Die neueste Version ist ebenfalls notwendig.

dev tun
 proto tcp
 proto tcp6
 port 1194
:
:
:

Fazit

Wer zukünftig einen DSL Anschluß ohne öffentlich Ipv4 Adresse hat wird sich zwangsweise mit IPv6 beschäftigen müssen. Insbesondere wenn durch Smart Home und andere Anforderungen die notwendigkeit auf den Zugriff in das HomeLAN besteht. Um böse Überraschungen zu vermeiden kann man auch mit einem T-COM Anschluß die Situation simulieren und /oder bereits nutzen. Die Zusage einer festen statischen IPv6 Adresse habe ich bei den Anbietern bisher nicht gesehen. Zumindest nicht in der privaten Verträgen.

Der Einsatz einer VPN Lösung mit einem RaspberryPI ist recht einfach, stabil und verlässlich umzusetzen. Sie bietet sich auch aus einem weiteren Grund an. Viele SmartHome Geräte können gar kein IPv6 und/ oder es ist erheblich einfacher mit IPv4 Adressen.

Wer keinen eigenen Server im Internet hat kann auf Portmapper und DDNS Server Services zurückgreifen. Es gibt freie Dienste und kostenpflichtige mit unterschiedlichen Leistungsangeboten. Die besten Möglichkeiten hat man mit eigenen Systemen. Zum Aufbau eines solchen Portmapper Servers benötigt man weder viel Ressourcen (Festplatte, CPU und Speicher) noch muss man der absolute Linux Spezialist sein.

Für mich steht Zuverlässlichkeit und stabilität an erster Stelle. Bei fereien Diensten bestehen of Einschränkungen oder Bedingungen die ICH nicht akzeptieren möchte. Das kann aber jeder für sich entscheiden. Und nun viel Spaß mit der Umsetzung.