IPv6/IPv6-in-IPv4
Konfiguration eines IPv6-in-IPv4 Tunnels
Wenn zum Verlassen des lokalen Netzwerks keine native IPv6-Anbindung vorhanden ist, wird zum Erreichen des weltweiten IPv6 Internet ein IPv6-in-IPv4 Tunnel benötigt.
Es gibt unterschiedliche Tunnel-Mechanismen sowie einige Möglichkeiten zum Einrichten eines Tunnels.
Tunnelarten
Es steht Ihnen mehr als eine Möglichkeit zur Verfügung, IPv6 Pakete über ausschließliche IPv4 Links zu tunneln.
Statische Punkt-zu-Punkt Tunnel
Ein Punkt-zu-Punkt Tunnel ist ein dedizierter Tunnel zu einem Endpunkt, der Kenntnis über das lokale IPv6 Netzwerk (für das Routing zurück...) und die IPv4 Adresse des Tunnel-Endpunktes verfügt. Definition des Punkt-zu-Punkt Tunnels siehe: RFC 4213 / Basic Transition Mechanisms for IPv6 Hosts and Routers. Anforderungen:
- Die IPv4 Adresse des lokalen Tunnel-Endpunktes muss statisch sein, global eindeutig und vom entfernten Tunnel-Endpunkt aus erreichbar sein.
- Wenn keine statische IPv4 Addresse verfügbar ist, muß der Tunnel-Provider die Authentifizerung der dynamischen IPv4 Addresse unterstützen, wie z.B. SixXS / AICCU oder gogo6.
- Sie müssen ein globales IPv6 Präfix zugewiesen bekommen haben.
- Es ist auch möglich, daß zusätzliche IPv6 Netzwerke über diesen Tunnel geroutet werden.
- Ein entfernter Tunnel-Endpunkt muss dazu in der Lage sein, ihr IPv6 Präfix bis zu Ihrem lokalen Tunnel-Endpunkt zu routen (wobei meistens manuelle Konfiguration notwendig wird).
Statische Tunnelprovider:
- Hurricane Electric
- SixXS
Automatische Tunnel
Automatisches Tunneln tritt dann ein, wenn ein Knoten direkt einen anderen Knoten (dessen IPv4-Adresse er zuerst kennen lernen muss) über die IPv4-mapped IPv6-Adresse anspricht - dieser Mechanismus sollte nicht mehr unterstützt werden, weil er sehr unsicher ist.
9.1.3. 6to4 Tunnel
6to4 Tunnel (RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds) verwenden einen einfachen Mechanismus zum erstellen eines automatischen Tunnels. Jeder Knoten mit einer weltweit einmaligen IPv4 Adresse kann zu einem 6to4 Tunnel-Endpunkt gemacht werden (solange keine IPv4-Firewall den Verkehr unterbindet). Ein 6to4 Tunnel ist zumeist kein one-to-one Tunnel. In diesem Fall wird das Untertunneln in einen Upstream- und einen Downstream-Tunnel unterteilt. Ferner zeigt eine spezielle IPv6 Adresse an, dass der Knoten einen 6to4 Tunnel für die Verbindung zum weltweiten IPv6 Netzwerk verwendet.
Erstellen eines 6to4 Präfixes
Die 6to4 Adresse wird wie folgt definiert (Schema ist dem RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds entnommen):
FP und TLA zusammen haben den Wert 0x2002. V4ADDR ist die weltweit einmalige IPv4 Adresse des Knoten (in hexadezimaler Notation). Mit dem SLA wird das Subnetz identifiziert (65536 lokale Subnetze sind möglich) und benutzbar, um die lokale Netzwerstruktur abzubilden.
Für Gateways wird dieser Präfix normalerweise mit dem SLA ”0000” definiert und dem 6to4 Tunnel-Interface das Suffix ”::1” (kann aber auch ein beliebiger mit local-scope sein) zugewiesen. Zu bemerken ist, dass Microsoft Windows als Suffix auch immer die V4ADDR einsetzt.
9.1.3.2. 6to4 Tunnel zum Upstream
Der Knoten muss die Kenntnis darüber haben, an welchen entfernten Tunnel-Endpunkt die in IPv4 Paketen eingeschlossenen IPv6 Pakete gesendet werden sollen. In den ”Anfängen” der 6to4 Tunnel-Anwendung wurden dedizierte Upstream akzeptierende Router definiert. Liste der Router siehe: NSayer's 6to4 information.
Heute können Upstream Router automatisch mittels der anycast Adresse 192.88.99.1 gefunden werden. Routing Protokolle sind für die Verarbeitung im Hintergrund zuständig, siehe RFC 3068 / An Anycast Prefix for 6to4 Relay Routers für weitere Details.
9.1.3.3. 6to4 Tunnel zum Downstream
Der Downstream (6bone -> Ihr 6to4 fähiger Node) ist nicht wirklich fix, er kann von jenem Host variieren, an dem ursprünglich die Pakete gesendet wurden. Es gibt zwei Möglichkeiten:
- Der entfernte Host benutzt 6to4 und sendet die Pakete direkt an den lokalen Knoten zurück (siehe unten).
- Der entfernte Host sendet die Pakete zurück an das weltweite IPv6 Netzwerk, und abhängig vom dynamischen Routing, erstellt dann ein Relay-Router eines ISPs, der 2002::/16 via BGP kundgibt, automatisch zum lokalen Knoten einen Tunnel.
Möglicher 6to4 Verkehr
- Vom 6to4 zum 6to4: der Tunnel entsteht normalerweise direkt zwischen den beiden 6to4 fähigen Hosts.
- Vom 6to4 zum non-6to4: Der Datenstrom wird mittels Upstream-Tunnel versendet.
- Vom non-6to4 zum 6to4: Der Datenstrom wird mittels Downstream-Tunnel versendet.
Achtung, durch das mögliche asymmetrische Routing können Probleme mit defekten 6to4-Relays schwer zu diagnostizieren sein.
UDP gekapselte IPv6 Tunnels
UDP gekapseltes IPv6 Tunneling wird üblicherweise benutzt, wenn am internen Endpunkt keine globale IPv4 Addresse verfügbar ist, aber via Network Adress Translation (NAT) noch entsprechende Endpunkte im Internet mit Hilfe unten beschriebener UDP Ports erreichbar sind.
Teredo Tunnel
RFC 4380 / Teredo: Tunneling IPv6 over UDP through Network Address Translationsbeschreibt das Tunneln von IPv6 Pakete über IPv4 UDP Pakete (Bubbles), siehe auch Wikipedia / Teredo. Üblicherweise benutzt es 3544/udp. Der Client für Linux heißt miredo und ist benutzbar ohne große Konfiguration. Über diese Tunnelmethode kann nur ein einzelner Client an das globale IPv6-Netzwerk angeschlossen werden.
AYIYA Tunnel
Tunnel provider SixXS bietet auch einen IPv6-in-UDP-in-IPv4 (5072/udp) Tunnel an, zur Nutzung muss der Modus AYIYA aktiviert werden.
9.1.4.3. gogo6 Tunnel
Tunnel provider gogo6 bietet auch einen IPv6-in-UDP-in-IPv4 (3653/udp) Tunnel an, zur Nutzung muss der Modus v6udpv4 aktiviert werden.
Bestehende Tunnel anzeigen
Verwendung von "ip"
Anwendung:
Beispiel:
Verwendung von "route"
Anwendung:
Beispiel (Ausgabe wurde derart gefiltert, dass nur Tunnels über das virtuelle Interface sit0 angezeigt werden):
Einrichtung eines Punkt-zu-Punkt Tunnels
Es gibt drei Methoden ein Punkt-zu-Punkt Tunnel hinzuzufügen bzw. zu entfernen.
Eine gute Informationsquelle zum Thema Tunnel-Einrichtung mit ”ip” ist folgender Artikel: Configuring tunnels with iproute2 (article) (Spiegel).
Achtung: solche Tunnels werden durch das Kernel-Modul ”sit” unterstützt (potentiell nicht verfügbar auf Virtuozzo-Plattformen)
Einen Punkt-zu-Punkt Tunnel hinzufügen
Verwendung von "ip"
Bei einer kleinen Anzahl von Tunnels ist die Verwendung von ”ip” zurzeit die Standardmethode.
Beispiel für das Erstellen eines Tunnel-Devices (das Device wird aber hiermit nicht aktiviert; ebenso muss ein TTL Wert spezifiziert werden, da der Standardwert 0 ist):
Anwendung (drei allgemeine Beispiele):
Verwendung von "ifconfig" und "route" (nicht empfehlenswert)
Diese Methode zum Hinzufügen eines Tunnels wird nicht empfohlen, da Ungereimtheiten auftreten. Es gibt keine Probleme, wenn nur ein Tunnel hinzugefügt wird. Werden hingegen mehrere Tunnel hinzugefügt, dann kann der erste Tunnel nicht einfach deaktiviert werden, wenn die restlichen Tunnel aktiviert bleiben sollen.
Anwendung (drei allgemeine Beispiele):
WICHTIG: NICHT VERWENDEN! Mit diesem Setup wird von überall aus dem Internet das "automatische Tunneln" vorbehaltlos aktiviert. Das ist ein unnötiges Risiko.
Verwendung allein von "route"
Sie können einen Tunnel auch im NBMA-Stil (Non Broadcast Multiple Access) einrichten. Bei dieser Vorgehensweise können Sie sehr einfach mehrere Tunnels zugleich einrichten, aber kein Tunnel kann nummeriert werden (und das ist ein kein benötigtes Feature).
Anwendung (drei allgemeine Beispiele):
WICHTIG: NICHT VERWENDEN! Mit diesem Setup wird von überall aus dem Internet das "automatische Tunneln" vorbehaltlos aktiviert. Das ist ein unnötiges Risiko.
Punkt-zu-Punkt Tunnel entfernen
Diese Funktion wird selten manuell durchgeführt. Skripte verwenden diese Funktion zum sauberen deaktivieren bzw. beim Neustart einer IPv6 Konfiguration.
Verwendung von "ip"
Entfernen eines Tunnel-Devices:
Anwendung (drei allgemeine Beispiele):
Verwendung von "ifconfig" und "route" (nicht empfehlenswert, da unbequem)
Nicht nur bei der Erstellung eines Tunnels kommt es zu Ungereimtheiten, sondern auch bei dessen Entfernung. Die Tunnel müssen in umgekehrter Reihenfolge wieder entfernt werden, d.h. der zuletzt erstellte Tunnel muss als Erster entfernt werden...
Anwendung (drei allgemeine Beispiele):
Verwendung von "route"
Die Vorgehensweise ist vergleichbar mit dem löschen einer normalen IPv6 Route.
Anwendung (drei allgemeine Beispiele):
Nummerierte Punkt-zu-Punkt Tunnel
Manchmal ist es notwendig, einen Punkt-zu-Punkt Tunnel mit IPv6 Adresse genauso einzurichten, wie heute bei IPv4. Dies ist nur mit der ersten (ifconfig+route - nicht empfehlenswert) sowie mit der dritten (ip+route) beschriebenen Methode zur Einrichtung eines Tunnels möglich. Bei diesen Fällen können Sie den Tunnel-Interfaces die IPv6 Adressen, wie im Abschnitt zur Interface-Konfiguration beschrieben, hinzufügen.
Einrichtung von 6to4 Tunnel
Beachten sie Bitte, dass 6to4 Tunnel im Standard-Kernel der Serie 2.2.x (siehe systemcheck/kernel) nicht unterstützt werden. Weiter ist zu beachten, dass die Präfix-Länge für 6to4 Adressen 16 ist, da sich aus Perspektive des Netzwerks betrachtet, alle anderen 6to4 Hosts sich in der gleichen Schicht 2 befinden.
9.4.1. 6to4 Tunnel hinzufügen
Zu Anfang müssen Sie Ihre 6to4 Präfix-Länge mittels der lokal zugewiesenen global routbaren IPv4 Adresse berechnen (sollte ihr Host keine global routebare IPv4 Adresse haben, dann ist unter speziellen Bedingungen NAT auf dem Border Gateway möglich):
Angenommen, Ihre IPv4 Adresse ist:
Dann ist das daraus resultierende 6to4 Präfix:
Lokalen 6to4 Gateways sollte immer (ist aber kein Muss, ein beliebiger local-scope Suffix kann benutzt werden) das Suffix ”::1” zugewiesen werden. Daraus resultierend ergibt sich Ihre lokale 6to4 Adresse:
Zum automatischen Erstellen der Adresse können Sie folgenden Befehl nutzen:
Es gibt nun zwei Möglichkeiten einen 6to4 Tunnel einzurichten.
Verwendung von "ip" und einem dedizierten Tunnel-Device
Die empfohlene Vorgehensweise (der Wert TTL muss angegeben werden, da der Standardwert 0 ist):
Erstellen eines neues Tunnel-Device:
Interface aktivieren:
Eine lokale 6to4 Adresse am Interface hinzufügen (Hinweis: Präfix-Länge 16 ist wichtig!)
Hinzufügen der (Standard-) Route zum globalen IPv6 Netz unter Verwendung der all-6to4-routers IPv4 anycast Adresse:
Manche Versionen von ”ip” (z.B. SuSE Linux 9.0) unterstützen keine IPv4-kompatiblen IPv6-Adressen für Gateways, in diesem Fall muss die entsprechende IPv6-Adresse benutzt werden:
Verwendung von "ifconfig" und "route" sowie einem generischen Tunnel-Device "sit0" (nicht empfehlenswert)
Diese Vorgehensweise wird nicht empfohlen, da bei Verwendung des allgemeinen Tunnel Device sit0 keine Filter-Spezifizierung pro Device ermöglicht wird.
Das allgemeine Tunnel Interface sit0 aktivieren:
Dem Interface eine lokale 6to4 Adresse hinzufügen:
Hinzufügen der (Standard-) Route zum globalen IPv6 Netz unter Verwendung der all-6to4-routers IPv4 anycast Adresse:
9.4.2. 6to4 Tunnel entfernen
Verwendung von "ip" und einem dedizierten Tunnel-Device
Entfernen aller Routen über dieses bestimmten Tunnel Devices:
Interface deaktivieren:
Ein erstelltes Tunnel Device entfernen:
Verwendung von "ifconfig" und "route" sowie einem generischen Tunnel-Device "sit0" (nicht empfehlenswert)
Entfernen der (Standard-) Route über ein 6to4 Tunnel Device:
Eine 6to4 Adresse des Interfaces entfernen:
Ein allgemeines Tunnel Device deaktivieren (aber Achtung, eventuell ist das Interface noch in Verwendung...)