Einführung in IPv6

Willkommen zu der Einführung in IPv6, das Internet Protokoll der nächsten Generation.

Autor 
Frank Prößdorf
Überarbeitet von 
Volker Grabsch


Contents

Was ist IP?

Das OSI-Model

Das wohl bekannteste und am meisten rezitierte Datenkommunikationsmodel ist das OSI (Open System Interconnection) Model, welches von der ISO (International Standards Organisation) entwickelt wurde. Die in diesem Model vorgeschlagenen Protokolle haben sich, trotz der allgemeinen Anerkennung nicht durchgesetzt, da bereits andere weniger komplexe und weit verbreitete Protokolle im Einsatz waren. Trotzdem hier eine kleine Graphik, die das OSI-Modell veranschaulichen soll.

[Schichtname]   [System]        [Layer Name]

Anwendung       7               Application
Darstellung     6               Presentation
Sitzung         5               Session
Transport       4               Transport
Netzwerk        3               Network         <-- Internet Protokoll
Verbindung      2               Data Link
Physikalisch    1               Physical

Das TCP/IP-Model

Das damals schon verbreitete etwas weniger komplexe TCP/IP Model, das sich auf Grund seiner Verbreitung dann auch gegen das OSI-Model "durchgesetzt" hat, kann man sich ungefähr folgendermaßen vorstellen:

[Schichtname]   [Protokolle]

Anwendung       DNS, HTTP, TELNET, SMTP, FTP..
Transport       TCP, UDP
Netzwerk        ICMP, IPv6, IPv4                <-- Internet Protokoll
Verbindung      Ethernet, SNAP, MAC, LLC
Physikalisch    Physikalisch

Die Anwendungsschicht in diesem Modell vereint die drei ersten Schichten des OSI-Models.

Das Internet Protokoll (IP)

Das Internet Protokoll ist also prinzipiell dafür verantwortlich, dass alle Datenpakete die losgesendet werden, am richtigen Zielrechner ankommen. Hierzu werden meist weltweit eindeutige Adressen genutzt. Diese funktionieren vom Prinzip her wie Postadressen. Wenn ein Brief losgeschickt wird, kommt er zunächst ins lokale Postamt. Dieses stellt daraufhin fest, zu welcher größeren Postsammelstelle, der Brief transportiert werden muss. Dort angekommen, kommt es zum lokalen Postamt der Zielregion und wird danach zu der gewünschten Adresse geliefert. Das gleiche Prinzip kann auf den Datentransport im Internet bezogen werden. Wird ein Datenpacket losgeschickt, so ist es mit ebenfalls mit einer Adresse versehen. Es kommt nun zum lokalen Router (Postamt), der bestimmt, zu welchem globalen Router (Postsammelstelle) das Paket weitergeleitet werden muss. Von dort geht es, unter Umständen über weitere Sammelstellen zum Router des Zielnetzwerks und zum Ziel selbst.

Hardware-Adressen (MAC)

Nun gibt es im Internet aber nicht nur die Postadressen, die nämlich beliebig geändert werden können, sondern auch noch Adressen, die für jeden Rechner bzw. für jede Netzwerkkarte spezifisch und eineindeutig sind. Um nun zwischen den IP-Adressen und diesen festen, statischen Netzwerkkartenadressen übersetzen zu können, verwendet man ein Mini-Protokoll. Die Translation der IP-Adresse in die physikalische, also Hardware-Adresse (z.B. 00:10:DC:2B:FC:55), auch MAC (Media Access Control) genannt, geschieht über das ARP - Address Resolution Protocol. Sollte also z.B. eine Maschine im lokalen Netzwerk nicht wissen, welche MAC-Adresse zu der gegebenen IP-Adresse passt, sendet es ein Broadcast an alle Rechner los, und wenn einer der Rechner erkennt, dass die IP-Adresse mit seiner übereinstimmt, sendet er eine Antwort, und ARP beschreibt seinen Cache neu und kann von nun an die IP-Adresse richtig in die MAC-Adresse auflösen.

Probleme von IPv4

Die aktuelle Version des IP (Internet Protokoll) ist 4 (IPv4). IPv4 überzeugte als ein stabiles und einfach zu implementierendes Protokoll seit 1981, wie in RFC 791 beschrieben. Es gibt jedoch einige Gründe die ein neues Protokoll unausweichlich machen.

Dieses neue Protokoll wird IPv6 oder auch IPng (Internet Protocol next Generation) genannt.

Neuerungen in IPv6

Vergleich IPv4 und IPv6

IPv4 IPv6
Adressen sind 32 bits lang. Adressen sind 128 bits lang.
IPsec Unterstützung ist optional. IPsec Unterstützung ist unabdingbar.
Es ist keine Identifikation eines Paketflusses durch den IPv4 Header möglich. Im IPv6 Header gibt es ein Flow Label field, an dem ein Paketfluss abgelesen werden kann.
Header beinhaltet eine checksum. Header beinhaltet keine checksum mehr. (Integrität des Pakets durch Sicherheitsmechanismen wie CRC noch unter dem IP level gesichert)
Header beinhaltet Optionen. Alle optionellen Daten wurden in den IPv6 Extension Header verlagert.
ICMP Router Discovery wird verwendet, um die IPv4 Adresse für den besten default Gateway zu ermitteln und ist optional. IPv6 fordert ICMPv6 Router Solicitation und Router Advertisement.
Muss manuell oder per DHCP konfiguriert werden. Weder manuelle Konfiguration noch DHCP sind erforderlich.
Es werden A Records in Domain Name System verwendet, um Hosts auf IPs zu mappen. Es werden AAAA Records verwendet, um im DNS Hosts auf IPs zu mappen.
Muss eine Paketgröße von 576-bytes unterstützen. Muss eine Paketgröße von 1280-bytes unterstützen.
Loopback Adresse ist: 127.0.0.1 Loopback Adresse ist: ::1
Private IP Adressen: 10.0.0.0/8; 172.16.0.0/12; 192.168.0.0/16 Site-local Adressen: FEC0::/48
Internet Adress Klassen Existieren nicht in IPv6 (deswegen muss BGP zum Bsp. classless interdomain routing können)

IPv6 Addressierung

Adressierung

Wie man leicht erkennen kann ist die Adresslänge eines der offensichtlichsten Merkmale von IPv6. Um sich eine Vorstellung machen zu können wie sehr das Volumen an verfügbaren Adressen gestiegen ist :

IPv4 
32-bit Adressenraum = 2^32 = 4,294,967,296 mögliche Adressen
IPv6 
128-bit Adressenraum = 2^128 = 340,282,366,920,938,463,463,374,607,431,768,211,456 mögliche Adressen (Dies entspricht ungefähr 656 Milliarden Adressen pro Quadratmillimeter der Erde.)

Zwar wurde dieser riesige Adressraum auch dafür geschaffen, die Knappheit an IPs zu bewältigen. Ein anderer Grund aber war eine gewisse Hierarchie und Flexibilität in der Adressvergabe zu kreieren. Diese wird genauer in RFC2373 beschrieben.

Adressenaufbau

Die Syntax der IPv6 Adressierung kann durch folgendes Beispiel anschaulich gemacht werden.

Binary Format:

0010000111011010000000001101001100000000000000000010111100111011
0000001010101010000000001111111111111110001010001001110001011010

128bit Adresse ist in 16bit Teile aufgespalten:

0010000111011010   0000000011010011   0000000000000000   0010111100111011
0000001010101010   0000000011111111   1111111000101000   1001110001011010

16bit Teile werden zum hexadezimal Format umgewandelt und durch Doppelpunkt getrennt:

21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A

Weitere Vereinfachung durch Weglassen der führenden Nullen:

21DA:D3:0:2F3B:2AA:FF:FE28:9C5A

Eine weitere Möglichkeit der Verkürzung besteht, wenn eine Adresse in folgender Form vorliegt:

2001:0618:0011:0000:0000:0000:0000:0001

Diese kann in folgender Form dargestellt werden:

2001:618:11::1

Der Vorteil ist klar ersichtlich.

Prefixes

Prefixes (im Deutschen: Präfixe; da aber eingedeutscht und häufiger verwendet hier der engl. Begriff) sind Ansammlungen von Adressen. Sie werden in folgender Form dargestellt:

[Adresse]/[Prefixlänge]

Also z.B.:

2001:618:11::/48

Hier eine kleine Übersicht über die Prefixlängen und die darin enthaltene Anzahl IPs.

2001:0618:0011:0000:0000:0000:0000:0001
      ||| |||| |||| |||| |||| |||| ||||
      ||| |||| |||| |||| |||| |||| |||128
      ||| |||| |||| |||| |||| |||| |||
      ||| |||| |||| |||| |||| |||| ||124
      ||| |||| |||| |||| |||| |||| ||
      ||| |||| |||| |||| |||| |||| |120
      ||| |||| |||| |||| |||| |||| |
      ||| |||| |||| |||| |||| |||| 116
      ||| |||| |||| |||| |||| ||||
      ||| |||| |||| |||| |||| |||112
      ||| |||| |||| |||| |||| |||
      ||| |||| |||| |||| |||| ||108
      ||| |||| |||| |||| |||| ||
      ||| |||| |||| |||| |||| |104
      ||| |||| |||| |||| |||| |
      ||| |||| |||| |||| |||| 100
      ||| |||| |||| |||| ||||
      ||| |||| |||| |||| |||96
      ||| |||| |||| |||| |||
      ||| |||| |||| |||| ||92
      ||| |||| |||| |||| ||
      ||| |||| |||| |||| |88
      ||| |||| |||| |||| |
      ||| |||| |||| |||| 84
      ||| |||| |||| ||||
      ||| |||| |||| |||80
      ||| |||| |||| |||
      ||| |||| |||| ||76
      ||| |||| |||| ||
      ||| |||| |||| |72
      ||| |||| |||| |
      ||| |||| |||| 68
      ||| |||| ||||
      ||| |||| |||64            ==      subnet prefix
      ||| |||| |||
      ||| |||| ||60
      ||| |||| ||
      ||| |||| |56
      ||| |||| |
      ||| |||| 52
      ||| ||||
      ||| |||48         ==      route prefix
      ||| |||
      ||| ||44
      ||| ||
      ||| |40
      ||| |
      ||| 36
      |||
      ||32
      ||
      |28
      |
      24



[Prefix]        [Number of IPs]

128             1
127             2
126             4
125             8
124             16
...             ...
120             256
...             ...
116             4096
...             ...
112             65,536
...             ...
108             1,048,576
...             ...
...             ...
80              281,474,976,710,656
...             ...
64              18,446,744,073,709,551,616
...             ...
48              1,208,925,819,614,629,174,706,176
...             ...
16              5,192,296,858,534,827,628,530,496,329,220,096

Adresstypen

Es wird weiterhin zwischen verschiedenen Adresstypen unterschieden:

Unicast Adressen 
Eine unicast Adresse identifiziert ein einzelnes Interface. Pakete die an diese Adresse abgeschickt werden gelangen zu einem Interface.
Multicast Adressen 
Eine multicast Adresse bezeichnet mehrere Interfaces. Pakete die an diese IP abgeschickt werden erreichen alle Interfaces die durch diese Adresse identifiziert werden.
Anycast Adressen 
Eine anycast Adresse identifiziert ebenfalls mehrere Interfaces. Alle Pakete die an diese IP abgeschickt werden erreichen das naheste Interface, das durch diese Adresse identifiziert wird. Nahest im Sinne von routing Abstand.

Unicast

Unicast Adressen kann man gegebenenfalls nochmal unterscheiden:

Aggregatable global unicast Adressen

Auch bekannt als globale Adressen entsprechen diese IPs den öffentlichen IPv4 IPs sind also weltweit einzigartig.

6to4 Adressen

Eigentlich sind 6to4 IPs auch Aggregatable global unicast Adressen. Da sie aber eine besondere Rolle spielen, will ich sie hier separat aufführen. 6to4 Adressen sind IPs, die aus einer IPv4 gebildet werden und folgendermaßen aussehen: 2002:3e8d:21e9::1 . Der gesamte 2002::/16 Space ist für die 6to4 Adressen reserviert, und jeder Rechner mit einer IPv4 erhält einen eindeutigen /48 IPv6 6to4 Adressraum. Man bestimmt "seinen" Adressraum folgendermaßen:

                62.141.33.233
               /   /    \   \
Dezimal:     62  141    33  233
              |   |      |   |
Hex:          3e  8d     21  e9
               \   \    /   /
                 \  |  |  /
            2002:3e8d:21e9::/48

Diesen Adressraum kann man nun nutzen, wenn man an ein 6to4 gateway, also einen server der die 6to4 Pakete via v4 empfängt und diese dann in das v6 fähige Internet weiterleitet, angeschlossen ist.

Link-local Adressen

Diese werden genutzt um mit Nachbarn die auf dem selben link hängen zu kommunizieren. Sie werden immer automatisch konfiguriert und dienen der Adressenautokonfiguration. Link-local Adressen beginnen immer mit FE80. Ein router forwarded niemals link-local IPs. Für diese IPs ist ein /64 Prefix vorhanden, also FE80::/64.

Site-local Adressen

Diese entsprechen den im IPv4 genannten privaten Adressraum (192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12). Sie werden zur Konfiguration eines LANs verwendet das nicht ans IPv6 Internet angeschlossen ist. Im Gegensatz zu link-local Adressen müssen diese manuell konfiguriert werden. Sie beginnen immer mit FEC0 und schließen einen /48 Prefix ein. Sie werden genauso wie die vorher genannten von keinem router geforwarded.

Spezielle Adressen

Es gibt im Prinzip zwei spezielle Adressen. Einmal (0:0:0:0:0:0:0:0), was das Fehlen jeglicher Adressen darstellt. Und einmal das Loopback ::1, was den lokalen Rechner bezeichnet.

Multicast

Es gibt einige vordefinierte multicast Adressen. Hier eine kurze Liste:

FF01:0:0:0:0:0:0:1 Alle Adressen des lokalen Rechners [RFC2373]
FF01:0:0:0:0:0:0:2 Alle Adressen der lokalen Route [RFC2373]
FF02:0:0:0:0:0:0:1 Alle Rechner, die am lokalen HUB hägen [RFC2373]
FF02:0:0:0:0:0:0:2 Alle Router am lokalen HUB [RFC2373]
FF02:0:0:0:0:0:0:5 Alle OSPFIGP Router am HUB [RFC2328,Moy]
FF02:0:0:0:0:0:0:6 Alle OSPFIGP Designated Router am HUB [RFC2328,Moy]
FF02:0:0:0:0:0:0:9 Alle RIP Router am lokalen Link [RFC2080]
FF02:0:0:0:0:0:0:A Alle EIGRP Router [Farinacci]
FF02:0:0:0:0:0:1:2 Alle DHCP Agenten am lokalen Link [Bound,Perkins]
FF05:0:0:0:0:0:0:2 Alle Router im lokalen Netz [RFC2373]
FF05:0:0:0:0:0:1:3 Alle DHCP server im lokalen Netz [Bound,Perkins]
FF05:0:0:0:0:0:1:4 Alle DHCP Relays im lokalen Netz [Bound,Perkins]

Adressenautokonfiguration

Ein weiterer Vorteil von IPv6 ist die Adressenautokonfiguration, die sogar ohne Konfigurationsprotokolle wie DHCP funktioniert. Ein host kann von allein eine link-local Adresse für jedes interface festlegen. Zusätzlich können durch Router Discovery Adressen von Routern, weitere Konfigurationsparameter, weitere Adressen, und lokale Prefixe festgesellt werden. In der "Router Advertisement"-Naricht wird außerdem angegeben, ob eine "stateful" Adresskonfiguration genutzt werden soll. Natürlich ist eine Autokonfiguration nur dann möglich, wenn die genutzen Interfaces "multicast"-fähig sind.

Es gibt im Prinzip 5 Stati der autokonfigurierten Adressen. Diese können sich also in einem oder mehreren dieser Stati befinden. Die Stati sind:

Tentative 
Die Adresse ist dabei als einzigartig identifiziert zu werden. Während dieses Status kann sie keinen normalen "unicast" Traffic empfangen. Sie ist allerdings in der Lage "Neighbor Advertisement" Narichten zu erhalten, die als Antwort auf die "Neighbor Solicitation" Naricht gesendet wurde.
Valid 
Diese Adresse wurde als einzigartig identifiziert und kann nun "unicast" Traffic empfangen. Eine Adresse die diesen Status hat, hat zusätlich entweder den `Preferred` oder den `Deprecated` Status.
Preferred 
Es ist möglich "unicast" Traffic von einer preferred Adresse zu empfangen und welchen an dieselbe zu verschicken.
Deprecated 
Diese Adresse ist immernoch gültig und "Valid". Von der Nutzung dieser durch neue Verbindungen wird allerdings abgeraten. Existierende Komunikationssessions können die Adresse immernoch nutzen.
Invalid 
Eine Adresse über die weder empfangen noch versendet werden kann. Eine Adresse erreicht diesen Status wenn die "Lebenszeit" abläuft.

Es gibt weiterhin 3 Arten der Autokonfiguration:

Stateless 
Die Konfiguration der Adressen basiert hierbei auf dem Erhalten einer "Router Advertisement" Naricht, die die folgenden zwei Optionen auf 0 gesetzt hat: Managed Address Configuration; Other Stateful Configuration. Weiterhin werden eine oder mehrere Prefixinformationen gegeben.
Stateful 
In diesem Fall beruht die Autokonfiguration auf einem "stateful" Adressenkonfigurationsprotokoll wie DHCP(v6). Diesmal enthält die "Router Advertisement" Naricht beide der vorher genannten Optionen mit Inhalt: 1 und keine Prefixinformationsoptionen. Ein Host wird diese Art der Autokonfiguration auch nutzen wenn am lokalen Link keine Router existieren.
Both 
Bei dieser Art der Autokonfiguration enthält die "Router Advertisement" Naricht die beiden Optionen auf 1 gesetzt UND Prefixinformationen.

Für alle Arten ist immer eine link-local Adresse konfiguriert.

IPv6 & DNS

Allgemeines

Zunächst ein paar grundsätzliche Informationen zum Domain Name System. Es gibt verschiedene RRs (Ressource Records). So kann ein Hostname auf eine IP via Ressource Record A (Adresse) oder AAAA (IPv6 - 128 anstatt von 32 Bit) zeigen. Andersherum kann eine IP via RR PTR (Pointer) auf einen Hostnamen zeigen. Weitere grunsätzliche RRs sind NS (Nameserver), SOA (Start of Authority), RP (Resposible Person), etc.. Das IN steht für Internet und ist so weit mir bekannt nicht zwingend notwendig. Ein weiterer RR, der mit der IPv6 Extension hinzugekommen ist, ist A6. AAAA war eigentlich nur als Übergangslösung gedacht, während der A6 Record den A Record ersetzen soll. Das A6 Format ist ein wenig ungewöhnlich; deswegen werde ich versuchen es hier kurz zu erklären.

A6

Format:

NAME [TTL] TYPE BITS ADDRESS REFERRAL

Beispiel:

test IN A6 64 ::A223:99ff:5412:1a12 ns.notjusthosting.com.

Der A6 Record repräsentiert eine 128-Bit Adresse. In unserem Beispiel werden aber nur 64 Bits angegeben. Der "Rest" wird vom DNS des Providers (ns.notjusthosting.com) geholt. Hierdurch wird eine gewissen Unabhängigkeit zwischen Provider und Client erreicht, da wenn das Netzwerk den Provider wechselt, ja lediglich der Referral DNS geändert werden muss.

Am besten sind die Veränderungen wohl an einem praktischen Beispiel erkennbar. Deswegen werde ich hier versuchen eines darzustellen, das möglichst anschaulich ist. Wer detailiertere Informationen möchte, dem empfehle ich http://www.tdoi.org/setupdns.php (englisch).

Mehr Informationen zum BIND DNS Server sind hier zu finden: http://www.isc.org/products/BIND/ (englisch).

Beispielkonfiguration

Also hier ein Beispiel, wie DNS und rDNS konfigurierbar sind. Wir gehen davon aus, dass uns der folgende Adressbereich zugewiesen wurde:

2001:618:11::/48

und wir außerdem über die Domain:

notjusthosting.com

verfügen. Zudem haben wir einen IPv4 Adressraum, der sich in folgendem Netz befindet:

62.141.33.0

Hieraus ergibt sich also folgende Beispielkonfiguration (Kommentare beginnen mit ";"):

Auszug aus [/etc/resolv.conf]

nameserver ::1
nameserver 2001:618:11:1::1

Auszug aus [/etc/bind/named.conf]

; Die Domain notjusthosting.com
zone "notjusthosting.com" {
        type master;
        file "/etc/bind/db.notjusthosting.com";
};

; rDNS im Nibble format für den IPv6 Raum 2001:618:11::/48 in der
.ip6.int Domäne
zone "1.1.0.0.8.1.6.0.1.0.0.2.ip6.int"{
        type master;
        file "/etc/bind/db.2001:0618:0011.int";
};

; rDNS im Nibble format für den IPv6 Raum 2001:618:11::/48 in der
.ip6.arpa Domäne
zone "1.1.0.0.8.1.6.0.1.0.0.2.ip6.arpa"{
        type master;
        file "/etc/bind/db.2001:0618:0011.arpa";
};

; rDNS im Bitstring format für den IPv6 Space 2001:618:11::/48 in der
.ip6.arpa Domäne
zone "\[x200106180011/48].ip6.arpa"{
        type master;
        file "/etc/bind/db.2001:0618:0011.arpa.bs";
};

; rDNS für den IPv4 Raum 62.141.33.0 in der .in-addr.arpa Domäne
zone "33.141.62.in-addr.arpa" {
        type master;
        file "/etc/bind/db.62.141.33";
};

Auszug aus [/etc/bind/db.notjusthosting.com]

$TTL 3600 ; Time To Live - 1 Stunde (3600 Sekunden)
notjusthosting.com.      IN      SOA  notjusthosting.com.
                root.notjusthosting.com. (
                        2002101608 ;serial number YYYYMMDDxx (bei
Änderung erhöhen - Datum)
                        11811 ;refresh time in seconds
                        3611 ;retry time in seconds
                        86400 ;time in seconds
                        3600 ) ;minimum time to live in seconds

; Nameserver für die Domain festlegen
notjusthosting.com.     IN      NS      ns.notjusthosting.com.
                        IN      NS      ns2.notjusthosting.com.


; >> IPv4 - A Ressource Record
www             IN      A       62.141.33.230
ns              IN      A       62.141.33.232

; >> IPv6 - AAAA Ressource Record
www.ipv6        IN      AAAA    2001:0618:0011:0000:0000:0000:0000:0001
www.ipv6	IN	A6 0	2001:0618:0011:0000:0000:0000:0000:0001
ns		IN      AAAA    2001:0618:0011:0001:0000:0000:0000:0001
		IN	A6 0	2001:0618:0011:0001:0000:0000:0000:0001
test		IN	AAAA	2001:0618:0011:22a3:8784:0223:0000:0074

Auszug aus [/etc/bind/db.62.141.33]

$TTL    3600 ; Time To Live - 1 Stunde (3600 Sekunden)
@       IN      SOA     localhost. root.localhost. (
                        02082201        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

        IN      NS      ns.notjusthosting.com.
        IN      NS      ns2.notjusthosting.com.

; 62.141.33.232
232     IN      PTR     ns.notjusthosting.com.

Auszug aus [/etc/bind/db.2001:0618:0011.int]

$TTL 3600
$ORIGIN 1.1.0.0.8.1.6.0.1.0.0.2.ip6.int.
@       IN      SOA ns.notjusthosting.com. root.notjusthosting.com. (
                                2002092400
                                3H
                                30M
                                1W
                                12H )

                IN      NS      ns.notjusthosting.com.

; 2001:0618:0011:0001:0000:0000:0000:0001
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 IN      PTR    
ns.notjusthosting.com.
; 2001:0618:0011:22a3:8784:0223:0000:0074
4.7.0.0.0.0.0.0.3.2.2.0.4.8.7.8.3.a.2.2	IN	PTR	test.notjusthosting.com.

Auszug aus [/etc/bind/db.2001:0618:0011.arpa]

$TTL 3600
$ORIGIN 1.1.0.0.8.1.6.0.1.0.0.2.ip6.arpa.
@       IN      SOA ns.notjusthosting.com. root.notjusthosting.com. (
                                2002092400
                                3H
                                30M
                                1W
                                12H )

                IN      NS      ns.notjusthosting.com.

; 2001:0618:0011:0001:0000:0000:0000:0001
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 IN      PTR    
ns.notjusthosting.com.
; 2001:0618:0011:22a3:8784:0223:0000:0074
4.7.0.0.0.0.0.0.3.2.2.0.4.8.7.8.3.a.2.2 IN      PTR    
test.notjusthosting.com.

Auszug aus [/etc/bind/db.2001:0618:0011.arpa.bs]

$TTL 3600
$ORIGIN \[x200106180011/48].ip6.arpa.
@       IN      SOA ns.notjusthosting.com. root.notjusthosting.com. (
                                2002092400
                                3H
                                30M
                                1W
                                12H )

                IN      NS      ns.notjusthosting.com.

; 2001:0618:0011:0001:0000:0000:0000:0001
\[x00010000000000000001]        IN      PTR     ns.notjusthosting.com.
; 2001:0618:0011:22a3:8784:0223:0000:0074
\[x22a38784022300000074]	IN	PTR	test.notjusthosting.com.

IPv6 Header

Die Struktur eines IPv6 Pakets sieht ungefähr so aus:

  .______.____________.______________________.
 /       |            |                       \
| IPv6   | Extension  | Upper Layer Protocol   |
| Header | Headers    | Data Unit              |
| (40 b) |            |                        |
 \.______|____________|______________________./

         <-------------- Payload -------------->

<---------------- IPv6 Paket ----------------->

Der Header hat eine festgelegte Größe von 40 bytes. Darauf können 0 oder mehrere Extension Headers folgen. Diese können unterschiedlich groß sein. In jedem Header (einschließlich dem IPv6 Header) gibt es ein Next Header Feld in dem angegeben wird ob es einen weiteren Header gibt. Der letzte header gibt an welcher Art die darauf folgende Data Unit hat, also welches Upper Layer Protocol (z.B. TCP, UDP, ICMPv6) verwendet wird. Im Gegensatz zum festgesetzten IPv4 Header lässt sich der IPv6 Header beliebig erweitern und ist somit offen für zukünftige Bedürfnisse.

Vergleich IPv4 und IPv6 Header:

 ___________________________________________________
|         |        |              |                 |
| Version | Length | Service Type | Packet Length   |   I
|---------+--------+--------------+-----------------|   P
| Identification                  | Fragment Offset |   v
|--------------+------------------+-----------------|   4
| Time to live |     Transport    | Header Checksum |
|---------------------------+-----+-----------------|   H
|                 Source Adress                     |   e
|---------------------------------------------------|   a
|               Destination Adress                  |   d
|-----------------------------------+---------------|   e
|      Options                      |    Padding    |   r
|___________________________________|_______________|


 ______________________________________________________
|             |              |                         |   I
|   Version   |  Priority    |    Flow Label           |   P
|-------------+--------------+-------------+-----------|   v
| Payload Length             | Next Header | Hop Limit |   6
|----------------------------+-------------+-----------|
|                    Source Adress                     |   H
|                                                      |   e
|------------------------------------------------------|   a
|                   Destination Adress                 |   d
|                                                      |   e
|______________________________________________________|   r
Version 
(4 Bits) enthält bei IPv4 '4' und bei IPv6 '6'
Priority 
(4 Bits) enthält entweder den Wert 'congestion controlled' oder 'noncongestion controlled', wobei letzteres die höhere Priorität darstellt.
Flow Label 
(24 Bits) dient der Kontrolle über den Paketfluss.
Payload Length 
(16 Bits) gibt an, wie lang der Rest des Pakets nach dem Header in Octets ist.
Next Header 
(8 Bits) beschreibt den darauf folgenden Header
Hop Limit 
(8 Bits) entspricht in etwa dem Feld "Time to Live" im IPv4 Header. Es wird pro Router, der das Paket forwarded, um eins heruntergezählt. Wenn es 0 erreicht, wird das Paket fallengelassen.
Source Adress 
(128 Bits) gibt die Senderadresse an
Destination Adress 
(128 Bits) gibt die Empfängeradresse an


Einige der typischen Werte die das "Next Header"-Feld annehmen kann:

Value (in decimal) Header
0 Hop-by-Hop Options Header
6 TCP
17 UDP
41 Encapsulated IPv6 Header
43 Routing Header
44 Fragment Header
46 Resource ReSerVation Protocol
50 Encapsulating Security Payload
51 Authentication Header
58 ICMPv6
59 No next Header
60 Destination Options Header

Wenn ein IPv4 Paket versandt wird, muss jeder Router, durch den das Paket reist, alle darin vorkommenden Optionen durcharbeiten. Dies bedeutet einen großen Zeitverlust, da dies eigentlich eine völlig überflüssige Arbeit ist. Beim IPv6 Header, bei dem alle Optionen in Extensions Headern ausgelagert werden, muss nur der "Hop-by-Hop"-Options-Header bewätigt werden, was eine nicht zu verachtende Zeitersparnis mit sich führt. Reihenfolge der Extension Headers, falls vorhanden, ist

1. Hop-by-Hop Options Header 
(RFC2460, RFC2675 und RFC2711) Garantiert für eine effektive Methode, Pakete, die ein spezielles Handling benötigen, auszusondieren. Pakete, die diesen Extension Header nicht haben, werden vom Router nicht vollständig durchgearbeitet, sondern schnellstmöglich weiter gesendet. Bei Paketen die ihn besitzen, passiert natürlich das Gegenteil.
2. Destination Options Header 
Dieser Header gibt wie der letzte bestimmte Optionen an, wie das Paket auf auf dem Weg liegenden Routern (2.) und wenn es angekommen ist (7.) verarbeitet werden soll.
3. Routing Header 
(RFC2460) Dieser kann vom Sender dazu benutzt werden die Route von vornherein festzulegen. Diese wird dann nicht mehr geändert und auch von den Antwortpacketen verwendet. In diesem Header werden alle Adressen derjenigen Router angegeben durch die das Paket reisen soll. Wenn also das Paket einen der auf dem Weg liegenden Router passiert, arbeitet dieser den Router Header durch und setzt die Adresse die auf seine folgt als nächstes Ziel fest.
4. Fragment Header 
Dieser Header enthält Informationen darüber, wie die Fragmente der Gesamtinformationen, die vom Source in Fragmente gespalten wurden, da sie zu groß waren, wieder zusammengefügt werden können.
5. Authentication Header 
(RFC2402) Im Authentication Header befinden sich Daten die aussagen, dass das Paket wirklich von dem und dem Sender kommt, dass die Daten die sich in dem Paket befinden während ihrer Reise nicht verändert wurden und das angenommene Pakete nicht weiterverschickt werden können. Der Authentication Header bietet keine Sicherheit, in dem er die Daten verschlüsselt. Hierzu würde er in Verbindung mit dem Encapsulating Security Payload Header benutzt werden. Für mehr Informationen wie der Authentication Header Sicherheit garantiert sind in dem oben genannten RFC zu finden.
6. Encapsulating Security Payload Header 
(RFC2406) Dieser Header bietet Identifizierung und Sicherheit der im Paket mitgeschickten Daten. Im Gegensatz hierzu bietet der Authentication Header Sichereit für das gesamte Paket. Für Details wie dieser Schutz der Daten vorgenommen wird, gibt es wieder ein RFC. (s.o.)
7. Destination Options Header 

Einbindung ins System

Es ist prinzipiell recht einfach, sein System ipv6-fähig zu machen. Man installiert dazu einfach den neuen IP Stack und verbindet sein System mit dem weltweiten IPv6-fähigen Internet.

Windows XP

Windows XP hat IPv6 schon von Anfang an implementiert. Es muss nur noch "installiert" werden. Dies geschieht, indem man einfach am Prompt (Eingabeaufforderung) eingibt:

ipv6 install

Die vorhandenen IPv6 Interfaces kann man nun ansehen mit:

ipv6 if

Die dort abgebildeten Interfaces werden per default von Windows installiert und können vom Benutzer verändert werden:

Interface1 
Dies ist das Loopback Interface, also die lokale Maschine.
Interface2 
Dieses Interface ist das Autotunnel-Interface.
Interface3 
Dies wiederum ist das 6to4-tunnel-Interface.
Interface4 
Dieses Interface stellt eine LAN-Verbindung dar, ist also prinzipiell das virtuelle Interface der Netzwerkkarte.

Darauffolgende Interfaces, falls vorhanden, können variieren. Nun da das System ipv6-fähig ist, will man natürlich auch das Internet mit dem neuen Protokoll nutzen. Hierzu benötigt man höchstwahrscheinlich einen IPv6-in-IPv4 tunnel. Dies bedeutet, dass man mit einem ipv6-fähigen Server im Internet, der IPs frei vergibt, eine IPv4 Verbindung eingeht und alle IPv6-Pakete werden in einen IPv4-Mantel gehüllt und gehen über diese Verbindung ins IPv6-fähige Internet. Diese eben angesprochenen Server findet man unter anderem auf http://www.hs247.org unter dem Stichpunkt Tunnel Brokers. Bekommt man nun von diesem seine IP, so setzt man diese auf ein Interface, was ungefähr so aussieht:

ipv6 adu 4/2001:618:11:1:1::1

Als nächstes sagt man seinem Betriebssystem, dass alle IPv6-Pakete durch diesen Tunnel geschickt werden sollen. Dies sieht ungefähr so aus:

ipv6 rtu ::/0 4/::62.141.33.230.

::/0 entspricht in Windows der default route. Einfacher ist die Konfiguration wenn man einen Router in seinem LAN hat, der wiederum einen IPv6-in-IPv4 tunnel hat. Dieser router propagiert wie oben beschrieben seine Prefixe und Windows nimmt sich einer der IPs aus diesem Prefix und packt diese auf das Interface4. Es erstellt desweiteren eine default Route über diesen Router. Testen kann man dies über einen simplen ping6-Befehl. Also zum Beispiel in der Eingabeaufforderung:

ping6 2001:618:11::1

Windows 2000

Es gilt dasselbe wie für Windows XP, nur dass der IP Stack für Windows 2000 hier erst heruntergeladen und installiert werden muss:

Das endet, wie man es von einem guten Betriebssystem gewohnt ist, mit einem Neustart. Nun ist dasselbe wie bei oben genanntem Beispiel zu tun, und der "ipv6"-Befehl kann genutzt werden.

Linux

Es ist selbstverständlich, dass man Administrator (root) sein muss, um ipv6 einrichten zu können. Ich werde außerdem nur kurz auf die Implementation von IPv6 in Linux eingehen, da dies ein überaus komplexes Gebiet ist, und über den Rahmen dieser Seiten hinausführt. Sollte IPv6 nicht im Kernel aktiviert sein (/proc/net/if_inet6 fehlt), und die Einbindung über "modprobe ipv6" negativ ausfallen, sollte man seinen Kernel recompilen, und IPv6 implementieren. Ist dies geschafft, registriert man, wie bei Windows, einen Tunnel bei einem der auf http://www.ipv6tf.org/guide/organizations.php zu findenen Tunnel Broker. Dieser liefert meist ein Aktivierungsscript mit. Sollte dies nicht der Fall sein, wird zumindest die IPv4 des Tunnel Brokers und die IPv6 IP übergeben. Hier nun ein einfaches Script, um den Tunnel zu aktivieren:

#!/bin/sh
/sbin/iptunnel add tb mode sit local [eigeneIPv4] remote [tbv4] ttl 64
/sbin/ifconfig tb up
/sbin/ifconfig tb add [IPv6]/[prefix]
/sbin/route -A inet6 add 2000::/3 dev tb
[tbv4] 
IPv4 IP des Tunnel Brokers
[eigeneIPv4] 
die eigene IPv4 IP
[IPv6] 
die IPv6 IP, die vom Tunnel Broker gegeben wurde
[prefix] 
Größe des Prefixes, zumeist 127

Konkretes Beispiel:

#!/bin/sh
/sbin/iptunnel add tb mode sit local 1.2.3.4 remote 62.141.33.230 ttl 64
/sbin/ifconfig tb up
/sbin/ifconfig tb add 2001:618:11:1:1::1/127
/sbin/route -A inet6 add 2000::/3 dev tb

Der Tunnel kann ebenfalls über ping6 getestet werden.

Woher bekomme ich denn einen Adressraum?

Nun generell sollte man versuchen Adressraum aus seinem eigenen Land zu bekommen. Dies ist deswegen von Vorteil, da es die Aggregation beim Routing vereinfacht und das Internet so eine klare, übersichtliche Struktur bleibt.

Warum haben wir nun in diesem Howto mit einem Adressraum aus Groß Britannien gearbeitet? Nun, das hat den Grund das wir zu Testzwecken verschiedene BGP Sessions mit diversen IPv6 Knoten im Internet ueber IPv6-in-IPv4 unterhalten haben, und von dem Anbieter UK6X großzügigerweise einen sehr stabilen Adressraum zur Verfügung gestellt bekommen haben. Diesen nutzen wir nun schon eine ganze Weile und haben uns bisher nicht davon getrennt. Grundsätzlich sollte man bei Neuregistrierung dennoch deutschen IPv6 Space bevorzugen.

Sollte man nun ein lokales Netzwerk haben, was man allein administrieren kann, so reicht der Adressraum der einem bei den Providern auf dem IPv6 Portal angeboten wird vollkommen aus. Größere Allokationen bis /48 findet man auch bei Sixxs.

Allgemein ist IPv6 noch nicht so sehr herangereift, dass ein größerer Aufwand lohnt. Es befindet sich leider alles noch in der Testphase und wird auch nicht wirklich durch Telekom etc. weiter anvanciert.


Weblinks