Leider hat sich die neuste Version des Internet-Protokolls immer noch nicht soweit durchgesetzt, als dass es in den meisten deutschen Haushalten nativ zur Verfügung stehen würde. Da werden lieber immer neue Wege gefunden, die eigene (ISP-)Infrastruktur doch noch ein paar Jahre mit IPv4 am Leben zu halten. So ist beispielsweise bei vielen Providern Carrier Grade NATdas neuste Ehlend die neuste innovative Lösung des immer knapper werdenden IPv4-Adresspools. Bereits in diesem Artikel habe ich gezeigt, wie dieses Problem zumindest behelfsweise durch Tunneln mit einer FritzBox zu lösen ist, wer eine solche jedoch nicht sein Eigen nennt, kann dies mit dieser Anleitung jedoch auch mit einem Raspberry Pi umsetzen.
In dieser Anleitung nutzen wir Hurrican Electric als IPv6-Tunnelbroker. Dieser Anbieter hat den Vorteil, dass wir ohne große Umstände IPv6-Netze beantragen und diese ohne zusätzliche Software auf unseren Systemen einrichten können. Dazu erstellen wir unter folgender Adresse einen neues Benutzerkonto:
Auf der Übersichtsseite, die nach dem Anmelden bei tunnelbroker.net erscheint, wählen wir den Menüpunkt „Create Regular Tunnel„. Nun wird uns eine Liste an Tunnelendpunkten angeboten, aus der wir den für uns am nächsten erreichbaren wählen.
Anschließend vergeben wir dem Tunnel einen Namen, aus dem der Verwendungszweck deutlich wird. Dies dient nur unserer eigenen Übersicht. Wer über keinen eigenen DNS-Server verfügt, kann die von Hurrican Electric zur Verfügung gestellten Server für die Reverse-Records nutzen. Dazu klicken wir auf „Edit“ im unteren Bereich der Tunnel-Details.
Wenn alle Einstellungen getroffen wurden, sehen wir nun eine Übersicht aller für uns relevanten Daten des Tunnels.
IPv6-Einrichtung auf dem Raspberry
Beschäftigen wir uns nun mit der Einrichtung auf der Himbeere. Dazu aktivieren wir zunächst das Modul „ipv6“ beim Systemstart und erlauben die Weiterleitung (das „Forwarding„) von IPv6-Paketen, da wir die Himbeere später als Router einsetzen wollen.
Wir fügen das neue Modul hinzu, indem wir die Datei „/etc/modules“ editierend öffnen:
Shell
1
nano/etc/modules
um am Ende der Datei folgendes hinzufügen:
Shell
1
ipv6
Mit STRG + X verlassen wir den Editor „nano“ und speichern die Datei sogleich. Nun editieren wir eine weitere Konfigurationsdatei, um die Weiterleitung von IPv6-Paketen zu erlauben:
Shell
1
nano/etc/sysctl.conf
In dieser Datei suchen wir nach „net.ipv6.conf.all.forwarding“ und ersetzen die „0“ durch eine „1„:
Shell
1
net.ipv6.conf.all.forwarding=1
Anschließend starten wir den Raspberry neu mit
Shell
1
shutdown-rnow
Wurden die IP-Einstellungen (unabhängig ob v4 oder v6) bisher über einen DHCP-Server bezogen, deaktivieren wir nun den entsprechenden Client:
Shell
1
systemctl disable dhcpcd
Nun editieren wir die Konfigurationsdatei für unsere Netzwerkeinstellungen durch
Shell
1
nano/etc/network/interfaces
In dieser Datei löschen wir zunächst sämtliche Vorkommen von „eth0“ und fügen folgendes ein:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address2001:470:1f0a:c4::2
netmask64
endpoint216.66.80.30
local192.168.1.234
ttl255
gateway2001:470:1f0a:c4::1
auto etho
allow-hotplug eth0
iface eth0 inet static
address192.168.1.234
netmask255.255.255.0
gateway192.168.1.254
dns-nameservers192.168.1.219
dns-domain klenzel.net
iface eth0 inet6 static
pre-up modprobe ipv6
address2001:470:1f0b:c5::1
netmask64
Dabei sind folgende, wichtige Punkte zu beachten:
Die Adressen für den Tunnel unterscheiden sich von den Adressen, die wir in unserem Netzwerk zur Verfügung stellen können!
Wir benötigen auf der Himbeere selbst eine Adresse aus dem Clientnetz (=anderes Netz als Tunnelnetz!).
Wir vergeben auch die IPv4-Einstellungen statisch.
Wir benutzen kein Copy & Paste der oben gezeigten Einstellungen und wundern uns dann, warum diese Konfiguration nicht funktioniert.
Die Adressen für beide Tunnelendpunkte wurden uns bei den Tunnel-Details bekannt gegeben.
Das IPv6-Subnetz wurde ebenfalls bei den Tunnel-Details bekannt gegeben.
Kommen wir zum letzten, wichtigen Punkt dieser Konfiguration: dem lokalen Endpunkt namens „local„. Diesen erläutere ich genauer unter dem Punkt: „Firewall/Router konfigurieren“
Wir starten den Raspberry neu und prüfen mit
Shell
1
ifconfig
, ob die gewünschten Einstellungen übernommen wurden und ob ein neues Interface namens „he-ipv6“ in Erscheinung getreten ist. Wenn dem so ist, testen wir unsere IPv6-Konnektivität mit
Shell
1
ping6 heise.de
Firewall/Router konfigurieren
Die wenigsten verfügen über eine statische IPv4-Adresse und selbst wenn, wird diese nicht auf der Himbeere sondern auf dem Router des heimischen Internetanschlusses konfiguriert sein. Daher tragen wir bei den Interfaces unter „local“ die lokale Adresse der Himbeere ein und benötigen eine Weiterleitung des Protokolls 41 durch den Router. Bitte nicht mit dem Port 41 verwechseln, dies ist etwas grundsätzlich anderes und trifft an dieser Stelle nicht zu. Exemplarisch zeige ich die Vorgehensweise auf einer Sophos UTM Firewall.
Wir öffnen die Weboberfläche der Sophos UTM und bewegen uns über das Menü „Network Protection“ zum Punkt „NAT“ ⇒ „NAT„. Dort erstellen wir eine neue DNAT-Regel, die wie folgt aufgebaut wird:
Den Datenverkehrsdienst musste ich in meinem Fall neu definieren:
Zudem ist es notwendig, dass wir Hurrican Electric über einen Wechsel unserer öffentlichen IPv4-Adresse informieren. Dieser Wechsel geschieht auch heute immer noch bei den meisten Providern einmal täglich. Dafür erstellen wir uns ein Script, dass ich in diesem Artikel zeige.
Bietet uns unser Router keine Möglichkeit, das Protokoll 41 weiterzuleiten, bleibt uns nichts anderes übrig, als den Raspberry als „Exposed Host“ zu deklarieren oder diesen netzwerktechnisch in die DMZ zu platzieren.
IPv6-Provisionierung aktivieren
Um unser neues IPv6-Subnetz im heimischen Netz samt Gateway- und DNS-Serveradresse bekannt zu geben, nutzen wir den Dienst „radvd„, welchen wir wie folgt installieren:
Shell
1
apt-getinstall radvd
Anschließend editieren wir die Konfigurationsdatei von „radvd„:
Shell
1
nano/etc/radvd.conf
und fügen folgenden Inhalt ein (natürlich angepasst an die eigenen Gegebenheiten)
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interfaceeth0
{
AdvSendAdvert on;
prefix2001:470:1f0b:c5::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
# Öffentlichen DNS-Server bekannt geben
RDNSS2001:4f8:0:2::14
{
# Keine weiteren Optionen
};
};
Hierbei ist folgendes zu beachten:
Wir geben nicht das IPv6-Netz bekannt, dass für den Tunnel gedacht ist (in diesem Beitrag c4) sondern das uns zugewiesene Clientnetz (c5)
Wir geben zusätzlich einen IPv6-fähigen DNS-Server bekannt. Ist ein eigener vorhanden, kann die entsprechende IPv6-Adresse hier angegeben werden
Wenn kein eigener vorhanden ist, kann dieser freie DNS-Server verwendet werden: 2001:4f8:0:2::14
Nach der Konfiguration starten wir den Dienst neu mit
Shell
1
/etc/init.d/radvd restart
IPv6-Firewall auf dem Raspberry einrichten
Damit unsere Clients nicht ungeschützt mit dem Internet verbunden werden, errichten wir nun eine kleine Firewall auf der Himbeere. Es sollte jedem klar sein, dass sich alle Clients, sofern diese IPv6-fähig sind, ab sofort mit einer öffentlichen Adresse im Internet bewegen und diese somit direkt erreichbar sind. Die Zeiten, in denen wir uns hinter dem hochgelobten NAT verstecken, sind damit vorbei.
Für unsere Firewall errichten wir uns zunächst ein Arbeitsverzeichnis:
Shell
1
mkdir-p/scripts/firewall/
und editieren in diesem eine neue Datei, in welcher wir unsere Regeln ablegen:
Shell
1
nano/scripts/firewall/ipv6regeln.sh
Beispielhaft könnte unser Satz an Regeln wie folgt aussehen. Natürlich übernehme ich auch hier keine Haftung für irgendwelche Schäden die entstehen, weil ich in der folgenden Auflistung irgendeine wichtige Regel vergessen habe. Die Auflistung dient auch nur als minimale Aufzählung dessen, was theoretisch notwendig ist.
Nach dem Verlassen des Editors und dem Speichern der Datei erlauben wir nun die Ausführung dieser:
Shell
1
chmod+x/scripts/firewall/ipv6regeln.sh
Anschließend sorgen wir dafür, dass dieses Firewall-Script beim Systemstart geladen wird. Dazu öffnen wir die Datei „/etc/rc.local“ mit einem Texteditor:
Shell
1
nano/ect/rc.local
und tragen in dieser vor der Zeile „exit 0;“ folgende Zeile ein:
Shell
1
/scripts/firewall/ipv6regeln.sh
Wir verlassen auch diese Datei nach dem Speichern und aktivieren zu guter Letzt noch die IP6Tables beim Systemstart:
Shell
1
systemctl enable ip6tables
Mit
Shell
1
ip6tables-L-n-v
können wir uns das aktuelle Regelwerk anschauen und beobachten, wieviele Pakete durch welche Regel gewandert sind.
Konfiguration von Windows-Clients
Bei einem einzurichtenden Windows-Client, welcher künftig IPv6-fähig sein soll, öffnen wir das Netzwerk- und Freigabecenter. Dort öffnen wir die Einstellungen der Netzwerkkarte, die uns mit dem Internet verbindet. In unserem Fall wäre das eine kabelgebundene Netzwerkkarte von Intel. In den Eigenschaften der Netzwerkkarte aktivieren wir das Kontrollkästchen „Internetprotokoll Version 6„. Die Optionen dieses Menüpunktes belassen wir beim Standard, so dass die Einstellungen automatisch bezogen werden.
Nachdem die Änderung mit „OK“ bestätigt wurde, können wir einige Sekunden später den Erfolg unter „Details“ betrachten. In diesem Dialog sehen wir, dass unser Client nun über eine (unter anderem globale) IPv6-Adresse, einem IPv6-DNS-Server sowie einem IPv6-Gateway verfügt.
Wir öffnen die „Eingabeaufforderung“ (Window-Taste + R ⇒ „cmd“ ⇒ „OK„) und prüfen auch auf diesem Gerät die IPv6-Konnektivität durch
Shell
1
ping-6heise.de
Eine weitere Möglichkeit bietet uns die Seite http://test-ipv6.com. Beim Aufruf dieser Seite wird ebenfalls die Konnektivität via IPv6 getestet, als Ergebnis erhalten wir jedoch detailiertere Informationen.
Raspberry Pi als IPv6-Gateway
Leider hat sich die neuste Version des Internet-Protokolls immer noch nicht soweit durchgesetzt, als dass es in den meisten deutschen Haushalten nativ zur Verfügung stehen würde. Da werden lieber immer neue Wege gefunden, die eigene (ISP-)Infrastruktur doch noch ein paar Jahre mit IPv4 am Leben zu halten. So ist beispielsweise bei vielen Providern Carrier Grade NAT
das neuste Ehlenddie neuste innovative Lösung des immer knapper werdenden IPv4-Adresspools. Bereits in diesem Artikel habe ich gezeigt, wie dieses Problem zumindest behelfsweise durch Tunneln mit einer FritzBox zu lösen ist, wer eine solche jedoch nicht sein Eigen nennt, kann dies mit dieser Anleitung jedoch auch mit einem Raspberry Pi umsetzen.Inhaltsverzeichnis
Account beim Tunnelbroker anlegen
In dieser Anleitung nutzen wir Hurrican Electric als IPv6-Tunnelbroker. Dieser Anbieter hat den Vorteil, dass wir ohne große Umstände IPv6-Netze beantragen und diese ohne zusätzliche Software auf unseren Systemen einrichten können. Dazu erstellen wir unter folgender Adresse einen neues Benutzerkonto:
https://tunnelbroker.net/register.php
und melden uns mit diesem an.
Neuen Tunnel erstellen
Auf der Übersichtsseite, die nach dem Anmelden bei tunnelbroker.net erscheint, wählen wir den Menüpunkt „Create Regular Tunnel„. Nun wird uns eine Liste an Tunnelendpunkten angeboten, aus der wir den für uns am nächsten erreichbaren wählen.
Anschließend vergeben wir dem Tunnel einen Namen, aus dem der Verwendungszweck deutlich wird. Dies dient nur unserer eigenen Übersicht. Wer über keinen eigenen DNS-Server verfügt, kann die von Hurrican Electric zur Verfügung gestellten Server für die Reverse-Records nutzen. Dazu klicken wir auf „Edit“ im unteren Bereich der Tunnel-Details.
Wenn alle Einstellungen getroffen wurden, sehen wir nun eine Übersicht aller für uns relevanten Daten des Tunnels.
IPv6-Einrichtung auf dem Raspberry
Beschäftigen wir uns nun mit der Einrichtung auf der Himbeere. Dazu aktivieren wir zunächst das Modul „ipv6“ beim Systemstart und erlauben die Weiterleitung (das „Forwarding„) von IPv6-Paketen, da wir die Himbeere später als Router einsetzen wollen.
Wir fügen das neue Modul hinzu, indem wir die Datei „/etc/modules“ editierend öffnen:
um am Ende der Datei folgendes hinzufügen:
Mit STRG + X verlassen wir den Editor „nano“ und speichern die Datei sogleich. Nun editieren wir eine weitere Konfigurationsdatei, um die Weiterleitung von IPv6-Paketen zu erlauben:
In dieser Datei suchen wir nach „net.ipv6.conf.all.forwarding“ und ersetzen die „0“ durch eine „1„:
Anschließend starten wir den Raspberry neu mit
Wurden die IP-Einstellungen (unabhängig ob v4 oder v6) bisher über einen DHCP-Server bezogen, deaktivieren wir nun den entsprechenden Client:
Nun editieren wir die Konfigurationsdatei für unsere Netzwerkeinstellungen durch
In dieser Datei löschen wir zunächst sämtliche Vorkommen von „eth0“ und fügen folgendes ein:
Dabei sind folgende, wichtige Punkte zu beachten:
Kommen wir zum letzten, wichtigen Punkt dieser Konfiguration: dem lokalen Endpunkt namens „local„. Diesen erläutere ich genauer unter dem Punkt: „Firewall/Router konfigurieren“
Wir starten den Raspberry neu und prüfen mit
, ob die gewünschten Einstellungen übernommen wurden und ob ein neues Interface namens „he-ipv6“ in Erscheinung getreten ist. Wenn dem so ist, testen wir unsere IPv6-Konnektivität mit
Firewall/Router konfigurieren
Die wenigsten verfügen über eine statische IPv4-Adresse und selbst wenn, wird diese nicht auf der Himbeere sondern auf dem Router des heimischen Internetanschlusses konfiguriert sein. Daher tragen wir bei den Interfaces unter „local“ die lokale Adresse der Himbeere ein und benötigen eine Weiterleitung des Protokolls 41 durch den Router. Bitte nicht mit dem Port 41 verwechseln, dies ist etwas grundsätzlich anderes und trifft an dieser Stelle nicht zu. Exemplarisch zeige ich die Vorgehensweise auf einer Sophos UTM Firewall.
Wir öffnen die Weboberfläche der Sophos UTM und bewegen uns über das Menü „Network Protection“ zum Punkt „NAT“ ⇒ „NAT„. Dort erstellen wir eine neue DNAT-Regel, die wie folgt aufgebaut wird:
Den Datenverkehrsdienst musste ich in meinem Fall neu definieren:
Zudem ist es notwendig, dass wir Hurrican Electric über einen Wechsel unserer öffentlichen IPv4-Adresse informieren. Dieser Wechsel geschieht auch heute immer noch bei den meisten Providern einmal täglich. Dafür erstellen wir uns ein Script, dass ich in diesem Artikel zeige.
Bietet uns unser Router keine Möglichkeit, das Protokoll 41 weiterzuleiten, bleibt uns nichts anderes übrig, als den Raspberry als „Exposed Host“ zu deklarieren oder diesen netzwerktechnisch in die DMZ zu platzieren.
IPv6-Provisionierung aktivieren
Um unser neues IPv6-Subnetz im heimischen Netz samt Gateway- und DNS-Serveradresse bekannt zu geben, nutzen wir den Dienst „radvd„, welchen wir wie folgt installieren:
Anschließend editieren wir die Konfigurationsdatei von „radvd„:
und fügen folgenden Inhalt ein (natürlich angepasst an die eigenen Gegebenheiten)
Hierbei ist folgendes zu beachten:
Nach der Konfiguration starten wir den Dienst neu mit
IPv6-Firewall auf dem Raspberry einrichten
Damit unsere Clients nicht ungeschützt mit dem Internet verbunden werden, errichten wir nun eine kleine Firewall auf der Himbeere. Es sollte jedem klar sein, dass sich alle Clients, sofern diese IPv6-fähig sind, ab sofort mit einer öffentlichen Adresse im Internet bewegen und diese somit direkt erreichbar sind. Die Zeiten, in denen wir uns hinter dem hochgelobten NAT verstecken, sind damit vorbei.
Für unsere Firewall errichten wir uns zunächst ein Arbeitsverzeichnis:
und editieren in diesem eine neue Datei, in welcher wir unsere Regeln ablegen:
Beispielhaft könnte unser Satz an Regeln wie folgt aussehen. Natürlich übernehme ich auch hier keine Haftung für irgendwelche Schäden die entstehen, weil ich in der folgenden Auflistung irgendeine wichtige Regel vergessen habe. Die Auflistung dient auch nur als minimale Aufzählung dessen, was theoretisch notwendig ist.
Nach dem Verlassen des Editors und dem Speichern der Datei erlauben wir nun die Ausführung dieser:
Anschließend sorgen wir dafür, dass dieses Firewall-Script beim Systemstart geladen wird. Dazu öffnen wir die Datei „/etc/rc.local“ mit einem Texteditor:
und tragen in dieser vor der Zeile „exit 0;“ folgende Zeile ein:
Wir verlassen auch diese Datei nach dem Speichern und aktivieren zu guter Letzt noch die IP6Tables beim Systemstart:
Mit
können wir uns das aktuelle Regelwerk anschauen und beobachten, wieviele Pakete durch welche Regel gewandert sind.
Konfiguration von Windows-Clients
Bei einem einzurichtenden Windows-Client, welcher künftig IPv6-fähig sein soll, öffnen wir das Netzwerk- und Freigabecenter. Dort öffnen wir die Einstellungen der Netzwerkkarte, die uns mit dem Internet verbindet. In unserem Fall wäre das eine kabelgebundene Netzwerkkarte von Intel. In den Eigenschaften der Netzwerkkarte aktivieren wir das Kontrollkästchen „Internetprotokoll Version 6„. Die Optionen dieses Menüpunktes belassen wir beim Standard, so dass die Einstellungen automatisch bezogen werden.
Nachdem die Änderung mit „OK“ bestätigt wurde, können wir einige Sekunden später den Erfolg unter „Details“ betrachten. In diesem Dialog sehen wir, dass unser Client nun über eine (unter anderem globale) IPv6-Adresse, einem IPv6-DNS-Server sowie einem IPv6-Gateway verfügt.
Wir öffnen die „Eingabeaufforderung“ (Window-Taste + R ⇒ „cmd“ ⇒ „OK„) und prüfen auch auf diesem Gerät die IPv6-Konnektivität durch
Eine weitere Möglichkeit bietet uns die Seite http://test-ipv6.com. Beim Aufruf dieser Seite wird ebenfalls die Konnektivität via IPv6 getestet, als Ergebnis erhalten wir jedoch detailiertere Informationen.
Verwandte Beiträge
Als ich mich für ein neues Projekt auf die Suche nach der Pin-Belegung der einzelnen…
Für ein neues Projekt wollte ich bei bestimmten Interaktionen mit dem Raspberry eine akustische Rückmeldung…
In einem früheren Beitrag habe ich darüber berichtet, wie man den Temperatur- und Luftfeuchtigkeitssensor DHT22…
Es existieren mehrere Möglichkeiten, die GPIO-Ports eines Raspberry Pi zu steuern oder deren Stati auszulesen. Den…
Wenn ich im Haus Geräte schalten wollte, kam bisher entweder eine SIS-Steckdosenleiste oder eine Funksteckdose…