IPv6/Adress/Typen
Adress-Typen
Wie bei IPv4 können IPv6-Adressen mittels Subnetzmasken (subnet masks) in einen Netz- und einen Host-Teil unterteilt werden.
Bei IPv4 hat sich gezeigt, dass es manchmal von Nutzen wäre, einem Interface mehr als eine IP-Adresse zuweisen zu können, je nach Bedarf und Zweck (aliases, multicast etc.). Um in Zukunft flexibler bleiben zu können, geht man bei IPv6 weiter und erlaubt pro Interface mehr als eine zugewiesene IP-Adresse. Derzeit sind durch die RFCs kein Limit gesetzt, wohl aber in der Implementierung des IPv6 Stacks (um DoS Attacken vorzubeugen).
Neben der großen Bit-Anzahl für Adressen definiert IPv6 basierend auf einigen vorangestellten Bits verschiedene Adress-Typen. Diese werden hoffentlich in der Zukunft niemals aufgehoben (zum Unterschied zu IPv4 heute und die Entwicklung der class A, B und C Netze).
Zur Unterstützung einer automatischen Konfiguration wird die Bitanzahl in einen Netzwerk-Teil (vordere 64 Bits) und einen Hostteil (hintere 64 Bits).
Adressen ohne speziellen Präfix
Localhost Adresse
Dies ist eine spezielle Adresse für das Loopback Interface, vergleichbar zur ”127.0.0.1” bei IPv4. Bei IPv6 lautet die localhost Adresse:
bzw. komprimiert:
Pakete mit dieser Quell- bzw. Ziel-Adresse sollten niemals den sendenden Host verlassen.
Unspezifische Adresse
Dies ist eine spezielle Adresse vergleichbar mit ”any” oder ”0.0.0.0” bei IPv4. In IPv6 lautet sie:
oder:
Diese Adresse wird meistens in Routing-Tabellen und beim ”socket binding” (zu jeder IPv6 Adresse) angewendet bzw. gesehen.
Beachten: Die Unspezifizierte Adresse kann nicht als Ziel-Adresse verwendet werden.
IPv6 Adressen mit eingebetteter IPv4 Adresse
Es gibt zwei Adressen-Typen, die IPv4 Adressen enthalten können.
IPv4 Adressen in IPv6 Format
IPv4-only IPv6-kompatible Adressen kommen manchmal bei IPv6 kompatiblen Daemon zur Anwendung, die allerdings ausschließlich an IPv4 Adressen gebunden sind.
Diese Adressen sind mit einer speziellen Präfixlänge von 96 definiert (a.b.c.d. ist die IPv4 Adresse):
oder in komprimiertem Format:
Die IPv4 Adresse 1.2.3.4. z.B. sieht wie folgt aus:
IPv4 kompatible IPv6 Adressen
Dieser Adress-Typ wurde für das automatische Tunneln (RFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers) verwendet, welches aber durch das 6to4 tunneling ersetzt wurde.
oder in komprimierter Form:
Netzteil der Adresse (Präfix)
Es wurden einige Adress-Typen definiert und zugleich blieb für zukünftige Anforderungen ausreichend Raum für weitere Definitionen. In RFC 4291 / IP Version 6 Addressing Architecture wird das aktuelle Adress-Schema definiert.
Lassen Sie uns nun einen Blick auf die verschiedenen Präfixe (und somit auf die Adress-Arten) werfen::
Link-lokaler Adress-Typ
Es handelt sich um spezielle Adressen, die ausschließlich auf einem Link eines Interfaces gültig sind. Wird diese Adresse als Zieladresse verwendet, so kann das Paket niemals einen Router passieren. Die Adresse wird bei der Link-Kommunikation eingesetzt, z.B.:
- Ist noch jemand anderer auf diesem Link?
- Ist jemand mit einer speziellen Adresse hier (z.B. Suche nach einem Router)?
Die Adresse beginnt mit (wobei ”x” für ein hexadezimales Zeichen steht, im Normalfall ”0”)
Eine Adresse mit diesem Präfix gibt es an jedem IPv6 fähigen Interface nach einer stateless automatischen Konfiguration (dies ist der Regelfall).
Site-lokaler Adress-Typ
Diese Adressen sind vergleichbar zu den RFC 1918 / Address Allocation for Private Internets im heutigen IPv4. Eine Neuerung und Vorteil hierbei ist, vergleichbar zum 10.0.0.0/8 im IPv4, die Nutzbarkeit von 16 bits bzw. ein Maximum von 65536 Subnetzen.
Ein weiterer Vorteil: Da man bei IPv6 mehr als eine Adresse an ein Interface binden kann, ist auch die Zuweisung einer site-local Adresse zusätzlich zu einer globalen Adresse möglich.
Die Adresse beginnt mit:
(”x” ist ein hexadezimales Zeichen, normalerweise ”0”)
Dieser Adresstyp ist nun abgekündigt RFC 3879 / Deprecating Site Local Addresses und sollte nicht mehr verwendet werden. Für Tests im Labor sind solche Adressen meineserachtens aber immer noch eine gute Wahl.
Unique Local IPv6 Unicast Adressen
Weil die schon früh definierten site-local Adressen nicht eindeutig sind, kann dies zu großen Problemen führen, wenn z.B. einst unabhängige Netzwerke später zusammengeschlossen werden (Überlappung von Subnetzen). Aufgrund dessen und anderer Gründe wurde ein neuer Adresstyp definiert, genant RFC 4193 / Unique Local IPv6 Unicast Addresses.
Die Adresse beginnt mit:
Ein Teil des Präfix (40 Bits) werden pseudozufällig generiert. Es ist sehr unwahrscheinlich, daß zwei generierte Präfixe identisch sind.
Ein Beispiel für einen Präfix (generiert mit Hilfe des web-basierten Werkzeugs: Goebel Consult / createLULA):
Globaler Adress-Typ ("Aggregatable global unicast")
Heute gibt es ist per Definition eine globale Adress-Art (Das erste Design, ''Provider based'' genannt, wurde bereits vor einigen Jahren wieder aufgegeben RFC 1884 / IP Version 6 Addressing Architecture [obsolete]. Einige Überbleibsel hiervon sind in älteren Linux Kernelquellen noch zu finden.
Die Adresse beginnt mit (x sind hexadezimale Zeichen)
Hinweis: Der Zusatz ”aggregatable” im Namen wird in aktuellen Drafts abgelegt. Es sind weitere Subarten definiert:
3.2.4.1. 6bone Test-Adressen
Diese globalen Adressen waren die Ersten definierten und auch benutzen Adressen. Sie alle beginnen mit:
Beispiel:
Eine spezielle 6bone Test-Adresse, die niemals weltweit einmalig ist, beginnt mit
und wird zumeist in alten Beispielen benutzt, um zu vermeiden, dass Anwender diese mit Copy & Paste in Ihre Konfigurationen übernehmen können. Auf diese Weise können Duplikate weltweit einmaliger Adressen aus Versehen bzw. Unachtsamkeit vermieden werden. Es würde für den Original-Host ernste Probleme bedeuten (z.B. Antwortpakete für niemals gesendete Anfragen bekommen...). Aufgrund dessen, daß IPv6 nun produktiv ist, wird dieser Präfix nicht mehr länger delegiert und nach dem 6.6.2006 vom Routing ausgenommen (mehr unter RFC 3701 / 6bone Phaseout ).
3.2.4.2. 6to4 Adressen
Diese Adressen werden für einen speziellen Tunnelmechanismus verwendet [RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds und RFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers]. Sie kodieren eine gegebene IPv4 Adresse, ein eventuelles Subnetz und beginnen mit
z.B. wird 192.168.1.1/5 repräsentiert durch:
Ein kleines Shell-Kommando kann aus einer IPv4 eine 6to4 Adresse erstellen:
Siehe auch tunneling using 6to4 und information about 6to4 relay routers.
Durch einen Provider zugewiesene Adressen für ein hierarchisches Routing
Diese Adressen werden an Internet Service Provider (ISP) delegiert und beginnen mit:
Präfixe für große ISPs (mit eigenem Backbone) werden durch local registries vergeben. Zurzeit wird ein Präfix mit der Länge 32 zugeteilt.
Grosse ISPs delegieren ihrerseits an kleinere ISPs ein Präfix mit der Länge 48.
Für Beispiele und Dokumentationen reservierte Adressen
Momentan sind zwei Adressbereiche für Beispiele und Dokumentationen RFC 3849 / IPv6 Address Prefix Reserved for Documentation reserviert:
Diese Adressbereiche sollten nicht geroutet werden und am Übergangsrouter zum Internet (basierend auf Absendeadressen) gefiltert werden.
Multicast-Addressen
Multicast-Adressen werden für entsprechende Dienste verwendet.
Sie beginnen immer mit (xx ist hierbei der Wert der Reichweite)
Die Adressen werden in Reichweiten und Typen unterteilt:
Multicast-Bereiche
Die Multicast Reichweite ist ein Parameter, mit dem die maximale Distanz angegeben werden kann, die ein Multicast Paket sich von der versendenden Einheit entfernen kann.
Zurzeit sind folgende Regionen (reichweiten) definiert:
- ffx1: Node-lokal, Pakete verlassen niemals den Knoten
- ffx2: Link-lokal, Pakete werden niemals von Routers weitergeleitet, der angegebene Link wird nie verlassen.
- ffx5: Site-lokal, Pakete verlassen niemals den Standort (Site)
- ffx8: organisationsweit, Pakete verlassen niemals eine Organisation (nicht einfach zu implementieren, dies muss durch das Routing Protokoll abgedeckt werden)
- ffxe: Globale Reichweite
- Sonstige sind reserviert
Multicast-Typen
Es sind bereits viele Typen definiert bzw. reserviert (siehe RFC 4291 / IP Version 6 Addressing Architecture für weitere Details), einige Beispiele:
- All Nodes Adresse: ID = 1h, alle Hosts am lokalen Node (ff01:0:0:0:0:0:0:1) oder am angeschlossenen Link (ff02:0:0:0:0:0:0:1) werden adressiert.
- All Routers Adresse: ID = 2h, alle Router am lokalen Node (ff01:0:0:0:0:0:0:2), am angeschlossenen Link (ff02:0:0:0:0:0:0:2) oder am lokalen Standort werden adressiert.
Erforderliche node link-local Multicast Adresse
Diese spezielle Multicast Adresse wird als Zieladresse bei der Erkundung des Nahbereichs verwendet, da es ARP bei IPv6 im Gegensatz zu IPv4 nicht mehr gibt.
Ein Beispiel für diese Adresse könnte sein:
Das benutzte Präfix zeigt, dass es sich um eine link-lokale Multicast Adresse handelt. Dass Suffix wird aus der Zieladresse erstellt. In diesem Beispiel soll ein Paket zur Adresse “fe80::1234” gesendet werden, aber die Netzwerk-Schicht hat keine Kenntnis der aktuellen Schicht 2 MAC Adresse. Die oberen 104 bits werde mit “ff02:0:0:0:01:ff00::/104” ersetzt und die unteres 24 bits bleiben unverändert. Diese Adresse wird nun ”am Link” verwendet, um den entsprechenden Node zu finden, der wiederum seine Schicht 2 MAC Adresse als Antwort zurücksendet.
Anycast-Adressen
Anycast Adressen sind spezielle Adressen und werden verwendet, um besondere Bereiche wie den nächstgelegenen DNS-Server, den nächstliegenden DHCP Server und vergleichbare dynamische Gruppen abzudecken. Die Adressen werden dem Pool des Unicast Adressraums (global-aggregierbar oder Site-lokal zurzeit) entnommen. Der Anycast-Mechanismus (client view) wird von dynamischen Routing-Protokollen gehandhabt.
Hinweis: Anycast Adressen können nicht als Quelladresse verwendet werden, sondern ausschließlich als Zieladressen.
Subnet-Router Anycast-Adresse
Die Subnet-Router Anycast Adresse ist ein einfaches Beispiel für eine Anycast Adresse. Angenommen, der Knoten hat folgende global zugewiesene IPv6 Adresse:
Die Subnet-Router Anycast Adresse wird durch komplette Streichung des Suffixes (die letzten gültigen 64 bits) erstellt:
Adress-Typen (Host-Teil)
In Hinblick auf Auto-Konfigurations- und Mobilitätsfragen wurde entschieden, die niedrigeren 64 bits als Host-Bestandteil zu nutzen. Jedes einzelne Subnetz kann deshalb eine große Anzahl an Adressen enthalten.
Der Host-Teil kann aus unterschiedlichen Blickwinkeln betrachtet werden:
Automatisch erstellte Adressen (auch unter dem Namen stateless bekannt)
Bei der Auto-Konfiguration wird der Hostteil der Adresse durch die Konvertierung der MAC-Adresse eines Interfaces (falls vorhanden) zu einer einmaligen IPv6 Adresse (mittels EUI-64 Methode) generiert. Falls keine MAC-Adresse verfügbar ist (z.B. bei virtuellen Interfaces), wird anstelle dessen etwas anderes herangezogen (wie z.B. die IPv4 Adresse oder die MAC-Adresse eines physikalischen Interfaces).
Als Beispiel hat hier ein NIC folgende MAC-Adresse (48 bit):
Diese wird gemäß demIEEE-Tutorial EUI-64 Design für EUI-48 Identifiers zum 64 bit Interface Identifier erweitert:
Mit einem gegebenen Präfix wird daraus die schon oben gezeigte IPv6-Adresse:
Datenschutzproblem mit automatisch erstellten Adressen sowie eine Lösung
Der "automatisch generierte" Hostteil ist weltweit einmalig (mit Ausnahme, wenn der Hersteller einer NIC die gleiche MAC-Adresse bei mehr als einer NIC einsetzt). Die Client-Verfolgung am Host wird dadurch möglich, solange kein Proxy verwendet wird.
Dies ist ein bekanntes Problem und eine Lösung wurde dafür definiert: Datenschutz-Erweiterung, definiert in RFC 3041 / Privacy Extensions for Stateless Address Autoconfiguration in IPv6 (es gibt bereits ein neueres Draft: draft-ietf-ipv6-privacy-addrs-v2-*). Es wird von Zeit zu Zeit mittels eines statischen und eines Zufallswertes ein neues Suffix erstellt. Hinweis: Dies ist nur für ausgehende Client-Verbindungen sinnvoll und bei bekannten Servern nicht wirklich sinnvoll.
Manuell festgelegte Adressen
Bei Servern ist es wahrscheinlich leichter, sich einfachere Adressen zu merken. Dies kann z.B. mit der Zuweisung einer zusätzlichen IPv6 Adresse an ein Interface geschehen.
Für das manuelle Suffix, wie ”::1” im obigen Beispiel, muss das siebte höchstwertige Bit auf 0 gesetzt sein (das universale/local Bit des automatisch generierten Identifiers). Es sind auch noch andere (ansonsten nichtausgewählte) Bit-Kombinationen für Anycast-Adressen reserviert.
Präfixlängen für das Routing
Um eine maximale Reduktion an Routing-Tabellen zu erzielen, war in der frühen Design-Phase noch ein vollkommen hierarchischer Routing-Ansatz vorgesehen. Die Überlegungen hinter diesem Ansatz waren die gegenwärtigen IPv4 Routing-Einträge in den Haupt-Routern (mit über 400.000 Einträgen im Jahr 2013) sowie die Reduktion des Speicherbedarfs für die Routing-Tabellen bei Hardware-Routern (ASIC ”Application Specified Integrated Circuit”, speziell konstuierter Chip) sowie ein daraus resultierender Geschwindigkeitszuwachs (weniger Einträge ergeben hoffentlich schnellere Abfragen).
Heutiger Standpunkt ist, dass das Routing für Netzwerke mit nur einem Service Provider hauptsächlich mit einem hierarchischen Design realisiert wird. Eine solche Vorgehensweise ist nicht möglich, wenn mehr als eine ISP-Verbindung besteht. Diese Problematik wird unter dem Thema multi-homing diskutiert (Infos zu multi-homing: drafts-ietf-multi6-*,IPv6 Multihoming Solutions).
Präfixlängen ("netmasks" genannt)
Vergleichbar zu IPv4, handelt es sich hierbei um den routbaren Netzwerkpfad für das stattfindende Routing. Da die Standard-Notierung der Netzmaske von 128 bit nicht sehr fein aussieht, verwenden die Designer das aus IPv4 bekannte Classless Inter Domain Routing Schema (CIDR, RFC 1519 / Classless Inter-Domain Routing). Mit Hilfe des CIDR wird die Bitanzahl der IP Adresse festgelegt, welche für das Routing verwendet werden. Diese Methode wird auch als "Slash"-Notation genannt.
Ein Beispiel:
Diese Notation wird erweitert zu:
- Netzwerk:
- Netzmaske:
Zutreffende Routen
Im Normalfall (ohne QoS) ergibt eine Suche in der Routing-Tabelle eine Route mit der signifikantesten Adress-Bit-Anzahl, d.h. jene Route mit der größten Präfix-Länge wird zuerst herangezogen.
Wenn z.B. eine Routing-Tabelle folgende Einträge zeigt (Liste ist nicht komplett):
Die gezeigten Zieladressen der IPv6 Pakete werden über die entsprechenden Geräte geroutet