Raspberry Pi über IPv6 erreichbar machen

Viele nutzen Ihren Raspberry Pi oder andere Single Boards, wie z.B. einen Odroid, um gewisse Dienste wie Webserver, Cal- und CardDAV Server oder anderer beliebige Cloud Dienste im Internet erreichbar zu machen. Im privaten Bereich wird dazu der eigene Internetanschluss verwendet und ein einfaches Portforwarding auf den Raspberry Pi konfiguriert, damit dieser auch im Internet über die benötigten Ports ansprechbar ist. In den meisten Fällen (>90%) geschieht dies aktuell noch über IPv4, da es für viele Anwender das vertrautere Protokoll ist. Die Erreichbarkeit von Webdiensten über IPv6 ist nach wie vor erschreckend gering. Der folgende Artikel soll zeigen, wie ein eigener Server auch per IPv6 über das Internet erreichbar sein kann und welche Hürden es möglicherweise zu nehmen gibt.


Da es bei IPv6 mehrere Möglichkeiten gibt, werde ich diese nicht jeweils im Detail durchgehen, aber zumindest entsprechend darauf hinweisen, dass es bei Bedarf nicht weiter schwer ist, zusätzliche Informationen dazu zu finden. Um überhaupt mit IPv6 zu beginnen, muss eine Range an IPv6 Adressen zur Verfügung stehen. Diese werden entweder über den eigenen Provider oder einen Tunnel Broker wie z.B. der von Hurricane Electric bezogen. Im nächsten Schritt geht es darum, die IPv6 Adressen auch an die eigenen Clients im Netzwerk zu verteilen. Bei IPv4 gibt es hierfür zwei Möglichkeiten, bei IPv6 gleich drei:

Statische IP: Genau wie bei IPv4 wird dem Client eine feste statische IP Adresse vergeben. Ist also nichts Neues und ziemlich unspektakulär.

Dynamische IP: Auch hier handelt es sich um das gleiche Verfahren wie bei IPv4. Über einen DHCPv6 Server erhält der Client seine dynamische IP Adresse. Je nach Leasedauer, kann sich die IP Adresse erneuern.

Stateless autoconfiguration: Stateless address autoconfiguration (SLAAC) dürfte der bequemste Weg sein, eine IPv6 Adresse zu erhalten. Hierbei ist kein DHCPv6 Server erforderlich. Der Client erhält automatisch anhand des vom Router zugewiesenen Präfix seine IPv6 Adresse.

Der Einsatz von SLAAC unter Linux ist abhängig von der verwendeten Netzwerkkonfiguration. Bei systemd-network oder NetworkManager muss nichts konfiguriert werden, damit SLAAC funktioniert. Bei der Verwendung von “netctl” muss “IP6=stateless” in die Konfigurationsdatei hinzugefügt werden, um es zu aktivieren.

SLAAC hat noch einen weiteren Vorteil. Beim Generieren der Adresse ist die MAC Adresse der Netzwerkkarte Bestandteil der IPV6 Adresse. Dies macht ein Gerät auf Dauer identifizierbar, da die MAC Adresse eindeutig ist. Das ist jetzt bei einem Webserver wohl eher kein Problem, da dieser nur Anfragen annimmt aber selbst keine Ziele anspricht. Dennoch möchte ich nicht unerwähnt lassen, wie sich dieses Verhalten bei SLAAC abstellen lässt. Mit dem RFC 4941 wurden die IPv6 Privacy Extensions eingeführt. Hierbei werden zufällig generierte Adressen erzeugt, um einen Client nicht eindeutig identifizierbar zu machen. Privacy Extensions werden wieder unterschiedlich aktiviert, sodass dies hier nicht explizit beschrieben wird.

Hat der Raspberry Pi jetzt seine IPv6 Adressen, ist die erste Hürde genommen. Nun muss die öffentliche IPv6 Adresse noch an einen DNS “AAAA Record” übermittelt werden, damit der Raspberry Pi später auch per URL über das Internet erreichbar ist. Selbiges wurde ja auch schon mit einem “A Record” für die IPv4 Adresse gemacht. Da sich die IP Adressen bei einem privaten Anschluss in der Regel in gewissen Abständen ändern, macht es wenig Sinn, einen statischen DNS Eintrag zu pflegen. Dieser würde nicht mehr funktionieren, sobald sich die IP Adressen geändert haben. Daher sollte ein DynDNS Dienst verwendet werden, der jeweils die aktuellen IPv4 und IPv6 Adressen kennt. Ich verwendet in diesem Fall den DynDNS Dienst von afraid.org, da sich dieser sehr einfach aktualisieren lässt und beide Protokolle beherrscht. Beim Aktualisieren der IP Adressen kommt jetzt auch noch eine Änderung dazu. Bei IPv4 ist es ausreichend, die öffentliche Internetadresse des Routers anzugeben. Diese wurde dann per Portforwarding an den Raspberry Pi weitergegeben. Da bei IPv6 jedoch jedes Gerät seine eigene öffentliche IPv6 Adresse hat, muss natürlich auch die des Raspberry Pi an den DynDNS Dienst übertragen werden. Also reicht es nicht mehr aus, einen DynDNS Update Dienst auf dem eigenen Router zu verwenden, da dieser nur die eigene IPv6 Adresse übermitteln würde. Der Raspberry Pi wäre zwar dann noch wie gewohnt über IPv4, nicht aber über IPv6 erreichbar. Hier lässt sich die einfache Verwaltung von freedns.afraid.org zu Nutze machen. Über einen cURL Aufruf werden die Adressen direkt aktualisiert.

Raspberry Pi IPv6 DynDNS

Um dies zu automatisieren, wird ein Systemd Timer samt Systemd Dienst angelegt, der diese Arbeiten in Zukunft übernimmt.

Der Timer kümmert sich um das Intervall der Ausführung. In diesem Fall wird der noch zu konfigurierende Dienst alle 7 Minuten ausgeführt.

sudo nano /etc/systemd/system/dyndns.timer
[Unit]
Description=DynDNS update for freedns.afraid.org

[Timer]
OnBootSec=2min
OnCalendar=*:0/7
Persistent=true

[Install]
WantedBy=timers.target

Der Systemd Dienst führt dann die tatsächliche Aktion aus.

sudo nano /etc/systemd/system/dyndns.service
[Unit]
Description=DynDNS update
After=httpd.service

[Service]
Type=oneshot
#cloudservice
ExecStart=/usr/bin/curl -s https://v6.sync.afraid.org/u/YourSecretIPv6Token/
ExecStart=/usr/bin/curl -s https://sync.afraid.org/u/YourSecretIPv4Token/

Die korrekte Update URL mit dem jeweiligen Token ist bei freedns.afraid.org in der Version 2 hinterlegt. Bei einem anderen DynDNS Dienst der auch IPv6 unterstützt, muss der Aufruf natürlich entsprechend anders aussehen.
Um die Aktualisierung jetzt noch zu automatisieren, muss der Systemd Timer noch gestartet und aktiviert werden.

sudo systemctl enable dyndns.timer && sudo systemctl start dyndns.timer

Das Ergebnis lässt sich im systemctl Status oder auf der Weboberfläche des DynDNS Dienstes überprüfen.

systemctl status dyndns.service

Auf dem heimischen Router müssen die Ports für den Raspberry Pi jetzt auch noch für IPv6 geöffnet werden. Dies ist je nach Modell unterschiedlich und wird daher nicht im Detail beschrieben.
Hat das alles funktioniert, sollte der Raspberry Pi auch über IPv6 aus dem Internet zu erreichen sein. Dies kann über die Seite ipv6test verifiziert werden.

Raspberry Pi IPv6 DynDNS

Der Aufwand, um die Erreichbarkeit über IPv6 umzusetzen ist gar nicht so groß. Allerdings erfordert es doch ein klein wenig Umdenken, da sich IPv6 an einigen Stellen doch anders verhält, als man es gewohnt ist. Allerdings kommt man mit ein klein wenig Recherche recht schnell in das Thema rein. Dieser Artikel trägt hoffentlich dazu bei, die Umsetzung zu vereinfachen.