22.5 IPv6
IPv6 ist das offizielle Nachfolgeprotokoll von IPv4. Irgendwann soll es IPv4 gänzlich ablösen. Der Grund dafür ist recht simpel: IP-Adressknappheit. IPv4-Adressen haben eine Länge von 32 Bit, das heißt, theoretisch stehen 232 Adressen zur Verfügung. Von diesen ca. 4 Milliarden Adressen stehen aber nicht alle zur Nutzung zur Verfügung. Von den 256 möglichen /8-Netzen sind allein 35 Netze für spezielle Nutzungszwecke reserviert. Beispielsweise 127.0.0.0/8 für Loopback-Adressen, 10.0.0.0/8 für private Nutzung oder 224.0.0.0/8 für Multicast-Adressen (siehe Tabelle 22.2).
IP-Bereich | Verwendung |
---|---|
10.0.0.0/8 | private Netzwerkadresse RFC1918 |
127.0.0.0/8 | Loopback (localhost) |
169.254.0.0/16 | link local (APIPA) |
172.16.0.0/12 | private Netzwerkadresse RFC1918 |
192.0.2.0/24 | Test und Dokumentation |
192.168.0.0/16 | private Netzwerkadresse RFC1918 |
224.0.0.0/4 | Multicast-Adressen |
240.0.0.0/4 | experimentelle Adressen |
Tabelle 22.2 Liste der reservierten IPv4-Bereiche
Zu allem Übel fehlen darüber hinaus noch mal 40 /8-Netze, die in den Anfangstagen, als der Erfolg des Internets noch nicht absehbar war, großzügig an einzelne Firmen oder Organisationen vergeben wurden. Von den verbleibenden 181 /8-Netzen sind aktuell nur noch wenige nicht vergeben – es wird geschätzt, dass mehr als 95 % der Adressen verbraucht sind. Die Adressen werden von der Internet Assigned Numbers Authority (IANA) verwaltet und an Regional Internet Registries (RIR) vergeben. Davon gibt es fünf weltweit. Das RIPE NCC[ 36 ] ist beispielsweise die RIR für Europa, Zentralasien und den Nahen Osten.
Die RIRs wiederum verteilen IP-Adressen an Local Internet Registries (LIR). Erst von den LIRs werden IP-Adressen dann an Endkunden vergeben.
Zwischenzeiltich wurde damit gerechnet, dass die IP-Adressen ausgehen würden. So rechnete das RIPE NCC vor[ 37 ], dass die letzten Adressen für Europa im August 2012 vergeben würden. Wie wir alle wissen, ist dies nicht eingetroffen.
Die ergriffenen Maßnahmen haben die Situation etwas entspannt: Zum einen wurde eine Umverteilung der vergebenen Netze vorgenommen, und zum anderen haben viele Provider begonnen, die IPv6-Einführung deutlich zu beschleunigen. Daher sind immer noch (wenn auch sehr wenige) IPv4-Adressen verfügbar.
Es gibt also keinen Grund, in Panik zu verfallen. Aber Sie sollten sich langsam mit dem Gedanken anfreunden, dass IPv6 auch zu Ihnen kommen wird und Sie Ihr Netzwerk dementsprechend anpassen müssen.
Durch die Verwendung von NAT auch aufseiten der Provider wird die Knappheit etwas gemildert, aber da die IPv4-Adressen auch immer teurer werden, lohnt sich die Umstellung schon allein aus Kostengründen ab einem bestimmten Zeitpunkt.
22.5.1 Die Vorteile von IPv6
Einer der Hauptvorteile von IPv6 ist die Vergrößerung des IP-Adressraums: Der Adressraum bei IPv6 beträgt 128 Bit. Die minimale Netzgröße, die an Endkunden herausgegeben werden soll, ist ein /64-Netz. Ein einzelner Endkunde bekommt also mehr eigene IP-Adressen, als in IPv4 insgesamt zur Verfügung stehen. Damit ist dann auch wieder das Ende-zu-Ende-Prinzip erfüllt, das heißt, jeder Host ist im Internet garantiert direkt ansprechbar. Zurzeit ist das aufgrund der IP-Adressknappheit leider nicht möglich. Ohne Network Address Translation (NAT) wäre es jetzt schon undenkbar, mit mehr als einem Gerät von zu Hause aus in das Internet zu gehen. NAT ist aber nur eine Notlösung, und einige Protokolle können nicht vernünftig damit arbeiten, sodass es immer wieder zu Problemen kommt.
Was heißt das eigentlich in Zahlen? Wie viele IPv6-Adressen gibt es denn nun? Deshalb hier einmal ein kleines Zahlenspiel: IPv6-Adressen bestehen aus 128 Bit; das sind dann also 2128 mögliche Hostadressen. Als Zahl sieht das so aus: 2128 = 340.282.366.920.938.463.463.374.607. 431.768.211.456 mögliche Adressen. Das entspricht ungefähr 665 Milliarden IPv6-Adressen pro Quadratmillimeter der Erdoberfläche: Da ist auch bestimmt für Ihre Kaffeemaschine im Büro noch eine IP-Adresse frei. Natürlich gibt es auch bei IPv6 wieder reservierte Bereiche, sodass die Zahl etwas kleiner wird, aber die Menge sollte immer noch ausreichend für zukünftige Techniken sein.
22.5.2 Notation von IPv6-Adressen
Der gigantische Adressraum von IPv6 hat leider auch Nachteile. Mit einer Länge von 128 Bit sind IPv6-Adressen nicht gerade einprägsam, und man ist mehr als zuvor auf die Hilfe von DNS angewiesen. In Abschnitt 22.8, »DNS-Server«, beschreiben wir die Konfiguration eines IPv6-DNS-Servers.
IPv6-Adressen werden im Gegensatz zu IPv4-Adressen hexadezimal dargestellt. Jede IPv6-Adresse besteht aus acht Blöcken zu jeweils 16 Bit. Einzelne Blöcke werden durch einen Doppelpunkt getrennt. Eine gültige IP-Adresse sieht also folgendermaßen aus:
2001:0db8:0000:0000:0342:abff:fe22:1d63
Listing 22.56 Beispiel für eine gültige IPv6-Adresse
Führende Nullen innerhalb eines Blocks dürfen ausgelassen werden:
2001:db8:0:0:342:abff:fe22:1d63
Listing 22.57 Das Beispiel ohne führende Nullen
Wenn ein oder mehrere Blöcke nur aus Nullen bestehen, so kann man sie durch einen Doppelpunkt ersetzen. Das darf jedoch nur an einer Stelle passieren, weil die Adresse sonst nicht eindeutig ist:
2001:db8::342:abff:fe22:1d63
Listing 22.58 Gekürzte Schreibweise der IPv6-Adresse
Die Adresse für localhost lautet so:
0000:0000:0000:0000:0000:0000:0000:0001
Listing 22.59 Die IPv6-Adresse des »localhost«
In der Kurzschreibweise wird daraus:
::1
Listing 22.60 Die Kurzschreibweise der »localhost«-Adresse
22.5.3 Die Netzmasken
Wie IPv4-Adressen bestehen auch IPv6-Adressen aus einem Netzanteil und einem Hostanteil. In der IPv6-Welt spricht man von dem Network Prefix und dem Interface Identifier. Die Darstellung erfolgt im Classless Inter-Domain Routing-(CIDR-)Format. Der Interface Identifier ist mindestens 64 Bit lang.
Kleinere Netze sollten nicht vergeben werden. Die restlichen 64 Bit bilden das Network Prefix. Dieses kann aber nach altbekannter Manier in weitere Subnetze aufgeteilt werden (siehe Tabelle 22.3).
Network Prefix | Subnet Identifier | Interface Identifier |
---|---|---|
48 Bit | 16 Bit | 64 Bit |
2001:0db8:0000 | 0000 | 0342:abff:fe22:1d63 |
Tabelle 22.3 Aufbau der Netzmaske
22.5.4 Die verschiedenen IPv6-Adressarten
Für IPv6 gibt es verschiedene Arten von Adressierungen:
-
Unicast
Unicast-Adressen adressieren genau einen Host, wie Sie das schon von IPv4 her kennen. Es gibt hier aber noch eine weitere Unterscheidung:-
global
Die global-Adresse dient zur eindeutigen Identifizierung eines Hosts im Netzwerk und wird auch über Router hinweg erreichbar sein. Eine global-Unicast-Adresse beginnt immer mit dem Binär-Präfix 001. Als Beispiel sei hier die 2000::/3 genannt. -
link-local
Die link-local-Adresse darf nur im lokalen Netz verwendet werden und darf nicht geroutet werden. Diese Adresse dient zur Autokonfiguration einer global-Adresse in Zusammenarbeit mit dem Neighbor Discovery. Mit dieser Adresse können Sie ein temporäres Netzwerk einrichten, wenn Sie zum Beispiel nur kurz Rechner miteinander verbinden müssen, um Daten auszutauschen. Die link-local-Adressen beginnen immer mit dem Präfix FE80::8. Ein Beispiel dazu sehen Sie in Listing 22.61:eth0 Link encap:Ethernet Hardware Adresse 00:1d:92:7d:26:a0
inet Adresse:192.168.123.2 Bcast:192.168.123.255\
Maske:255.255.255.0
inet6-Adresse: fe80::21d:92ff:fe7d:26a0/64\
Gültigkeitsbereich:VerbindungListing 22.61 Beispiel für eine »link-local«-Adresse
-
unique local
Bei IPv4 gibt es in den verschiedenen Netzklassen die privaten Adressbereiche, die Sie für Ihre Netzwerke verwenden und die im Internet nicht geroutet werden. Eine ähnliche Adresse gibt es bei IPv6 auch. Das ist die unique local-Adresse. Hier werden wieder zwei verschiedene Adressbereiche unterschieden:-
zentral verwaltet
Diese Adressen werden vom Provider vergeben. Das Präfix für diese Adressen lautet FC00::/7. -
lokal verwaltet
Diesen Bereich können Sie in Ihrem eigenen Netzwerk selbst einteilen. Das Präfix für diese Adressen lautet FD80::/8.
-
-
-
Anycast
Anycast-Adressen können Sie immer dann verwenden, wenn bei Ihnen im Netzwerk mehrere Router oder Server denselben Dienst bereitstellen sollen. Dabei wird auf jedem Server oder Router ein Interface mit derselben IP-Adresse belegt. Wenn dann ein Client eine Anfrage stellt, kann diese von einem beliebigen Rechner angenommen werden. Sie müssen dabei nur beachten, dass der Absender keine Kontrolle darüber hat, an welches der Systeme die Anfrage gestellt wird. Die Entscheidung trifft das Routing-Protokoll. -
Multicast
Hinter einer Multicast-Adresse können sich ganze Gruppen von IPv6-Adressen verbergen. Genau wie bei IPv4 wird auch bei IPv6 ein Datenpaket, das an eine Multicast-Adresse gesendet wird, von allen Gruppenmitgliedern empfangen und verarbeitet. Eine Multicast-Adresse beginnt immer mit dem Hexadezimalwert 0xFF. Es gibt eine Liste aller schon fest zugewiesenen Multicast-Adressen. Diese Liste finden Sie unter www.iana.org/assignments/ipv6-multicast-addresses.
Hier folgen drei Regeln zur Einrichtung eines IPv6-Hosts:
-
Eine Netzwerkkarte hat immer eine link-local-Adresse.
-
Einer Netzwerkkarte können Sie immer mehrere globale Adressen zuweisen.
-
Eine Netzwerkkarte kann zu mehreren Multicast-Gruppen gehören, mindestens aber zu einer. Im Fall eines einfachen Hosts ist es die Multicast-Gruppe FF01::1, im Fall, dass es sich um einen Router handelt, die Multicast-Gruppe FF01::2.
[+] Keine Broadcast-Adressen mehr bei IPv6!
Broadcast-Adressen, wie Sie sie von IPv4 her kennen, gibt es bei IPv6 nicht mehr. Diese wurden von den Multicast-Adressen abgelöst.
In Tabelle 22.4 sehen Sie eine kurze Zusammenfassung der reservierten Präfixe.
Präfix | Verwendung |
---|---|
::1 | localhost |
FE80::/10 | link-local |
FF00::8 | multicast |
FF01::1 | multicast an alle Hosts |
FF02::2 | multicast an alle Router |
FC00::/8 | unique local address (zentral vergeben) |
Fd00::/8 | unique local address (kann privat verwendet werden) |
2000::/3 | global unicast address |
2001:db8::32 | Präfix für Dokumentationen |
Tabelle 22.4 Liste der IPv6-Präfixe
22.5.5 Es geht auch ohne »ARP«
Unter IPv4 ist das Protokoll ARP eine der größten Sicherheitslücken. Unter IPv6 findet das Protokoll ARP keine Verwendung mehr. An dessen Stelle tritt Neighbor Discovery (ND). Neighbor Discovery ist ein Bestandteil des ICMP-Protokolls unter IPv6 und hat dort mehr Aufgaben, als nur die MAC-Adresse zur IP-Adresse aufzulösen, so wie es ARP unter IPv4 macht. Ein IPv6-Host kann Neighbor Discovery für folgende Aufgaben verwenden:
-
Für die automatische Konfiguration der IPv6-Adressen
Ein IPv6-Host kann sich selbst eine link-local-Adresse geben, um sich automatisch von einem Router eine verfügbare Adresse aus dem lokalen Adressraum zu holen. Über diesen Weg kommt der Host zwar nicht an DNS-Server oder Domainnamen, aber zumindest ist er am Netz. -
Zur Ermittlung des Standardgateways und des Netzwerkpräfixes
Durch die automatische Ermittlung des Standardgateways kann ein Host sofort in einem Netzwerk erreicht werden. Auch kann der Host verschiedene Präfixe erhalten und damit auch mehrere IPv6-Adressen beziehen. -
Doppelte IP-Adressen können ermittelt werden
Über den ICMP-Typ Duplicate Address Detection (DAD) wird ermittelt, ob die IP-Adresse, die automatisch vom Router kommt, schon vergeben ist. -
Zur Ermittlung der MAC-Adressen aller Hosts im selben Netz
Besitzt ein Host mehrere Netzwerkkarten mit unterschiedlichen Präfixen, werden für jede Netzwerkkarte die MAC-Adressen in diesem Präfix ermittelt. -
Zur Suche der Router an derselben Netzwerkschnittstelle
Über Neighbor Discovery wird die automatische Konfiguration durchgeführt. Dieses geschieht immer über einen Router. Bevor die automatische Konfiguration durchgeführt werden kann, wird über Neighbor Discovery der entsprechende Router gesucht. -
Aktualisierung der Router an der Schnittstelle
Sollte sich ein Router im Netz ändern, kann diese Information automatisch in die Konfiguration übernommen werden. -
Einsatz zur Ermittlung von erreichbaren und nicht erreichbaren Hosts
Jeder Host pflegt eine Liste seiner Nachbarn im Neighbor Cache. Diese Liste ist in etwa vergleichbar mit der ARP-Table unter IPv4. In dieser Liste wird gespeichert, ob es sich um einen normalen Host oder um einen Router handelt. Hier wird auch gespeichert, ob ein Host erreichbar ist oder nicht. Es wird ebenfalls gespeichert, wann der nächste Test auf Erreichbarkeit stattfinden muss.
22.5.6 Feste Header-Länge
Die Kopfdatenlänge eines IPv6-Pakets beträgt immer genau 40 Byte. IPv4 hingegen arbeitet mit einer variablen Header-Länge. Eine feste Länge hat für Router den Vorteil, dass die Verarbeitung weniger rechenintensiv ist. Listing 22.62 zeigt den Aufbau des IPv6-Headers:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Source Address +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Destination Address +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Listing 22.62 Aufbau des IPv6-Headers
Die einzelnen Felder haben dabei folgende Bedeutungen:
-
Version
gibt die IP-Version in 4 Bit an, hier also die 6. -
Traffic Class
ein 8 Bit langes Feld, das dem Type of Service-Feld im IPv4-Header entspricht. Mithilfe dieses Feldes ist es einfacher, Realtime-Daten zu priorisieren. -
Flow Label
ein 20 Bit langes Feld, mit dem die Zusammengehörigkeit verschiedener Pakete gekennzeichnet werden kann. Alle Pakete mit demselben Wert werden vom Router gleich behandelt. Das erleichtert und beschleunigt die Weiterleitung von priorisierten Daten wie Audio- oder Videodaten. Wichtig ist nur, dass alle Pakete eines Flows dieselbe Sender- und Empfängeradresse haben. -
Payload Length
Das Feld hat eine Länge von 16 Bit und gibt die Menge an Daten an, die sich im IPv6-Paket befinden. -
Next Header
Dieses Feld hat eine Länge von 16 Bit und entspricht dem Protocol Type-Feld im IPv4-Header. Bei IPv6 kann dieses Feld auf einen nächsten Protokoll-Header zeigen oder auf einen Extension-Header. In Extension-Headern werden zusätzliche Funktionen wie Fragmentierung, Routing-Informationen oder Authentifizierungen gesendet. -
Hop Limit
Dies ist ein 8 Bit langes Feld, das dem TTL im IPv4-Header entspricht. Genau wie bei IPv4 reduziert jeder Router den Wert um 1; wenn der Wert bei 0 angekommen ist, wird der Router das Paket verwerfen und dem Absender eine Nachricht schicken. -
Source Address
die 128 Bit lange Senderadresse -
Destination Address
die 128 Bit lange Empfängeradresse
Multihoming
Mit IPv6 ist es ohne größere Probleme möglich, mit einem Netz an mehrere Provider angebunden zu sein. Das vereinfacht das Umziehen von Netzen und kann genutzt werden, um eine erhöhte Ausfallsicherheit zu erreichen. Der Interface Identifier muss im sogenannten Modified EUI-64-Format vorliegen. Im Wesentlichen bedeutet das, dass bei Ethernet aus der 48-Bit-MAC-Adresse eine 64-Bit-Adresse generiert wird. Der Vorteil dieses Verfahrens ist auch gleichzeitig der Nachteil und einer der größten Kritikpunkte an IPv6. Ein so generierter Interface Identifier ist aufgrund der MAC-Adresse nämlich weltweit einzigartig. Ein Endgerät ist also auch völlig unabhängig von dem Network Prefix eindeutig identifizierbar. Aus diesem Grund wurde der Standard später um die Privacy Extension für automatische Konfigurationen ergänzt. Die Privacy Extension sorgt dafür, dass der Interface Identifier zufällig generiert und regelmäßig erneuert wird. Das Verhalten muss jedoch zunächst im proc-Dateisystem aktiviert werden. Näheres finden Sie in Abschnitt 3.4, »Alles virtuell? ›/proc‹«.
root@saturn:~# echo 2 > /proc/sys/net/ipv6/conf/eth0/use_tempaddr
Listing 22.63 Aktivierung der »Privacy Extension«
Der Wert 0 steht für die Deaktivierung der Privacy Extension und ist die Standardeinstellung. Die Werte 1 oder 2 aktivieren die Erweiterung. Dabei sorgt 1 dafür, dass bevorzugt öffentliche Adressen verwendet werden, und die 2 besagt, dass eher temporäre Adressen genutzt werden sollen. Die Gültigkeitsdauer in Sekunden können Sie in der Datei /proc/sys/net/ipv6/conf/eth0/temp_valid_lft eintragen.
22.5.7 IPv6 in der Praxis
Es wäre sicherlich falsch, zu behaupten, dass IPv6 genau wie IPv4 funktioniert, aber zumindest aus Applikationssicht ist es nicht ganz unwahr. Sind die Dienste nämlich erst einmal konfiguriert, so ist kein großer Unterschied festzustellen. Viele Applikationen binden sich heute schon standardmäßig auf alle vorhandenen IPv6-Adressen, sodass nicht immer Konfigurationsanpassungen vorzunehmen sind (zum Beispiel bei ssh oder Webservern).
root@ubuntu:~# ssh 2a01:198:689::1
root@2a01:198:689::1's password:
[…]
root@ubuntu:~# telnet 2a01:198:689::1 80
Trying 2a01:198:689::1...
Connected to 2a01:198:689::1.
Escape character is '^]'.
GET /
<html><body><h1>It works!</h1>
[…]
Listing 22.64 »ssh« und Web mit »telnet"« über IPv6
Etwas anders sieht es aus, wenn Sie nur link-local-Adressen aus dem Netz fe80::/10 benutzen. Diese werden in der Regel durch die automatische Konfiguration auf das Interface gebunden. Die Art der Adresse können Sie nicht nur an dem Präfix erkennen, sondern auch, indem Sie sich den scope bei der Ausgabe von ip anschauen:
root@saturn:~# ip -f inet6 address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2a01:198:689::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::226:18ff:fe81:1d63/64 scope link
valid_lft forever preferred_lft forever
Listing 22.65 »link local«- und globale IPv6-Adresse auf »eth0«
Link-local-Adressen können mehrfach auf einem Gerät vergeben werden, daher müssen Sie angeben, über welches Interface die Anfrage gehen soll. Bei ssh geschieht das beispielsweise, indem Sie hinter der IP-Adresse %INTERFACENAME anhängen:
root@ubuntu:~# ssh fe80::226:18ff:fe81:1d63%eth0
root@fe80::226:18ff:fe81:1d63%eth0's password:
[…]
Listing 22.66 »ssh« über eine »link local«-Adresse
Zum Testen der Konnektivität können Sie übrigens ping6 nutzen:
root@saturn:~# ping6 -c 1 ipv6.test-ipv6.com
PING ipv6.test-ipv6.com(2001:470:1:18::119) 56 data bytes
64 bytes from 2001:470:1:18::119: icmp_seq=1 ttl=58 time=34.9 ms
--- ipv6.test-ipv6.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 34.965/34.965/34.965/0.000 ms
Listing 22.67 »ping« auf »google« per IPv6
Selbstverständlich sind nicht alle Dienste sofort für IPv6 nutzbar. Sie müssen in der jeweiligen Dokumentation nachlesen, was an welcher Stelle konfiguriert werden muss. In den meisten Fällen reicht es aber aus, dem Dienst einfach mitzuteilen, dass er vorhandene IPv6-Adressen nutzen soll.
[+] Bei einer Umstellung auf IPv6 sollten Sie unbedingt zunächst eine Firewall mit ip6tables konfigurieren und dann die entsprechenden Einträge im DNS anpassen. Mehr zu den Themen finden Sie in Abschnitt 22.6, »Firewalls mit ›netfilter‹ und ›iptables‹«, und Abschnitt 22.8, »DNS-Server«.