IPv6 ist mittlerweile ein wesentlicher Bestandteil des Internets, der immer wichtiger wird. Durch den Einsatz von IoT-Geräten (Sensoren, Heizung, Licht, etc.) im Heimnetzwerk oder immer leistungsstärkeren „Bastelcomputern“ (wie z.B. dem Raspberry Pi) wird auch die Erreichbarkeit „von außen“ immer interessanter.
Leider bieten die wenigsten Internetanbieter in Deutschland ihren Kunden IPv6, oder einen gleichbleibenden IPv6-Prefix, um selbst eigene Dienste über feste IP-Adressen anzubieten.
Abhilfe schaffen wir nun indem wir uns über Hurricane Electric einen kostenlosen IPv6-Tunnel einrichten. Dafür benutze ich meinen Cubietruck, welcher mit einem aktuellem Armbian 8 läuft. Möglich ist dies aber mit jeder Linux Distribution und einem beliebigem Gerät. Ein alter Raspi 1 mit USB-Netzwerk sollte auch funktionieren. Beachtet, dass dieses Gerät hinterher über IPv6 aus dem Internet erreichbar ist. Tools wie z.B. „fail2ban“ sind ratsam zu installieren, um Bruteforce Angriffen standzuhalten.
Tunnelbroker
Als erstes erstellen wir uns einen Account bei Hurricane Electric über die Webseite https://tunnelbroker.net/. Es gibt auch andere Anbieter die einen kostenlosen Tunnelservice anbieten, wie z.B. SixXS, auf die ich hier aber nicht eingehen werde.
Nach dem erstellen des Accounts gehen wir über die „User Functions“ auf der Linken Seite auf den Menüpunkt „Create Regular Tunnel„. Um den für euch am besten geeigneten Tunnelendpunkt zu finden, sollten wir die Latenz als mittel zur Wahl nehmen, denn Reaktionszeit ist wichtig wenn es um’s Surfen geht.
Also testen wir einfach mal Amsterdam, Berlin, Frankfurt welche je nach Internetanbieter wohl am wahrscheinlichsten für eine gute Latenz sein könnten.
ping -c 4 216.66.84.46
ping -c 4 216.66.86.114
ping -c 4 216.66.80.30
Nun wählen wir den gewünschten Tunnelendpunkt aus und tragen in „IPv4 Endpoint“ falls nicht automatisch eingetragen, unsere aktuelle Externe IPv4-Adresse ein, welche ihr im feld „You are viewing from“ auch sehen solltet. Falls dort aus irgendeinem Grund nichts steht, könnt ihr die IP-Adresse auch über https://www.wieistmeineip.de/ herausfinden. Wenn alles korrekt eingetragen ist, können wir den Tunnel über „Create“ unten auf der Seite erstellen.
Nach dem erstellen landen wir auf der Hauptseite, über die wir den soeben erstellen Tunnel durch einen Klick auswählen. „Configured Tunnels„
Linux Tunnel
Jetzt verbindet ihr euch per SSH auf eurer Linux-System über welches das IPv6-Routing stattfinden soll. Als nächstes öffnen wir in der Konsole die Datei „/etc/network/interfaces“ mit einem Texteditor. Ich empfehle meistens Nano, der etwas einfacher zu bedienen ist als VIM und meistens ausreichend ist für die gängigsten Dinge.
sudo apt update && sudo apt install nano -y
sudo nano /etc/network/interfaces
Nun wechselt ihr wieder zu eurem Browser und wählt im Punkt „Examples“ eure Distribution aus, um eine fast fertige Konfiguration zu erhalten. Den Inhalt könnt ihr so wie er ist, an das Ende eurer „/etc/network/interfaces“ einfügen, ihr müsst allerdings die IP-Adresse bei „local“ durch die IP-Adresse eures Linux-Systems ersetzen. In meinem Fall hat der Cubietruck die IP-Adresse 192.168.2.2 welche ich dort eingesetzt habe. An der Fritzbox/DSL-Router Firewall musste ich bisher nie etwas ändern, in den Standard Einstellungen wird Protokoll 41 nicht geblockt.
Protokoll 41 = IPv6-in-IPv4
Kopiert nun die „gateway“ IPv6-Adresse und Speichert die Datei ab. Jetzt fahren wir das Interface hoch und testen die Konfiguration.
ifup he-ipv6
ping6 -c 4 [gateway-ipv6]
ping6 -c 4 ipv6.google.com
Somit hat unser Linux-System eine IPv6-Anbindung ins Internet. Um den Tunnel auch bei einem wechsel der IP-Adresse Automatisch anzupassen installieren wir jetzt „ddclient“, ein Programm welches in zeitlichen Abständen die Externe IP-Adresse überprüft, und die bei Änderung Automatisch dem Tunnelbroker meldet.
sudo apt update && sudo apt install ddclient
sudo nano /etc/ddclient.conf
Den Inhalt der Datei löschen wir falls er existiert, und holen uns die nötigen Informationen wieder von der Tunnelbroker Webseite im „Advanced“ Tab. Kopiert den Inhalt des Textfelds „Example Update URL“ und fügt ihn mit einer vorgestellten # in die Datei „/etc/ddclient.conf“ ein.
Nun ändert ihr eure „ddclient.conf“ wie folgend ab.
# https://USERNAME:UPDATE-KEY@ipv4.tunnelbroker.net/nic/update?hostname=TNUMMER daemon=5m use=web web=dyndns protocol=noip server=ipv4.tunnelbroker.net login=USERNAME password=UPDATE-KEY TNUMMER
Dienst aktivieren und starten/neustarten.
sudo systemctl enable ddclient.service
sudo systemctl restart ddclient.service
oder
sudo /etc/init.d/ddclient restart
IPv6-Routing
Routing ist nun unser Mittel der Wahl, um unsere Geräte im Heimnetz auch in den Genuss von IPv6 zu bringen. Ich zeige hier erstmal nur, wie ihr einen ungefilterten Zugang für eure Geräte / Systeme erstellen könnt. Deshalb setze ich voraus, dass die Firewall an euren PCs aktiviert ist und Web-Interfaces durch Passwörter gesichert sind. Das euch von außen ein „Hacker“ erreicht, ist dennoch bei den von uns gewählten Konfiguration unwahrscheinlich.
Da einige Betriebssystem Hersteller IPv6 unterschiedlich „toll“ umsetzen, kommen wir für eine allumfassende Konfiguration nicht um die Benutzung zweier Dienste herum.
radvd = Router Advertisements. Verbreitet im lokalen Netzwerk das hier ein IPv6-Router ist und welcher Prefix benutzt wird.
dhcpv6 = Stateless DHCPv6. Verteilt zusätzliche Informationen an IPv6-Clients. DNS, NTP, MTU, etc.
Es gibt auch andere Möglichkeiten IPv6 im Netzwerk umzusetzen. In Firmen oder Öffentlichen Einrichtungen wird oft die Statefull Variante benutzt, welche ich für ein Heimnetzwerk aber zu aufwändig empfinde.
sudo apt update && sudo apt install radvd isc-dhcp-server -y
sudo nano /etc/radvd.conf
Löscht nun den Inhalt der Datei „/etc/radvd.conf“ und fügt folgendes ein.
interface eth0 { AdvManagedFlag off; AdvSendAdvert on; AdvAutonomous on; AdvLinkMTU 1480; AdvOtherConfigFlag on; MinRtrAdvInterval 3; MaxRtrAdvInterval 60; prefix 2001:470:xxxx:xxxx::/64 { AdvOnLink on; AdvRouterAddr on; }; };
Das Interface passt ihr an falls nötig. Die Daten für das Feld „prefix“ erhaltet ihr wieder im Web-Interface von Hurricane Electric im Tab „IPv6 Tunnel„. Dort kopiert einfach den Prefix neben „Routed IPv6 Prefixes“ und fügt ihn in die „radvd.conf“ ein.
Jetzt folgt die Konfiguration für Stateless-DHCPv6, über die wir den Clients weitere Informationen mitteilen werden.
sudo nano /etc/dhcp/dhcpd6.conf
Inhalt der Datei Löschen und durch folgenden ersetzen.
default-lease-time 2592000; preferred-lifetime 604800; allow leasequery; subnet6 2001:470:xxxx:xxxx::/64 { interface eth0; option dhcp6.name-servers 2001:4860:4860::8888; option dhcp6.sntp-servers 2001:638:a000:1123:123::3; option dhcp6.domain-search "local"; }
Interface wieder anpassen falls nötig, und bei „subnet6“ wieder das Netz aus „Routed IPv6 Prefixes“ eintragen. Als Nameserver habe ich hier Google eingetragen und einen NTP-Pool Server. Kann man ja nach Geschmack anpassen, wie auch den Domain-Search Eintrag. Jetzt müssen wir nur noch das Routing aktivieren und die Dienste starten.
sudo nano /etc/sysctl.conf
Folgenden Eintrag finden, auskommentieren und abspeichern.
#net.ipv6.conf.all.forwarding=1
Routing aktivieren + Dienste aktivieren und starten/neustarten.
sudo sysctl -p
sudo systemctl stop radvd.service
sudo systemctl enable radvd.service
sudo systemctl start radvd.service
sudo systemctl enable isc-dhcp-server6
sudo systemctl start isc-dhcp-server6
…