====== IPv6 ======
Auf dieser Seite findet man grundsätzliche Informationen zu IPv6.
Quelle: [[https://www.elektronik-kompendium.de/sites/net/1902111.htm]]
===== Allgemeines =====
Vorteile von IPv6:
* längere Adressen und dadurch ein größerer Adressraum
* mehrere IPv6-Adressen pro Host mit unterschiedlichen Gültigkeitsbereichen (Scopes)
* Autokonfiguration der IPv6-Adressen möglich
* Multicast durch spezielle Adressen
* schnelleres Routing
* Quality of Service
* Datenpakete bis 4 GByte (Jumbograms)
===== IPv4/6 Adressen =====
**IPv6**
* 128 Bit lang
* 8 Blöcke zu jeweils 16 Bit
* 4 hexadezimal Zahlen pro Block
* durch ":" getrennte Blöcke
Beispiel:
hexadezimal: 2001:0db8:0000:0000:0001:0000:0000:0001/64
binär: 0010000000000001:0000110110111000:0000000000000000:0000000000000000:0000000000000001:0000000000000000:0000000000000000:0000000000000001
Netzwerk Prefix (64 Bit) Inferface Identifier (64 Bit)
/ \ / \
/ \ / \
/ \ / \
/ \ / \
2001 : 0db8 : 0000 : 0000 : 0001 : 0000 : 0000 : 0001
\ / \
\ / \
\ / \
\ / \
Netzwerk Prefix (56 Bit) Subnetz Prefix (8 Bit)
**IPv4**
* 32 Bit lang
* 4 Blöcke zu jeweils 8 Bit
* 1 dezimal Zahl pro Block
* durch "." getrennte Blöcke
Beispiel:
hexadezimal: 192.168.000.001/24
binär: 11000000.10101000.00000000.00000001
Subnetz Prefix (24 Bit) Inferface Identifier (8 Bit)
/ \ / \
/ \ / \
/ \ / \
/ \ / \
192 . 168 . 000 . 001
===== Arten von IPv6-Adressen =====
**Unicast** Adressen für ein einzelnes Interface.
**Anycast** Adressen für mehrere Interfaces, wobei nur eines davon das Paket empfängt.
**Multicast** Adressen für mehrere Interfaces, die alle das selbe Paket empfangen.
**Broadcast** existiert nicht und wird mit Multicast-Adressen realisiert.
===== Schreibweisen =====
Um die Schreibweise von IP-Adressen zu vereinfachen oder zur kürzen, lässt man führende Nullen in den Blöcken weg.
Das wird bei IPv4 und IPv6 gemacht, bei IPv6 gibt es noch folgende Regeln zur richtigen Schreibweise (in RFC 5952 zusammengefasst):
* alphabetische Zeichen (Buchstaben a-f) werden klein geschrieben
* führende Nullen eines Blocks werden weggelassen
* ein oder mehrere aufeinanderfolgende Nullerblöcke (Blöcke mit 4 Nullen) werden durch zwei Doppelpunkte ("::") gekürzt
* Kürzungen durch zwei Doppelpunkte ("::") dürfen nur einmal und bei der längsten Folge von Nullerblöcken durchgeführt werden; bei gleicher Länge, die erste von links.
Beispiel anhand einer voll ausgeschriebenen IPv6 Adresse:
2001 : 0db8 : 0000 : 0000 : 0001 : 0000 : 0000 : 0001
Welche Schreibweis ist richtig?
2001 : db8 : 0 : 0 : 1 : 0 : 0 : 1
2001 : 0db8 : 0000 : 000 : 1 : 00 : 0 : 1
2001 : db8 : : 0 : 1 : 0 : 0 : 1
2001 : db8 : 0 : 0 : 1 : : 1
2001 : DB8 : 0 : 0 : 1 : : 1
2001 : db8 : : 1 : 0 : 0 : 1
Die einzige korrekte Schreibweise nach den o.g. Notationsregeln ist die letzte.
Weiteres Beispiel:
die Adresse: 2001 : 0000 : 0000 : 0000 : 0001 : 0000 : 0000 : 0001
wird gekürzt in: 2001 : : 1 : 0 : 0 : 1
**Schreibweise in URLs**
In URLs werden Doppelpunkte ":" für eigene Trennzeichnungen verwendet.
Die IPv6 Adresse wird durch eckige Klammern "[]" zusammengefasst.
Beispiel:
* "http://[2001 : : 1 : 0 : 0 : 1]:80/"
* "https://[2001 : : 1 : 0 : 0 : 1]:443/"
**Schreibweise in UNC**
UNC-Pfade dürfen nach der Definition von Microsoft keine Doppelpunkte enthalten.
Die IPv6 Adresse wird durch Bindestriche "-" getrennt und mit dem Zusatz ".ipv6-literal.net" gekennzeichnet
Beispiel:
* IPv6 Adresse: "2001:db8::1:0:0:1"
* richtig angepasster UNC-Pfad: "\\2001-db8--1-0-0-1.ipv6-literal.net\share"
===== Scopes =====
Scopes sind Gültigkeitsbereiche für eine IPv6 Adresse. Somit hat ein Interface mehrere IPv6 Adressen, aber mindestens die Link-Local Adresse.
Folgende Scopes werden unterschieden:
* **Host-Scope**: "::1"
* **Link-Local-Scope**: "fe80::"
* **Unique-Local-Scope**: "fc..." unf "fd..."
* **Site-Local-Scope**: (veraltet)
* **Global-Scope**: "2...", "3...", "4...", "5...", ...
* **Multicast-Scope**: "ff..."
Nur IPv6-Pakete mit einer Absenderadresse des Global-Scope werden außerhalb des lokalen Netzwerks geroutet.
==== Loopback Address (Host Scope) ====
Das ist die Localhost-Adresse.
* **v6**: "::1"
* **v4**: "127.0.0.1"
==== LLA - Link-Local Unicast Addresses (Link-Local-Scope) ====
Das ist die IPv6 Adresse eines Hosts im lokalen Netzwerk.
Die Adresse reicht nur bis zum nächsten Router und wird nur innerhalb des Netzwerksegments benötigt.
Jedes Interface mus eine Link-Local Adresse haben, da es bei ipv6 kein Broadcast mehr gibt.
Hinter dem Link-Local-Scope stecken Mechanismen wie Neighbor Discovery, dass das Address Resolution Protocol (ARP) ablöst oder die Stateless Address Autoconfiguration (SLAAC) als Alternative zu DHCP.
* **v6**: "fe80::/64"
* **v4**: "169.254.0.0/16"
Der Link-Local-Scope bezeichnet nicht ein lokales Netzwerk (LAN).
In einem LAN kann es auch mehrere Link-Local-Scopes geben, wenn z.B. ein IPv6 Router ein LAN in mehrere Link-Local-Scopes unterteilt.
Hat man, wie Zuhause, ein Netzwerk mit einem Router, so entspricht dies einem LAN so auch einem Link-Local-Scope.
Besteht das LAN aus mehreren lokalen Netzwerken kann es mehrere Link-Local-Scopes geben.
Diese Netzwerke reichen nur bis zur entsprechenden "link-lokalen" Netzgrenze.
Der Router leitet link-lokale Datenpakete nicht darüber hinaus weiter.
==== ULA - Unique Local IPv6 Unicast Addresses (RFC 4193) ====
Das sind reservierte Adressbereiche (Unique Local Adressses, ULA) für lokale Netze unter ipv6, ahnlich wie private Adressbereiche unter ipv4.
Um mit diesen Adressen global kommunizieren zu können benötigt man NAT66.
NAT erzeugt, bevor ein Datenpaket ins Internet geroutet wird, im Datenpaket eine globale IPv6-Absender-Adresse.
ULA sollte man nicht verwenden.
* **v6**: zwischen "fc00..." und "fdff..."
* **fc**: unique local (zentral verwaltet): Diese Adressen werden vom Provider vergeben
* **fd**: unique local (lokal verwaltet): Diese Adressen können im eigenen lokalen Netzwerk verwendet werden
==== Site-Local Address (Site-Local-Scope) ====
Mit diesem Scope lassen sich private Netze unter ipv6 nachbilden.
Ähnlich wie lokale Unicast-Adressen und nur in der aktuellen Site (ein großes Netzwerk, dass über den Link-Local-Scope hinausgeht) gültig.
IPv6-Pakete werden von Routern nicht geroutet.
Der Site-Local-Scope gilt als veraltetet.
* **v6**: "fec0"
==== Global Address (Global-Scope) ====
Das sind global routbare IPv6 Adressen.
IPv6-Adressen werden per Autokonfiguration (z.B. per "SLAAC" oder "SFAAC") bezogen.
==== Multicast Address (Multicast Scopes) ====
Hierbei handelt es sich um Multicastgruppen, welche Netzwerkdienste wie Router, Zeitserver oder andere Dienste zusammenfassen.
Diese Gruppen sind über eigene Adressen erreichbar.
Wird diese Gruppe per Multicast angesprochen, werden alle, in einer Gruppe zugewiesenen, Hosts angesprochen.
===== IPv6 Adresse erstellen =====
Eine IPv6-Adresse besteht aus dem Netwerk Prefix (Präfix oder Netz-ID) und dem Interface Identifier (Suffix, IID oder EUI).
Der Netzwerk Prefix beschreibt das Netz, also Subnetz bzw. Adressbereich, während der Interface Identifier einen Host in diesem Netz beschreibt.
Der Interface Identifier wird mit Hilfe der 48-Bit langen MAC-Adresse des Interfaces gebildet und in eine 64-Bit-Adresse umgewandelt (Modified-EUI-64-Format).
Auf diese Weise ist das Interface unabhängig vom Netzwerk Prefix eindeutig identifizierbar.
Es gibt 2 Methoden zum automatischen Erstellen einer Link-Local-Scope IPv6 Adresse für ein Interface:
* SLAAC mit EUI-64 (Extended Unique Identifier 64-bit) - (veraltet -> unsicher, da MAC-Adresse in IPv6 Adresse dargestellt wird)
* SLAAC mit Privacy Extensions – (aktuell -> hängt von Informationen externer Quellen ab)
==== EUI-64 ====
Vorgehensweise:
- erste 8 Bit der MAC-Adresse in dezimal umrechnen und 7. Bit von links wechseln (aus "0" wird "1" und umgekehrt)
- MAC-Adresse in IPv6 Schreibweise zusammenfassen
- Adresse auf 64 Bit auffüllen, indem man in der Mitte nach dem 24. Bit "fffe" (steht für UTF16LE -> Little-Endian) hinzufügt
- Adresse auf 128 Bit auffüllen, indem man am Anfang ""fe80::" hinzufügt
Beispiel:
MAC-Adresse des Interfaces: 1c:1b:b5:00:0a:28
- 7te Bit (Universal/Local Bit ) wechseln \\ aus "1c" ("00011100") -> wird "1e" ("00011110")
- neue MAC-Adresse zusammenfassen \\ "1e:1b:b5:00:0a:28" -> "1e1b:b500:0a28"
- "fffe" (1111 1111 1111 1110) hinzufügen -> "1e1b:b5ff:fe00:0a28"
- IPv6 Link-Local-Scope Prefix hinzufügen -> "fe80::1e1b:b5ff:fe00:a28"
Die vollständig ausgeschriebene IPv6 Adresse inkl. IPv6 Subnetz lautet "fe80:0000:0000:0000:1e1b:b5ff:fe00:0a28/64".
==== Privacy Extensions ====
Hierbei wird der Interface Identifier durch einen, vom Host, erstellten Hash-Wert ermittelt.
Dieser wird periodisch gewechselt und die Anonymität, im Gegensatz zu **EUI-64** wieder hergestellt.
Der Hash-Wert wird wie folgt erstellt:
- zum aktuellen NTP-Zeitstempel in 64 Bit kommt die MAC-Adresse hinzu
- aus diesem Wert macht man einen SHA1-Hash mit einer Länge von 64 Bit
- neuen Interface Identifier hinter den globalen Präfix hinzufügen
Die temporäre globale IPv6 Adresse bleibt solange aktiv, wie sie benutzt wird.
Danach wird eine Neue verwendet und die Alte als veraltet gekennzeichnet.
Alle neuen Verbindungen verwenden die neue Adresse, während alle bestehenden Verbindungen die Alte verwenden.
Gibt es keine Verbindungen über die alte Adresse mehr, oder wird der Host neugestartet, wird die alte Adresse glöscht.
Privacy Extensions ist nur dann aktiv, wenn ein Host einen globalen Präfix (Global Scope) zugewiesen bekommen hat.
Erst dann wird ein zufälliger Interface Identifier gebildet.
Andere Verfahren erzeugen Cryptographically Generated Addresses (CGAs)
==== SLAAC und DHCPv6 (SFAAC) ====
**SLAAC - Stateless Address Autoconfiguration**
* Weiterentwicklung von Verfahren für die klassische IP-Autokonfiguration unter IP4
* mit "stateless" bzw. "zustandslos" ist gemeint, dass die jeweilige IPv6-Adresse nicht zentral vergeben und gespeichert wird; der Host erstellt sich seine IPv6-Adresse unter Zuhilfenahme zusätzlicher Informationen selbst
* ein ipv6 host kann sich eine link-lokale als auch eine link-globale adresse erzeugen
Die link-lokale Adresse wird wie oben beschrieben mit Hilfe des Interface Ientifiers gebildet.
Bevor der Host sich die Adresse zuweist, prüft er mittels Duplicate Address Detection (DAD), ob sich die Adresse bereits im Netzwerk befindet.
Dazu fragt er die adresse im Netzwerk wie folgt ab:
- **Neighbor Solicitation**: Dazu schickt der Host eine Anfrage an die generierte Adresse ins lokale Netz. Als Antwort-Adresse dient eine Multicast-Adresse.
- **Neighbor Advertisement**: Falls eine andere Station die IPv6-Adresse bereits nutzt, kommt eine Antwort zurück. Der Anwender muss manuell eingreifen (ist bei den großen IPv6 Adressräumen eher unwahrscheinlich).
Der Host kann mit der Link-Local Adresse nur im lokalen Netzwerk kommunizieren.
Damit der Host auch ins Internet kommunizieren kann, wird die Link-Global Adresse benötigt. Auch die wird selbständig generiert.
Der Host fragt dazu am Standardgateway (der nächste Router) nach dem Präfix des globalen Adressbereiches.
Ein Router gibt diesen Präfix in regelmäßigen Anständen per "Router Advertisement" bekannt.
Falls der Host diesen noch nicht erhalten hat, fragt er den Präfix per "Solicitation Message" vom Router ab.
Als Antwort sendet der Router ein oder mehrere Router Advertisements zurück.
Vorgehensweise bei SLAAC:
- **Router Solicitation (Solicitation Message)**: Mit seiner Link-Local IPv6 Adresse bittet der Host auf der Multicast-Adresse "ff02::2" um den globalen Präfix (optional).
- **Router Advertisement (Advertisement Message)**: Der Router schickt daraufhin eine Nachricht mit dem globalen Präfix für dieses Netzwerk, der MTU (Größe der IP-Pakete) und dem Flag "autonomous" zurück.
Aus dem, im Router Advertisement enthaltenen, Präfix für den globalen Adressbereich und dem Interface Identifier der link-lokalen Adresse wird die globale ipv6 Adresse gebildet.
Diese wird erneut per DAD geprüft und erst dann verwendet.
**DHCPv6 - Stateful Address Autoconfiguration**
Hierbei erhält der Host vom DHCP Server einen Teil der link-globale Adresse.
Der DHCP Server speichert sich die Adresse des Hosts zentral im Netzwerk ab und dient als Auskunftstelle.
Vorgehensweise bei DHCPv6:
- Der Host generiert sich eine link-lokale Adresse selber (gültig bis zum nächsten Router).
- Der Host empfängt ein Router Advertisement mit dem Flag „managed“.
- Der Host durchläuft die Kommunikation mit dem DHCPv6-Server und erhält von ihm eine vollständige IPv6-Konfiguration (mit globaler Adresse, DNS-Server und weiteren netzspezifischen Adressen und Parameter).
Detaillierte Vorgehensweise:
- Der Host sendet eine Router Solicitation (RS) an die Multicast-Adresse "ff02::2". Damit bittet der Host um einen Präfix für die globale IPv6-Adresse.
- Der zuständige Router antwortet mit einem Router Advertisement (RA). Die Nachricht enthält die MTU und den globalen Präfix für das Netzwerk (stateless) oder das Flag "managed" (stateful).
- Dann sendet der Client eine DHCP-Solicitation-Nachricht an die DHCPv6-Multicast-Adresse "ff02::1:2" (alle DHCPv6-Server).
- Die erreichbaren DHCPv6-Server antworten mit einer DHCP-Advertisement-Nachricht, die die Parameter (DNS-Server, NTP-Server etc.) zur Vervollständigung der IP-Konfiguration enthält (bei stateful auch den globalen Präfix).
- Der Client wählt eine IP-Konfiguration aus und fordert sie beim jeweiligen DHCPv6-Server mit einem DHCPv6-Request explizit an.
- Der DHCPv6-Server speichert die IP-Konfiguration mit der Client-ID (Stateful Address Configuration) und bestätigt dem Client die IP-Konfiguration per DHCPv6-Reply. Alle anderen DHCPv6-Server, die keine Anforderung des Clients erhalten haben, geben ihre angebotene IPv6-Adresse wieder frei.