IPv6

Aus MK Wiki DE
Version vom 19. Juni 2018, 18:48 Uhr von MkWikiDeSysOp (Diskussion | Beiträge) (111 Versionen importiert: Import von michigreat.a.wiki-site.com)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

IPv6-Informationen behandelt verschiedene Informationen und Fakten zu IPv6.

Great!Net IPv6 Struktur

6to4-Prefix IPv4 in Hex
2002 55ee:b07a

Der Präfix des Netzes 2002:55ee:b07a::/48 ist eine 6to4-Adresse gemäß RFC 3056.

SLA-IDs

IPv6-Netze sind in sogenannten "Site Level Aggregations" strukturiert. Gemäß RFC 2374, Kapitel 3.0 - IPv6 Aggregatable Global Unicast Address Format) ist eine SLA-ID 16 Bit lang.

Präfix SLA-ID Beschreibung
2002:55ee:b07a 1 LAN
2002:55ee:b07a 2 WLAN
2002:55ee:b07a 3 Roaming
2002:55ee:b07a 4 NAT64

LAN und WLAN

Präfix für das LAN: 2002:55ee:b07a:1::/64

Präfix für das WLAN: 2002:55ee:b07a:2::/64

Die restlichen 64 Bit sind im Falle eines empfangenen Router Advertisments die auf EUI-64 hochgerechnete MAC-Adresse der Netzwerkkarte oder eine damit verwürfelte Zahl (Standard bei Windows) oder im Falle von DHCPv6 eine Adresse aus dem DHCP-Pool. Die einzelnen Bereiche sind unten näher beschrieben.

Roaming

Dieser Bereich ist für Verbindungen von außen (Tunnel, Einwählverbindung und dergleichen) reserviert und wird derzeit nicht produktiv benutzt.

IPv4-mapped/NAT64

Präfix für IPv4-mapped/NAT64-Adressen: 2002:55ee:b07a:4:0:0:0:0::/96

Dieser Adressbereich ist außerhalb des LANs nicht ansprechbar.

Infrastruktur: Prefix::1 - Prefix::FF

In diesem Bereich sind 254 Hosts möglich.

Router: 2002:55ee:b07a:1::1 (momentan unter mktest.ath.cx registriert)

Bereich für DHCPv6: Prefix::100 - Prefix::FFFF

In diesem Bereich sind 65.279 Adressen möglich.

Dieser Bereich ist für PCs, Notebooks, Netbooks, Handys, Handhelds usw. reserviert, die (auch) per DHCPv6 eine Adresse zugewiesen bekommen.

Bereich für statische permanente Konfiguration: Prefix::1:0001 - Prefix::1:FFFF

In diesem Bereich sind 65.535 Adressen möglich.

Dieser Bereich ist für Geräte mit statischer, permanenter IPv6-Konfiguration vorgesehen, weil diese beispielsweise DHCPv6 nicht beherrschen.

IPv6-Adressen enthält eine Liste der momentan reservierten Adressen.

Bereich für statische temporäre Konfiguration: Prefix::2:0001 - Prefix::2:FFFF

In diesem Bereich sind 65.535 Adressen möglich.

Dieser Bereich ist für Geräte mit statischer, temporärer IPv6-Konfiguration vorgesehen, weil diese beispielsweise DHCPv6 nicht beherrschen. Solche IP-Adressen könnten bspw. für Tests verwendet werden. Mitunter ist der Aufwand, eine IP-Adresse statisch einzutragen (bpsw. ad hoc per "ifconfig eth0...") kleiner als DHCPv6 zu aktivieren, da hierfür eventuell auch zusätzliche Software installiert und/oder konfiguriert werden müsste.

Nicht zugewiesen: Prefix::3:0001 - Prefix::FFFF:FFFF:FFFF:FFFF

Dieser Bereich wird derzeit nicht verwendet, IP-Adressen aus diesem Bereich sollten nicht manuell konfiguriert werden. Adressen aus diesem Bereich können bei Clients auftauchen, die sich automatisch über ein Router Advertisement konfiguriert haben.

Aktuelle Situation

Derzeit sind sowohl der RADVD als auch der ISC-DHCP-Server installiert, welcher auch DHCPv6 beherrscht. Im schlechtesten Fall verarbeiten Clients nur das Advertisement des RADVD und weisen sich die unteren 64 Bit selbst zu und konfigurieren somit eine (1) öffentliche IPv6-Adresse auf der Schnittstelle. Im nächstbesseren Fall wird die EUI64 verwürfelt und eine weitere IPv6-Adresse generiert, somit sind dann zwei IPv6-Adressen konfiguriert, wobei die zweite Adresse für ausgehende Verbindungen verwendet wird (das ist bspw. bei Android 4 der Fall). Im besten Fall wird zusätzlich eine DHCPv6-Anforderung gesendet und die Antwort verarbeitet, womit der Client dann drei öffentliche IPv6-Adressen besitzt (Verhalten bei Ubuntu 11.04 und aufwärts). Auf jeden Fall funktioniert IPv6 nur, wenn das Router Advertisement verarbeitet wurde, da so auch die IPv6-Route eingerichtet wird:

2002:55ee:b07a:1::/64 dev eth0  proto kernel  metric 256  expires 86379sec
default via fe80::226:18ff:feaa:1c03 dev eth0  proto kernel  metric 1024  hoplimit 255

Wird dies nicht gemacht, gibt es nur diese Route:

fe80::/64 dev eth0  proto kernel  metric 256

IPv6-Programme scheitern dann:

# ping6 mktest.ath.cx
connect: Network is unreachable

Konfiguration

Grundsätzliches

Ich benutze derzeit 6to4 für die Anbindung ans IPv6-Internet. Folgende Voraussetzungen müssen hierfür erfüllt sein:

  • Die Anycast-Adresse 192.88.99.1 muss erreichbar sein (prüfbar mit ping)
  • IP-Protokoll 41 muss durchgelassen werden

6to4 hat bei mir nicht in Verbindung mit einem Yesss-Zugang funktioniert, funktioniert jedoch mit Bob und natürlich mit meinem ISP zu Hause.

Mit blau.de funktioniert 6to4 leider auch nicht (getestet 2012/08/24).

Am Router

Derzeit ist Ubuntu 12.04 16.04 im Einsatz.

Folgende Pakete werden benötigt:

  • radvd
  • 6tunnel
  • tayga

Auf jeden Fall muss IPv6 Forwarding aktiviert sein (radvd würde den Start mit einer entsprechenden Meldung verweigern):

sysctl -w net.ipv6.conf.all.forwarding=1

/etc/radvd.conf

interface eth0
{
   AdvSendAdvert on;
   AdvManagedFlag on;
   prefix 0:0:0:1::/64
   {
      AdvOnLink on;
      AdvAutonomous on;
      Base6to4Interface eth1;
   };
};

Das Präfix lautet tatsächlich "0:0:0:1", das ist kein Fehler. Der RADVD ist so intelligent und ermittelt die öffentliche IPv4-Adresse auf der Schnittstelle "eth1" und errechnet sich daraus den Präfix. Das ist ein sehr großer Vorteil, falls man bspw. eine neue IPv4-Adresse bekommt und sich dadurch der 6to4-Präfix ändert. AdvManagedFlag einschalten bewirkt, dass sich Windows (Vista, 7, 2008) und Ubuntu ab 12.04 über DHCPv6 eine IPv6-Adresse holen.

/etc/network/interfaces

Folgende Zeilen müssen hinzugefügt werden (statische IPv6-Konfiguration auf eth0):

iface eth0 inet6 static
	address 2002:55ee:b07a:1::1
	netmask 64
       up /etc/network/tcp6fw
       up /usr/local/bin/activate_ipv6
iface tun6to4 inet6 v4tunnel
        address 2002:55ee:b07a::
        netmask 16
        gateway ::192.88.99.1
        endpoint any
        local 85.238.176.122

Man kann die IP-Adresse auch sofort vergeben:

ifconfig eth0 add 2002:55ee:b07a:1::1/64

Jedenfalls kann man in der Datei /etc/network/interfaces nur eine IPv6-Adresse vergeben.

activate_ipv6 Skript

Ursprünglich baute dieses Skript den 6to4-Tunnel auf, mittlerweile dient es nur mehr dazu, die zweite statische IPv6-Adresse hinzuzufügen und Weiterleitungen über 6tunnel einzurichten:

#!/bin/sh
ifconfig eth0 add 2002:55ee:b07a:1::2/64 # Kann in interfaces nicht angeg. werden
sleep 2
6tunnel -6 -l 2002:55ee:b07a:1::2 25 192.168.1.2 25
6tunnel -6 -l 2002:55ee:b07a:1::2 110 192.168.1.2 110
echo "Weiterleitungen von 2002:55ee:b07a:1::2 auf 192.168.1.2 (Ports 25, 110) eingerichtet."
service radvd restart
service squid3 restart

Das "sleep 2" ist notwendig, da sonst 6tunnel fehlschlägt und folgende Fehlermeldung ausgibt:

bind: Cannot assign requested address

/etc/wide-dhcpv6/dhcp6s.conf

Dies ist eine Beispielkonfiguration für den WIDE DHCPv6 Server, den ich unter Ubuntu 10.10 im Einsatz hatte. Dieser wurde mit Ubuntu 12.04 durch den ISC-DHCP-Server ersetzt.

Echte DUIDs und Adressen wurden geschwärzt und müssen im Produktiveinsatz entsprchend richtig gesetzt werden.

option domain-name-servers 2002:55ee:b07a:1::1;
option domain-name "greatsoft.local";

host host1 {
        duid XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;
        address 2002:55ee:b07a:1::XXXX:YYYY 10000 10000;
};

host host2 {
        duid XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;
        address 2002:55ee:b07a:1::XXXX:YYYY 1800 8200;
};

interface eth0 {
  send rapid-commit;
  address-pool pool1 3600;
};

pool pool1 {
        range 2002:55ee:b07a:1::AAAA:BBBB:CCCC to 2002:55ee:b07a:1::DDDD:EEEE:FFFF ;
};

/etc/dhcp/dhcpd6.conf

Dies ist eine Konfigurationsdatei für den ISC-DHCP-Server:

default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet6 2002:55ee:b07a:1::/64 {
    range6 2002:55ee:b07a:1::100 2002:55ee:b07a:1::ffff;
    option dhcp6.name-servers 2002:55ee:b07a:1::1;
    option dhcp6.domain-search "greatsoft.local";
}

Reservierungen, d.h. Zuweisungen von DUID zu IPv6-Adresse, sind derzeit noch keine eingetragen.

Anbinden eines IPv4-Dienstes

Dazu erhält der lokale IPv6-Router eine zweite IPv6-Adresse. Von dieser aus wird Port 25 auf Port 25 des IPv4-Hosts weitergeleitet:

ifconfig eth0 add 2002:55ee:b07a:1::2/64
6tunnel -6 -l 2002:55ee:b07a:1::2 25 192.168.1.2 25

DNS64 unter bind9 einrichten

Dazu fügt man in /etc/bind/named.conf.options einfach folgende Zeilen im Segment "options" hinzu:

dns64 2002:55ee:b07a:4::/96 {
         clients { any; };
};

NAT64

tayga ist ein NAT64-Übersetzer. Hierfür gibt's unter /usr/local/bin das Skript "init_tayga":

#!/bin/sh
tayga --mktun
ip link set nat64 up
ip addr add 192.168.1.1 dev nat64
ip addr add 2002:55ee:b07a:1::1 dev nat64
ip route add 192.168.255.0/24 dev nat64
ip route add 2002:55ee:b07a:4::/96 dev nat64
tayga

Linux

Hier wird beschrieben, wie man einen 6to4-Tunnel aufbauen kann, wobei das jeweilige System der Endpunkt des Tunnels ist. In einem LAN muss dies nur von einem Rechner aus gemacht werden, hierbei wird jedoch nach dem "::" nichts mehr angegeben, da die IPv6-Adresse ohnehin am LAN-Adapter konfiguriert ist.

6to4-Tunnel aktivieren

Anpassungen:

  • Zeile 2: Das letzte Oktett der lokalen IPv4-Adresse
  • Zeile 4: Statt "IIJJ:KKLL" die hexadezimale Darstellung der öffentlichen IPv4-Adresse und statt "XXXX" die letzten 4 Oktetten der IPv6-Adresse
echo IPv6 wird aktiviert...
ip tunnel add tun6to4 mode sit ttl 64 remote any local 192.168.1.XXX
ip link set dev tun6to4 up
ip -6 addr add 2002:IIJJ:KKLL:1::XXXX/16 dev tun6to4
ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1
echo IPv6 wurde aktiviert.

Dieses Skript kann unter folgender Adresse generiert werden (einsatzbar an einem System mit öffentlicher IPv4-Adresse, ansonsten muss in Zeile 2 die lokale IPv4-Adresse eingetragen werden):

http://sws.mkcs.at/tools/genactipv6.5s

Beispiel:

wget -O activateipv6.sh http://sws.mkcs.at/tools/genactipv6.5s && chmod +x activateipv6.sh && dos2unix activateipv6.sh

Das Paket dos2unix wird benötigt!

6to4-Tunnel deaktivieren

echo IPv6 wird deaktiviert...
ip -6 route flush dev tun6to4
ip link set dev tun6to4 down
ip tunnel del tun6to4
echo IPv6 wurde deaktiviert.

http://sws.mkcs.at/tools/deactipv6.sh

Beispiel:

wget http://sws.mkcs.at/tools/deactipv6.sh && chmod +x deactipv6.sh && dos2unix deactipv6.sh

Das Paket dos2unix wird benötigt!

Konfiguration der Clients per RAD

Keine Aktion nötig, passiert automatisch. Selbst wenn der Prefix geändert wird, passt Linux die IPv6-Adresse an.

Konfiguration der Clients per DHCPv6

Unter Ubuntu 11.04 werden DHCPv6-Antworten standardmäßig nicht verarbeitet. Um dies zu ermöglichen, muss das Paket "wide-dhcpv6-client" installiert werden. Die dazu passende Konfigurationsdatei heißt /etc/wide-dhcpv6/dhcp6c.conf und sollte folgende Zeilen beinhalten (siehe hier):

interface eth0
{
# 	information-only;
	send ia-na 0;
	request domain-name-servers;
	request domain-name;

	script "/etc/wide-dhcpv6/dhcp6c-script";
};

id-assoc na {		
};			

Danach sollte der Client neu gestartet werden

service wide-dhcpv6-client restart

Kurz danach sollte eine per DHCPv6 zugewiesene Adresse am Interface konfiguriert sein.

In /etc/default/wide-dhcpv6-client können die Schnittstellen eingestellt werden, auf denen der DHCPv6-Client kommuniziert. Trägt man hier eine Schnittstelle ein, die inaktiv ist, scheitert das Starten von wide-dhcpv6-client.

Die DUID steht in der Datei /var/lib/dhcpv6/dhcpv6-duid und kann bspw. im Zusammenhang mit dem DHCPv6-Server für eine statische Konfiguration verwendet werden.

Obwohl bei Ubuntu 11.10 die selbe Version von dhclient (4.1.1-P1) enthalten ist wie bei Ubuntu 11.04, funktioniert dhclient bei 11.10, bei 11.04 jedoch nicht (bleibt hängen und sendet ca. alle 30 Sekunden Anforderung an DHCPv6-Server, verarbeitet diese aber nicht).

Bei Ubuntu 12.04 ist die Version 4.1.ESV-R4 des Pakets isc-dhcp-client enthalten, mit welcher DHCPv6 einwandfrei funktioniert. Möchte man die DUID, die das System sendet, anpassen, bearbeitet man die Datei /etc/dhcp/dhclient.conf und trägt dort eine Zeile wie diese ein:

lease {
  interface "eth0";
  send dhcp6.client-id 00:03:00:01:12:34:56:78:AA:BB:CC:DD:EE:FF;
}

Dabei bedeutet "00:03", dass es sich um eine DUID vom Typ 3 (Link Local oder DUID-LL) handelt und bei "00:01" um den Hardwaretyp (fett gedruckt). Danach können beliebig viele 8-Bit-Blöcke erscheinen. Ich verwende bei mir 32 Bit als Betriebssystemkennung (kursiv gedruckt) und dann die 48 Bit lange MAC-Adresse des Systems, somit ist die DUID gleich lang wie die standardmäßig erstellte Typ 1-DUID (DUID-LLT).

Welche DUID verwendet wurde, kann man in der Leases-Datei in /var/lib/dhcp nachsehen. Normalerweise befinden sich sehr viele Dateien in diesem Ordner. Um jene aufzulisten, die in den letzten 24 Stunden erstellt wurden, kann man den Befehl

find . -mtime -1 -ls

verwenden. Das macht Sinn, wenn das Hochfahren des Systems eben noch nicht mehr als 24 Stunden her ist, ansonsten müsste man das Argument "-1" anpassen. Hat man nun den Dateinamen, grept man "dhcp6.client-id" heraus:

cat dhclient6-cb11edc6-e0a5-4308-afac-cad295afc890-eth0.lease | grep "dhcp6.client-id"

Windows Server 2003

6to4-Tunnel aktivieren

Wenn das Kommando ipv6 verfügbar ist:

ipv6 rtu 2002::/16 2
ipv6 adu 2/2002:55ee:b07a:1::XXXX
ipv6 rtu ::/0 2/::192.88.99.1

Quelle: version6.net

Allerdings funktioniert es nicht.

Ansonsten:

Mit netsh sollte es auch gehen, unklar ist mir bislang, wie genau. Vermutlich funktioniert 6to4 unter Windows XP und 2003 nicht in Verbindung mit NAT.

IPv6-Adresse statisch konfigurieren

Dazu gibt man auf der Kommandozeile folgendes ein:

netsh interface ipv6 add address interface="Local Area Connection" address=2002:... store=persistent

Der Name der Schnittstelle ist bei Bedarf anzupassen.

Windows XP/Vista/7

Konfiguration der Clients per RAD und DHCPv6

Windows XP: Die IPv6-Implementierung von Windows XP ist leider mangelhaft. Router Advertisements vom radvd werden zwar empfangen und korrekt verarbeitet, Windows XP kennt jedoch kein DHCPv6. Dafür gibt es jedoch Abhilfe in Form von Dibbler (Download Version 0.7.2 für Win32. Diese Software erlaubt die Installation eines Clients, eines Relays und sogar einen Servers für DHCPv6. Dibbler konfiguriert die IPv6-Adresse entsprechend der vom wide-dhcpv6-server empfangenen Daten. Die Netzwerkschnittstelle hat dann jeweils die selbst errechnete Adresse und die per DHCPv6 zugewiesene Adresse, was jedoch bislang kein Problem darstellt. Leider zeigt Windows XP die IPv6-Konfiguration im eingebauten Dialog nicht an, man muss sich dazu der Befehlszeile bemühen. Wenn Windows XP aus dem Ruhezustand aufwacht, "vergisst" es die per DHCPv6 zugewiesene Adresse. Man muss Dibbler mit

net stop dhcpv6client
net start dhcpv6client

neu starten, damit man wieder eine Adresse über DHCPv6 bekommt.

Windows Vista und Windows 7: Windows Vista/7 verhalten sich jeweils vollkommen korrekt. Sowohl Router Advertisements als auch DHCPv6 funktionieren ohne jede weiteren Eingriff. Die Netzwerkschnittstelle erhält dann zwei global routbare IPv6-Adressen, welche im entsprechenden Dialog auch angezeigt werden.

NetBSD 5

NetBSD 5 nimmt standardmäßig keine Router Advertisements entgegen, weswegen das Kommando rtsol auch nicht funktioniert und eine entsprechende Fehlermeldung ausgibt:

-bash-4.0:# rtsol
"Kernel is configured not to accept RAs"

Der Hinweis, in der Datei /etc/sysctl.conf den Eintrag "net.inet6.ip6.accept_rtadv=1" hinzuzufügen, führt zwar dazu, dass beim Hochfahren gemeldet wird, dieser Kernelparameter sei geändert worden, tatsächlich steht er danach immer noch auf 0. Um IPv6 unter NetBSD 5 zum Einsatz zu bringen, helfen die folgenden Zeilen in der Datei /etc/rc.local:

sysctl -w net.inet6.ip6.accept_rtadv=1
rtsol wm0

Recherchen zufolge ist DHCPv6 in NetBSD 5 nicht implementiert. Es könnte jedoch mit Zusatzsoftware wie z.B. dibbler möglich sein, es zu verwenden.

FreeBSD 9

Bei der Installation von FreeBSD 9 wird bei der Netzwerkkonfiguration gefragt, ob man für IPv6 eine Konfiguration empfangen möchte. Beantwortet man dies mit ja, verarbeitet FreeBSD Router Advertisments. Nachträglich kann man dies erreichen, indem man in der Datei /etc/rc.conf die Zeile

ifconfig_em0_ipv6="inet6 accept_rtadv"

einträgt.

Für DHCPv6 muss zuerst eine neuere Version von dhclient installiert werden:

pkg_add -r -v isc-dhclient-4.2

Dann sollte man mit ifconfig herausfinden, wie die Netzwerkschnittstelle heißt. Standardmäßig heißt sie "em0". Um beim Systemstart per DHCPv6 eine Adresse zu bekommen, müssen folgende Zeilen in die Datei /etc/rc.conf eingetragen werden:

dhclient_program="/usr/local/sbin/dhclient"
dhclient_flags="-6 em0"

Danach funktioniert jedoch DHCP über IPv4 nicht mehr! Man muss nach dem Start

dhclient em0

ausführen, sodass auch eine IPv4-Adresse über DHCP konfiguriert ist.

Dieses Problem wurde auch im FreeBSD Forum schon angesprochen: How to configure dhcp AND dhcpv6 at boot time

Arbeiten mit IPv6

Verwendet man eine "Link Local Unicast" Adresse (fe80::/10 (fe80… bis febf…)), was normalerweise der Fall ist, wenn diese per Autokonfiguration zugewiesen wurde, hat man zwei Nachteile:

  • Bei ping bzw. ping6 muss man die ausgehende Schnittstelle mit angeben. Bei Linux passiert dies mit dem Parameter "-I".
  • Bei TCP-Verbindungen wie bspw. HTTP muss man zur IP-Adresse die Schnittstelle dazuhängen (z.B. "%eth0" oder "%2"), sie also auch wissen.

Daher empfiehlt sich als Ersatz für die RFC 1918-Adressen (192.168.x.y) eine Adresse aus dem "Unique Local Unicast"-Bereich (fc00::/7 (fc… und fd…)) zu verwenden.

Offene Punkte

DNSv6

  • Auf Hosts soll vom Internet aus per DNS zugegriffen werden können, das heißt, es soll AAAA-Einträge in einer öffentlich erreichbaren Domain geben (mkcs.at funktioniert hierfür momentan nicht, da UPC nicht in der Lage ist, AAAA-Einträge zu verwalten)
  • Reverse Delegation bei der NRO: Die entsprechende Zone auf meinem DNS-Server ist bereits angelegt, jedoch müsste diese noch auf einen zweiten Server repliziert werden.
  • Kommunikation mit reinen - also nicht Dual Stack - IPv6-DNS-Servern

IPv4-only Hosts und Dienste

Ich habe einen Windows 2000 Server im Einsatz, der kein IPv6 kann. Momentan ist der von diesem Server angebotene SMTP-Dienst per 6tunnel angebunden. Der Nachteil von 6tunnel ist, dass für jeden Port eine Weiterleitung eingerichtet werden muss (was jedoch auch als Sicherheitsvorteil verstanden werden kann - nicht eingerichtete Weiterleitungen können keinen Schaden verursachen). Weitere Möglichkeiten sind hier aufgelistet.

  • tayga - Benutzt NAT64: Meine Tests haben ergeben, dass dies sehr gut funktioniert.
  • ip6tables?
    • Eher nicht, Zitat auf die Frage hin, wann ip6tables NAT unterstützen wird: Only over my dead body. We will never implement ipv6-to-ipv6 network address translation as long as I have any say in netfilter/iptables development. netfilter-core ip6tables question
    • Oder doch? Es gibt zumindest die RFC 6296, die IPv6-NAT beschreibt und einen Patch für iptables. Fraglich ist jedoch, ob sich dies für IPv6-zu-IPv4-Übersetzung auch nutzen lässt und ab welcher Kernel-Version dieser Patch implementiert ist.

Außerdem läuft auf meinem Arbeits-PC der Glassfish Server, der (zumindest in der Windows-Version) scheinbar auch kein IPv6 kann. Dagegen ist ein Kraut gewachsen:

Vorherige Überlegungen, die nicht weiter verfolgt werden:

  • ecdysis - Linux Kernel Modul das NAT64 benutzt (auch eine OpenBSD-Version verfügbar)

Reiner IPv6-Betrieb

Auf einem Testclient soll IPv4 deaktiviert werden, sodass jegliche Netzwerkkommunikation ausschließlich über IPv6 läuft. Da (Stand: September 2011) die meisten Internethosts jedoch nur über eine IPv4-Adresse verfügen, ist es notwendig, das IPv4-Internet in ein IPv6-Teilnetz innerhalb meines /48-Netzes abzubilden und einen DNS-Proxy so zu konfigurieren, dass er AAAA-Records für Hosts zurückgibt, die eigentlich gar nichts von IPv6 wissen.

Im Prinzip läuft das so ab: Das IPv4-Internet wird bspw. unter 2002:55ee:b07a:0004::/96 abgebildet, d.h. der Host www.mkcs.eu mit der IPv4-Adresse 87.106.47.185 hat im lokalen Netz die Adresse 2002:55ee:b07a:4::576a:2fb9. Wichtig dabei ist gemäß RFC 6052, dass die Bits 64 bis 71, das wären in diesem Falle die ersten zwei (hexadezimalen) Nullen rechts der SLA-ID (4), auf 0 stehen, was in diesem Falle gegeben wäre. Die 32 Bits der IPv4-Adresse müssen dabei nicht unbedingt an Position 97 - 128 stehen, sondern können theoretisch auch an Position 93 - 124 stehen, wobei die Bits 125 - 128 dann auf 0 wären, oder an Position 89 - 120, wobei dann 121 - 128 0 wäre usw. Aufgrund der besseren Lesbarkeit (da Nullergruppen zu 4, 8, 12 usw. Nullen in IPv6 durch "::" ersetzt werden können) scheint mir jedoch die zuerst dargestellte Variante die bessere zu sein. Möchte man bspw. keine Kommunikation mit IPv4-Hosts bei einem IPv6-Dienst innerhalb des LANs, kann man durch das simple Ausschließen der SLA-ID 4 dies unterbinden. Darüber hinaus ist es auch möglich, die letzten 32 Bits wie IPv4 zu notieren, d.h. 2002:55ee:b07a:4::87.106.47.185 wäre eine weitere Darstellungsform.

Zugriff von außen

Die SLA-ID 3 habe ich bereits für Roaming reseviert. Gemeint ist damit, dass ich bspw. von meinem Notebook aus, wenn ich damit unterwegs und somit in einem fremden Netz (z.B. das Bob Mobilfunknetz oder ein fremdes WLAN) eingebucht bin, eine IPv6-Adresse bekomme. Es gäbe hierfür ja den Teredo-Dienst, dieser machte jedoch immer Probleme beim Zugriff auf IP-Adressen aus dem 6to4-Bereich 2002://32. Mit Stand Jänner 2013 scheint dieses Problem nicht mehr zu existieren. Dennoch wäre es nett, eine IP-Adresse aus dem jeweils zugewiesenen (eigenen) IPv6-Adressbereich zu bekommen (ganz unabhängig davon, ob dieser nun 6to4, getunnelt über einen Tunnel Broker oder gar nativ ist). Wenn es nur darum geht, IPv6-Konnektivität zu erlangen, gibt es zahlreiche Möglichkeiten (z.B. Tunnel Broker, hier fragt sich nur, wie sinnvoll oder nicht es ist, wegen einem Client gleich ein ganzes /64-Netz zu "verbraten", auch wenn deren mögliche Anzahl sehr groß ist).

Möglichkeiten dies zu implementieren:

  • miredo-server: Hierzu trägt man beim Client in der Datei /etc/miredo.conf unter ServerAddress die Adresse des (eigenen) Miredo-Servers ein. Allerdings hat der Miredo-Server zwei Probleme: 1. Sicherheit: Jeder kann, sofern er von diesem Server weiß, ihn benutzen! 2. Man benötigt 2 öffentliche IPv4-Adressen, die aufeinanderfolgend sein sollten (z.B. 1.2.3.1 und 1.2.3.2).
  • Mobile IPv6: Jedoch nur sinnvoll, wenn man bereits über eine IP-Adresse verfügt (z.B. über Teredo).
  • OpenVPN Server: leider unter Ubuntu sehr kompliziert zu einrichten, wäre jedoch für Clients sehr einfach, u.a. ist es auch auf Smartphones einsetzbar.
  • PPP/PPPoE: evtl. auch eine Möglichkeit, jedoch stellt sich jeweils die Frage, ob Router Advertisments und DHCPv6 damit funktionieren.
  • 6in4-Tunnel: Es sollte eigentlich funktionieren, einen direkten 6in4-Tunnel vom Client zu meinem Gateway aufzubauen, allerdings gelang mir dies in Experimenten bisher nicht.

Linux pingt Windows (über (W)LAN)

ping6 -I wlan0 fe80::21d:7dff:fed7:dadf

[!] Linux pingt Linux (über Teredo)

# ping6 2001:0:53aa:64c:1094:6673:aa11:4f85
From 2001:0:53aa:64c:457:4781:aa11:4f85 icmp_seq=11 Destination unreachable: Address unreachable

Auch Anhängen von "-I teredo" führt zum gleichen Ergebnis.

Linux pingt IPv6 Host

# ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8005::93) 56 data bytes
64 bytes from 2a00:1450:8005::93: icmp_seq=1 ttl=57 time=176 ms

Windows XP pingt Linux (über (W)LAN)

C:\Dokumente und Einstellungen\Michael.GREATSOFT>ping6 2002:55ee:b07a:1::1

Pinging 2002:55ee:b07a:1::1 wird angepingt
von 2002:55ee:b07a:1:7125:b852:fb86:5690 mit 32 Bytes Daten:

Antwort von 2002:55ee:b07a:1::1: Bytes=32 Zeit<1ms
Antwort von 2002:55ee:b07a:1::1: Bytes=32 Zeit<1ms
Antwort von 2002:55ee:b07a:1::1: Bytes=32 Zeit<1ms
Antwort von 2002:55ee:b07a:1::1: Bytes=32 Zeit<1ms

Ping-Statistik für 2002:55ee:b07a:1::1
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ungefähre Zeitangaben in Millisekunden:
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

Per SSH von Linux zu Linux (über (W)LAN)

ssh -6 fe80::20c:29ff:fec0:c168%eth0

oder

ssh -6 fe80::20c:29ff:fec0:c168%2

Offen: Woher weiß man die Schnittstelle auf dem Zielsystem?

[!] Per Wget von Linux zu Linux (Apache 2.2.14) (über LAN)

Funktioniert nicht!

michael@xub810x64vm:~$ wget http://[fe80::20c:29ff:fec0:c168%eth0]
http://[fe80::20c:29ff:fec0:c168%eth0]: Ungültige numerische IPv6-Adresse.
michael@xub810x64vm:~$ wget http://[fe80::20c:29ff:fec0:c168%2]
http://[fe80::20c:29ff:fec0:c168%2]: Ungültige numerische IPv6-Adresse.

Aber

wget http://[2002:55ee:b07a:1::1]:8010

funktioniert. Vermutlich ein Bug in wget, der das Parsen des Interfaces nicht schafft.

[!] Per Firefox 3.0.19 von Linux zu Linux (Apache 2.2.14) (über LAN)

Funktioniert nicht!

Adresse: http://[fe80::20c:29ff:fec0:c168%eth0]/

Bad Request

Your browser sent a request that this server could not understand.
Apache/2.2.14 (Ubuntu) Server at [fe80::20c:29ff:fec0:c168%eth0] Port 80

[!] Per Firefox 3.6.11 von Windows XP zu Linux (Apache 2.2.14) (über LAN)

Timeout

Quellen und Literatur