Zum Inhalt springen

Skript/Netzwerk/IPv6: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{| class="wikitable col3right"
'''Skript/Netzwerk/IPv6'''
|-
! Nr !! Themenfeld !! Gewichtung
|-
| 01 || [[IPv6/Einführung | Einführung]] ||
|-
| 02 || [[IPv6/Header | Header]] ||
|-
| 03 || [[IPv6/Adressierung | Adressierung]] ||
|-
| 04 || [[IPv6/ICMPv6 | ICMPv6]] ||
|-
| 05 || [[IPv6/ICMPv6 Fuktionen | ICMPv6 Fuktionen]] ||
|-
| 08 || [[IPv6/Mobile IP | Mobile IP]] ||
|-
| 09 || [[IPv6/Upper Layer Protokolle | Upper Layer Protokolle]] ||
|-
| 10 || [[IPv6/Übergang | Übergang]] ||
|-
| 11 || [[IPv6/Sicherheit | Sicherheit]] ||
|-
| 12 || [[IPv6/QoS | QoS]] ||
|-
| 13 || [[IPv6/Router | Router]] ||
|-
| 15 || [[IPv6/Migration | Migration]] ||
|-
| 16 || [[IPv6/Firewall | Firewall]] ||
|-
| 17 || [[IPv6/Tunnel | Tunnel]] ||
|-
| 18 || [[IPv6/Subnetting | Subnetting]] ||
|}


[[Kategorie:Skript]]
= Einführung =
{{:IPv6}}
= Header =
{{:IPv6/Header}}
= Adressierung =
{{:IPv6/Adressierung}}
 
----
 
{{:IPv6/Adressbereiche}}
 
= ICMPv6 =
{{:ICMPv6}}
 
----
 
{{:IPv6/ICMPv6 Fuktionen}}
 
= Upper Layer Protokolle =
{{:IPv6/Upper Layer Protokolle}}
 
= Sicherheit =
{{:IPv6/Sicherheit}}
 
= QoS =
{{:IPv6/QoS}}
 
= Router =
{{:IPv6/Router}}
 
= Migration =
{{:IPv6/Migration}}
 
= Firewall =
{{:IPv6/Firewall}}
 
= Tunnel =
{{:IPv6/Tunnel}}
 
= Subnetting =
{{:IPv6/Subnetting}}
<noinclude>
[[Kategorie:Skript/Netzwerk]]
 
__NICHT_INDEXIEREN__
</noinclude>

Aktuelle Version vom 2. März 2025, 10:49 Uhr

Skript/Netzwerk/IPv6

Einführung

IPv6 - Internetprotokoll Version 6

Beschreibung

DoD-Schicht Protokolle
Anwendung HTTP IMAP SMTP DNS
Transport TCP/UDP
Internet IP (IPv4, IPv6)
Netzzugang Ethernet Token Bus Token Ring FDDI

1998


Header

IPv6/Header

Beschreibung

Feste Länge

Anders als IPv4

  • 40 Byte (320 Bit)
  • inkl. 32 Byte für Absender- und Empfängeradresse

Header-Format

Header-Felder

Feld Länge (bit) Inhalt
Version 4 IP-Versionsnummer (6)
Traffic Class 8 Für Quality of Service (QoS) verwendeter Wert. Eine Art Prioritätsvergabe.
Flow Label 20 Ebenfalls für QoS oder Echtzeitanwendungen verwendeter Wert. Pakete, die dasselbe Flow Label tragen, werden gleich behandelt.
Payload Length 16 Länge des IPv6-Paketinhaltes (ohne Kopfdatenbereich, aber inklusive der Erweiterungs-Kopfdaten) in Byte
Next Header 8 Identifiziert den Typ des nächsten Kopfdatenbereiches, dieser kann entweder einen Erweiterungs-Kopfdatenbereich (siehe nächste Tabelle) oder ein Protokoll höherer Schicht (engl.: Upper Layer Protocol) bezeichnen, wie z. B. TCP (Typ 6) oder UDP (Typ 17).
Hop Limit 8 Maximale Anzahl an Zwischenschritten über Router, die ein Paket zurücklegen darf; wird beim Durchlaufen eines Routers ("Hops") um eins verringert. Pakete mit null als Hop Limit werden verworfen. Es entspricht dem Feld Time to Live (TTL) bei IPv4.
Source Address 128 Adresse des Senders
Destination Address 128 Adresse des Empfängers


Vereinfachung des Headers

Enthält nur grundlegende Forwarding-Information
  • Zusätzliche Informationen in variablen zusätzlichen Erweiterungs-Headern, welche durch das "Next Header" Feld identifiziert werden
  • Trotz vierfacher IPv6-Adresslänge (16 Byte) nur doppelte Headerlänge

IPv6 (Felder)

Byte/Bin 00-03 04-07 08-11 12-15 16-19 20-23 24-27 28-31
01 Version Traffic Class Flow Label H
e
a
d
e
r
02 Payload Length Next Header Hop Limit
03 - 06 Quell-IP-Adresse
07 - 10 Ziel-IP-Adresse
11+ Payload

IPv4 Header Felder

Option Beschreibung
Version always 4
TOS (type of service) precedence (3 bits) and "minimize delay", "maximize throughput", "maximize reliability", "minimize cost" bits
Identifier identifier, different for each packet
TTL time to live field; initialized to 64; decremented at each router; drop if TTL = 0
Protocol next header proto (TCP 6, UDP 17)
Header checksum add together 16-bit words using one’s complement: software optimized

Entfallene Felder

Option Beschreibung
HL IPv6Header eine feste Länge hat
Protocol Feld Next-Header angibt welches Protokoll auf der Transportschicht verwendet wird.
Felder zur
Fragmentierung
IPv6 Fragmentierung wird anders handhabt, IPv6-Router fragmentieren keine Pakete, sondern schicken der Quelle eine Nachricht kleinere Pakete zu schicken.
Checksum die Berechnung der Prüfsumme bei jedem Hop sich negativ auf die Performance auswirkt, auf den Schichten über und unter der Vermittlungsschicht werden bereits Prüfsummen berechnet
Padding

Header-Format

Feste Länge
  • Bei IPv6 eine feste Länge von 40 Byte (320 Bit)
  • Im Gegensatz zu IPv4
Extension Headers
  • Optionale, seltener benutzte Informationen werden in Erweiterungs-Kopfdaten (engl.: Extension Headers) eingebettet
  • zwischen IPv6-Kopfdatenbereich und der eigentlichen Nutzlast (Payload)

Kopfdaten

Feld Länge Inhalt
Version 4 Bit IP-Versionsnummer (6)
Traffic Class 8 Bit Für Quality of Service (QoS) verwendeter Wert. Eine Art Prioritätsvergabe.
Flow Label 20 Bit Ebenfalls für QoS oder Echtzeitanwendungen verwendeter Wert. Pakete, die dasselbe Flow Label tragen, werden gleich behandelt.
Payload Length 16 Bit Länge des IPv6-Paketinhaltes (ohne Kopfdatenbereich, aber inklusive der Erweiterungs-Kopfdaten) in Byte
Next Header 8 Bit Identifiziert den Typ des nächsten Kopfdatenbereiches, dieser kann entweder einen Erweiterungs-Kopfdatenbereich (siehe nächste Tabelle) oder ein Protokoll höherer Schicht (engl.: Upper Layer Protocol) bezeichnen, wie z. B. TCP (Typ 6) oder UDP (Typ 17).
Hop Limit 8 Bit Maximale Anzahl an Zwischenschritten über Router, die ein Paket zurücklegen darf; wird beim Durchlaufen eines Routers ("Hops") um eins verringert. Pakete mit null als Hop Limit werden verworfen. Es entspricht dem Feld Time to Live (TTL) bei IPv4.
Source Address 128 Bit Adresse des Senders
Destination Address 128 Bit Adresse des Empfängers

Trace File

IPv4 und IPv6 Header im Vergleich




Adressierung

Skript/Netzwerk/IPv6

Beschreibung

Beschreibung
Adressen
Interface
Adressraum
Privacy



topic - Beschreibung

Beschreibung

IPv6-Adressen werden mit Subnetzmasken in einen Netz- und einen Host-Teil unterteilt
  • subnet masks
  • wie bei IPv4

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 und weitere). 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 Bit).

Adress-Typ Beschreibung
Adressen ohne speziellen Präfix
Netzteil der Adresse (Präfix)
Adress-Typen (Host-Teil)
Präfixlängen für das Routing

IPv6 Präfixe

Bezeichnung Präfix Verwendung
Link Local Unicast fe80::/10 Rechner im eigenen Subnetz
Site Local Unicast fec0 - feff Standortlokale Adressen
Unique Local Unicast fc00 - fdff Private Adressen
Multicast ff00 Für mehrere Clients
Global Unicast 2000 - 3fff Weltweite eindeutige Adressen
2001 An Provider vergeben, die weiterverteilen.
2002 Tunnelmechanismus 6to4
NAT64 64:ff9b::/96 Übersetzungsmechanismus NAT64

Adressen ohne speziellen Präfix

Adress-Typ Beschreibung
Localhost Adresse
Unspezifische Adresse
IPv6 Adressen mit eingebetteter IPv4 Adresse

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) angewandt 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. beispielsweise 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
Adress-Typ Beschreibung
Link-lokaler Adress-Typ
Site-lokaler Adress-Typ
Unique Local IPv6 Unicast Adressen
Globaler Adress-Typ ("Aggregatable global unicast")
Multicast-Addressen
Anycast-Adressen

Link-lokaler Adress-Typ

Link-lokale Unicast-Adressen
  • Adressbereich fe80::/10 sind, wie weiter oben schon erwähnt, nur zur Kommunikation innerhalb desselben Netzwerksegments gedacht.
  • Routing ist mit diesen Adressen nicht möglich.

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, beispielsweise:

  • Ist noch jemand anderer auf diesem Link?
  • Ist jemand mit einer speziellen Adresse hier (beispielsweise 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 Unicast Adressen

Adressbereich fc00
:/7 entsprechen den privaten Adressen des IPv4-Protokolls.
  • Sie lösen die inzwischen veralteten sitelokalen Unicast-Adressen ab und werden im Internet nicht geroutet.

Weil die schon früh definierten site-local Adressen nicht eindeutig sind, kann dies zu großen Problemen führen, wenn beispielsweise 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")

Globale Unicast-Adressen
  • Hier sind mehrere Adressbereiche in Gebrauch.
  • Die endgültigen Bereiche scheinen noch nicht ganz festzustehen, sind für die LPI-Prüfung aber auch nicht von Belang
  • Der globale Bereich ist jedenfalls für die Kommunikation im Internet zuständig
  • Da diese Adressen bei den meisten Internet Service Providern noch nicht nativ zu bekommen sind, empfehle ich zum Experimentieren die Verwendung eines Tunnelbrokers

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:

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 (beispielsweise 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 ).

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

beispielsweise 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:

Adress-Typ Beschreibung
Automatisch erstellte Adressen
Manuell festgelegte Adressen

Automatisch erstellte Adressen

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 (beispielsweise bei virtuellen Interfaces), wird anstelle dessen etwas anderes herangezogen (wie beispielsweise 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
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 beispielsweise 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

IPv6/Subnetting


ICMPv6

IPv6/ICMP - ICMPv6 (Internet Control Message Protocol für IPv6)

Beschreibung

IPv6-Adressauflösung und Netzwerkreichweiten-Ermittlung

ICMPv6 (Internet Control Message Protocol Version 6)
Familie Internetprotokolle
Einsatzgebiet Fehlermeldungen, Diagnose, Autoconfiguration, Routing
Internet-Protokolle im TCP/IP-Protokollstapel
Internet ICMPv6
IPv6
Netzzugang Ethernet Token
Bus
IEEE
802.11a/b/g/n
FDDI
Grundfunktionen
  • Grundlegende Funktionen
  • Rolle des Internet Control Message Protocol Version 6 (ICMPv6) in IPv6-Netzwerken
Fehlererkennung und -meldung
  • Diagnostische Aufgaben
  • Echo-Request und Echo-Reply für Ping-Operationen
ICMPv6-Nachrichten

Funktionsweise

  • Neighbor Discovery (ND)
  • Router Solicitation
  • Router Advertisement
  • Neighbor Solicitation
  • Neighbor Advertisement

Das Internet Control Message Protocol for the Internet Protocol Version 6 (ICMPv6) ist die mit IPv6 zusammen verwendete Version des Internet Control Message Protocol

ICMPv6 zwingend notwendig

Im Gegensatz zum ICMP bei IPv4 ist ICMPv6 zwingend für den Betrieb von IPv6 nötig

  • Ein generelles Blockieren von ICMPv6 auf der Firewall führt dazu, dass IPv6 nicht funktioniert (vgl. RFC 4890)

ICMPv6 dient als Hilfsprotokoll für IPv6, ist in derselben OSI-Schicht 3 wie dieses angesiedelt und nutzt das IPv6-Protokoll zum Versand von ICMP-Nachrichten

  • Als Protokoll-Nummer wird dabei 58 ins Next-Header-Feld des IPv6-Headers eingefügt

Header

ICMPv6 Header
0 Type Code Prüfsumme
ICMPv6-Nachricht …

Das Feld Type gibt die Klasse der ICMP-Nachricht an

  • welche mit dem Feld Code genauer spezifiziert werden kann

Die Prüfsumme wird zur Verifizierung der Gültigkeit des ICMPv6-Pakets benutzt

Der restliche Inhalt der ICMP-Nachricht wird durch den jeweiligen Typ bestimmt

  • Bei Fehlernachrichten wird nach den möglichen zusätzlichen Feldern immer noch so viel wie möglich vom fehlerverursachenden Paket angehängt
Prüfsumme
Prüfsummen-Schema
0 IPv6-Absender-Adresse
32
64
96
128 IPv6-Ziel-Adresse
160
192
224
256 IPv6-Nutzlast-Größe
288 Checksumme 0 Next Header 58

Die Prüfsumme (engl. checksum) eines ICMPv6-Pakets ist ein 16-Bit-Einerkomplement der Summe des Einerkomplements der gesamten ICMPv6-Nachricht

  • Zusätzlich zur Nachricht wird noch ein IPv6-Pseudoheader vorne angehängt
  • Zur Berechnung der Prüfsumme wird das Prüfsummenfeld auf 0 gesetzt
  • Der zur Berechnung der Prüfsumme verwendete Pseudoheader sieht wie im Schema nebenan aus

Dies ist eine der Neuerungen von ICMPv6 gegenüber ICMP, wo die Prüfsumme nur über den ICMP-Header berechnet wurde

Verarbeitung

Regeln für die Verarbeitung von ICMPv6-Nachrichten
  • Unbekannte ICMPv6-Fehlernachrichten müssen an die darüberliegende Netzwerkschicht weitergereicht werden
  • Unbekannte ICMPv6-Informationsnachrichten müssen ohne Benachrichtigung des Absenders verworfen werden
  • Jeder Fehlernachricht wird am Ende so viel wie möglich des fehlerverursachenden Pakets angehängt
  • Die Protokollnummer zum Weiterreichen von unbekannten Fehlernachrichten wird aus dem angehängten Originalpaket entnommen
Auf folgende Pakete werden keine Fehlernachrichten versandt
  • Fehlernachrichten
  • Pakete an Multicast-, Link-Level-Multicast- oder Link-Level-Broadcast-Adressen mit folgenden Ausnahmen:
    • Packet-Too-Big-Nachrichten
    • Parameter-Problem-Nachrichten mit Code 2 - unbekannte IPv6-Option
  • Das Netz darf nicht mit ICMPv6-Fehlernachrichten geflutet werden

Anhang

Siehe auch

RFC

RFC Titel
3122 Extensions to IPv6 Neighbor Discovery for Inverse Discovery Specification
4443 Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
4604
4861 Neighbor Discovery for IP Version 6 (IPv6)
7112 Implications of Oversized IPv6 Header Chains
8200 Internet Protocol, Version 6 (IPv6) Specification, löst 2460 ab

Links

Weblinks

  1. https://de.wikipedia.org/wiki/ICMPv6
  2. IANA ICMP Parameters - Vollständige Liste der ICMPv6-Typen und -Codes

</noinclude>


IPv6/ICMPv6 Fuktionen

Upper Layer Protokolle

IPv6/Upper Layer Protokolle

Beschreibung

Änderungen in höheren Protokollschichten (Dual Stack)

Untersuchung der Anpassungen in höheren Protokollschichten

  • die durch die Einführung von IPv6 notwendig wurden
  • insbesondere im Kontext der Dual-Stack-Implementierung
  • bei der Geräte gleichzeitig IPv4 und IPv6 unterstützen

Dieser Abschnitt beleuchtet

  • Anwendungen und Netzwerkprotokolle modifiziert wurden, um mit beiden IP-Versionen zu arbeiten
  • Herausforderungen, die sich aus der Notwendigkeit der gleichzeitigen Unterstützung ergeben

Es wird besprochen

  • wie Software und Netzwerkausrüstungen angepasst werden müssen
  • um nahtlos zwischen IPv4 und IPv6 wechseln zu können
  • und welche speziellen Anpassungen für Protokolle wie HTTP, SMTP und FTP erforderlich sind, um eine vollständige Funktionalität über beide Protokollversionen zu gewährleisten

DNS

Bedeutung von DNS

Wegen der Länge der IP-Adressen, die an das menschliche Erinnerungsvermögen höhere Anforderungen stellt als IPv4-Adressen, ist IPv6 in besonderem Maße von einem funktionierenden Domain Name System (DNS) abhängig

AAAA

RFC 3596 definiert den Resource Record (RR) Typ AAAA (sprich: Quad-A), der genau wie ein A Resource Record für IPv4 einen Namen in eine IPv6-Adresse auflöst

Der Reverse Lookup, also die Auflösung einer IP-Adresse in einen Namen, funktioniert nach wie vor über den RR-Typ PTR, nur ist für IPv6 die Reverse Domain nicht mehr IN-ADDR.ARPA wie für IPv4, sondern IP6

  • ARPA und die Delegation von Subdomains darin geschieht nicht mehr an 8-Bit-, sondern an 4-Bit-Grenzen

Ein IPv6-fähiger Rechner sucht in der Regel mittels DNS zu einem Namen zunächst nach dem RR-Typ AAAA, dann nach dem RR-Typ A

  • Laut der Default Policy Table in RFC 3484 wird die Kommunikation über IPv6 gegenüber IPv4 bevorzugt, falls festgestellt wird, dass für eine Verbindung beide Protokolle zur Verfügung stehen

Die Anwendungsreihenfolge der Protokolle ist meistens aber auch im Betriebssystem und auf der Anwendungsebene, also beispielsweise im Browser, einstellbar

Root-Nameserver

Elf der dreizehn Root-Nameserver und mindestens zwei Nameserver der meisten Top-Level-Domains sind bereits über IPv6 erreichbar

Das übertragende Protokoll ist unabhängig von den übertragenen Informationen

  • Insbesondere kann man über IPv4 einen Nameserver nach AAAA-RRs fragen

Anbieter großer Portalseiten denken jedoch darüber nach, nur DNS-Anfragen, die über IPv6 gestellt werden, auch mit AAAA Resource Records zu beantworten, um Probleme mit fehlerhaft programmierter Software zu vermeiden


Sicherheit

IPv6/Sicherheit - Sicherheit von IPv6-Knoten

Beschreibung

Empfehlungen
Beschreibung
1 Patches einspielen
2 Dienste deaktivieren
3 Firewall aktivieren
4 Dienste nur an benötigte IPv4/IPv6 Adressen binden

tcp_wrapper

Zugangsbeschränkungen
  • Viele Dienste setzen die tcp_wrapper Bibliothek für die Zugangskontrolle ein
  • Eine Beschreibung finden Sie unter use of tcp_wrapper

Sicherheitsüberwachung

  • Aktuell gibt es keine komfortablen Sicherheitstools mit denen man ein System über ein Netzwerk nach IPv6 relevanten Sicherheitslücken hin überprüfen kann
  • Weder Nessus noch irgendein kommerzieller Security Scanner ist zur Zeit dazu in der Lage, IPv6-Adressen scannen zu können

Rechtsfragen

ACHTUNG
Bitte stellen Sie immer sicher, dass Sie ausschließlich ihr eigenes Netzwerk scannen oder einen Scan nur nach Erhalt einer schriftlichen Erlaubnis durchführen.
  • Andernfalls haben sie mit rechtlichen Konsequenzen zu rechnen! ÜBERPRÜFEN Sie die Ziel-IPv6-Adresse ZWEIMAL, bevor Sie einen Scan starten

Sicherheitsüberwachung


QoS

IPv6/QoS - IPv6 - Quality of Service

Beschreibung

IPv6 unterstützt QoS durch die Anwendung von Flow Labels und Traffic Classes.

Vernünftig funktionierendes QoS ist nur an der ausgehenden Schnittstelle eines Routers oder Host möglich, wo der Flaschenhals anfängt. Alles andere bereitet nur Probleme und funktioniert wahrscheinlich nicht so, wie erwartet.



Router

topic - Beschreibung

Beschreibung

Migration

IPv6/Migration - Umstieg von IPv4 auf IPv6

Beschreibung

IPv6 wird IPv4 in den nächsten Jahren ablösen

Übergangstechnologie Beschreibung
Parallelbetrieb
Tunnel
Übersetzen

Parallelbetrieb

Verfahren Beschreibung
Dual-Stack Netzknoten mit IPv4 und IPv6
Dual-Stack Lite (DS-Lite) Dual-Stack mit globaler IPv6 und Carrier-NAT IPv4

Tunnel

Verfahren Beschreibung
4in6 IPv4 in IPv6
6in4 IPv6 in IPv4
6over4 Transport von IPv6-Datenpaketen zwischen Dual-Stack Knoten über ein IPv4-Netzwerk
6to4 Transport von IPv6-Datenpaketen über ein IPv4-Netzwerk (veraltet)
AYIYA Anything In Anything
6rd IPv6 rapid deployment
ISATAP Intra-Site Automatic Tunnel Addressing Protocol (veraltet)
Teredo Kapselung von IPv6-Datenpaketen in IPv4-UDP-Datenpaketen

Übersetzung

Verfahren Beschreibung
NAT64 IPv4-Adressen in IPv6-Adressen
464XLAT IPv4- in IPv6- in IPv4-Adressen
SIIT Stateless IP/ICMP Translation


Firewall

IPv6/Firewall - Beschreibung

Beschreibung

IPv6 Firewall-Funktionalität ist wichtig
  • vor allem dann, wenn Sie auf Ihren internen Netzen IPv6 mit globalen IPv6 Adressen einsetzen.
  • In IPv6 werden - im Unterschied zu IPv4, wo interne Hosts automatisch durch private IPv6 Adressen geschützt werden (RFC 1918 / Address Allocation for Private Internets bzw. Google search for Microsoft + APIPA) - globale Adressen verwendet und jeder mit IPv6-Anbindung kann alle internen Knoten, bei denen IPv6 aktiv ist, erreichen.

netfilter6

Von Haus aus unterstützt wird die IPv6-Firewall-Funktionalität im Kernel erst ab Version 2.4+. In älteren 2.2+ Versionen können sie nur mit Protocol 41 das generelle Tunnel von IPv6-in-IPv4-Paketen filtern.

Achtung: Es gibt keine Garantie, dass die beschriebenen Regeln und Beispiele ihr System auch wirklich schützen können!

Beobachten Sie nach der Installation ihr Regelset, siehe Abschnitt Abschnitt 19.3.

  • Kernels ab Version 2.6.20 (Februar 2007) unterstützen den IPv6-Verbindungsstatus (connection tracking) vollständig.
  • Kernels ab Version 3.9.0 (April 2013) unterstützen NAT für IPv6 in Verbindung mit ip6tables >= 1.4.18
  • Kernels ab Version 3.13 (April 2014) unterstützen ein neues Framework namens: nftables

Weitere Informationen

  • Netfilter project
  • maillist archive of netfilter users
  • maillist archive of netfilter developers
  • Unofficial status informations

Vorbereitung

Dies ist nur notwendig, wenn der mitgelieferte Kernel und Netfilter nicht den Ansprüchen genügt und neue Featurs bereits verfügbar sind, jedoch noch nicht beinhaltet.

Quellen besorgen

  • Besorgen Sie sich den aktuellsten Kernel: https://www.kernel.org/
  • Besorgen Sie sich das aktuellste iptables Paket:
  • Source tarball (für Kernel Patches): https://www.netfilter.org/

Quellen entpacken

Wechseln Sie in das Source-Verzeichnis:

  • Entpacken sie die Kernel-Quellen und vergeben diesen einen neuen Namen
  • Entpacken Sie die iptables Quellen


Neueste iptables/IPv6-relevante Patches den Kernel-Quellen hinzufügen

Wechseln Sie in das iptables Verzeichnis

Fügen Sie relevante Patches hinzu

Fügen Sie zusätzliche IPv6 relevante IPv6 Patches hinzu (die nach wie vor nicht im Standard-Kernel enthalten sind)

Sagen Sie zu folgenden Optionen (iptables-1.2.2) Ja:

  • ah-esp.patch
  • masq-dynaddr.patch (nur benötigt bei Systemen mit dynamischer IP-Zuweisung am WAN mittels PPP oder PPPoE)
  • ipv6-agr.patch.ipv6
  • ipv6-ports.patch.ipv6
  • LOG.patch.ipv6
  • REJECT.patch.ipv6

Überprüfen Sie die Erweiterungen


Konfiguration, kompilieren und Installation eines neues Kernels

Wechseln Sie zu den Kernel-Quellen

Editieren Sie das Makefile

Starten Sie configure und aktivieren Sie IPv6 relevante Optionen

Konfigurieren Sie bei Bedarf Sonstiges abseits von IPv6.

Kompilieren und Installation: siehe Kapitel Kernel sowie andere HOWTOs.

iptables neu kompilieren und installieren

Stellen Sie sicher, dass obige Kernel-Sourceverzeichnisstruktur unter /usr/src/linux liegt

Benennen sie das ältere Verzeichnis um

Erstellen Sie einen neuen symbolischen Link

Erstellen Sie ein neues SRPMS

Installieren Sie das neue iptables Paket (iptables + iptables-ipv6)

  • Bei RH 7.1 Systemen ist normalerweise eine ältere Version hiervon bereits installiert, verwenden Sie daher die Option "Freshen":


  • Ist keine ältere Version installiert, benutzen Sie die Option "install":


  • Bei RH 6.2 Systemen ist normalerweise kein Kernel Version 2.4.x installiert und die Anforderungen sind demnach nicht gegeben. Benutzen Sie in diesem Fall "nodeps":


Damit iptables die Libraries finden kann, ist es eventuell notwendig, einen symbolischen Link für die iptables Libraries zu erstellen:


Verwendung

Unterstützung im Kernel

Laden Sie das Modul (falls dies im Kernel so kompiliert wurde):

Überprüfen der IPv6-Unterstützung:


Die Benützung von iptables lernen

Auflistung aller netfilter Einträge
  • Kurze Auflistung:


  • Erweiterte Auflistung:


Auflistung angegebener Filter
Hinzufügen einer Log-Regel zum Input-Filter mit Optionen
Hinzufügen einer Drop-Regel zum Input-Filter
Löschen einer Regel mit Hilfe der Regelnummer
Aktiviere die Auswertung des Verbindungsstatus (connection tracking)

Seit Kernel-Version 2.6.20 ist die Auswertung des IPv6-Verbindungsstatus gut unterstützt. Die bis dahin statuslosen Filterregeln sollten ersetzt werden..


ICMPv6 erlauben

Bei älteren Kernelversionen (unpatched kernel 2.4.5 und iptables-1.2.2) kann keine nähere Spezifizierung des ICMPv6-Typs vorgenommen werden:

  • Eingehender ICMPv6 Verkehr durch Tunnel erlauben


  • Ausgehenden ICMPv6 Verkehr durch Tunnel erlauben


Neuere Kernel erlauben das Spezifizieren des ICMPv6-Typs:


Rate-limiting

Da es zu einem ICMPv6 Storm kommen kann (der Autor hat dies bereits mehrfach beobachtet), sollten sie das rate limiting zumindest für das ICMP Regelset einsetzen. Zusätzlich sollten auch die Logging Regeln mit rate limiting geschützt werden, um DoS Attacken gegen das syslog sowie gegen die Logdateien enthaltenden Patitionen entgegenzuwirken. Ein Beispiel für ein rate limited ICMPv6 sieht wie folgt aus:


Eingehende SSH-Verbindung erlauben

Im folgenden Beispiel werden eingehende SSH-Verbindungen von einer speziellen IPv6 Adresse zugelassen:

  • Eingehende SSH Verbindungen werden von der Adresse 2001:0db8:100::1/128 erlaubt


  • Erlaube Antwortpakete (nicht mehr notwendig, wenn der IPv6-Verbindungsstatus ausgewertet wird!)


Getunnelten IPv6-in-IPv4 Datenverkehr erlauben

Um getunnelte IPv6-in-IPv4 Pakete zu akzeptieren, müssen Sie in Ihrem IPv4 Firewall-Setup entsprechende Regeln einzufügen, beispielsweise

  • Akzeptiere eingehende IPv6-in-IPv4 Daten am interface ppp0
  • Akzeptiere ausgehende IPv6-in-IPv4 Daten am interface ppp0

Haben Sie nur einen statischen Tunnel, dann können sie die IPv4 Adresse auch dediziert angeben:

  • Akzeptiere eingehende IPv6-in-IPv4 Daten vom Tunnel-Endpunkt 192.0.2.2 am interface ppp0
  • Akzeptiere ausgehende IPv6-in-IPv4 Daten vom Tunnel-Endpunkt 192.0.2.2 am interface ppp0
Schutz gegen eingehende TCP-Verbindungs-Anfragen
SEHR EMPFOHLEN

Aus Sicherheitsgründen sollten Sie auf jeden Fall eine Regel inkludieren, wodurch eingehende TCP-Verbindungs-Anfragen geblockt werden. Wenn Sie andere Interfacenamen verwenden, müssen Sie die Option "-i" entsprechend anpassen!

  • Blockiere eingehende TCP-Verbindungs-Anfragen zu diesem Host
  • Blockiere eingehende TCP-Verbindungs-Anfragen zu Hosts hinter diesem Router

Eventuell müssen diese Regeln unterhalb anderer Regeln platziert werden. Nehmen Sie sich für die Reihenfolge der Regeln etwas Zeit. Sinnvoll wird es auch sein, ein Script mit den Regeln zu erstellen, damit die Regeln in der gewünschten Reihenfolge angewandt werden.

Schutz gegen eingehende UDP-Verbindungs-Anfragen
SEHR EMPHOLEN

Wie bereits im Kapitel Firewall erwähnt, ist es möglich die Ports bei ausgehenden UDP/TCP-Verbindungen zu kontrollieren. Im Falle, dass all Ihre IPv6 Systeme lokale Ports verwenden, beispielsweise von 32768 bis 60999, dann können sie ebenfalls UDP Verbindungen filtern (bis das Verbindungs-Tracking funktioniert):

  • Blockiere eingehende UDP-Pakete, die nicht Antworten ausgehender Anfragen dieses Host sein können
  • Blockiere eingehende UDP-Pakete, die nicht Antworten auf Anfragen von hinter diesem Router gelegenen Hosts sein können

Anwendungsbeispiele

Einfaches Beispiel für Fedora

Folgende Zeilen zeigen eine einfache Firewall-Konfiguration für Fedora 6 (ab Kernel-Version 2.6.20). Ausgehend von dem Origina (generiert durch system-config-firewall) wurden Modifikationen für die Unterstützung des Verbindungsstatus und der Rückgabe der passenden ICMPv6-Meldung für Rejects. Eingehende SSH (Port 22) Verbindungen sind erlaubt.

Zwecks der Vollständigkeit ist hier auch die entsprechende Konfiguration für IPv4 gezeigt:

Benutzung:

  • Erzeugen/Modifizieren der Konfigurationsdateien
  • Aktivieren von IPv4 & IPv6 Firewalling
  • Aktivieren des automatischen Starts nach dem Reboot
Umfangreicheres Beispiel

Folgende Zeilen zeigen ein umfangreicheres Setup. Happy netfilter6 Regelset erstellen...

Network Address Translation (NAT) mit netfilter6

Seit mindestens Linux Kernel-Version 3.9.0 und ip6tables ab 1.4.18 kann Network Address Translation (NAT) genutzt werden.

IPv6 Maskierung

Wie bei IPv4 können Systeme hinter einem Router versteckt werden mit Hilfe von IPv6 Maskierung (hide/overlap NAT), beispielsweise

IPv6 Destination NAT

Eine dedizierte öffentliche IPv6-Adresse kann zu einer internen IPv6-Adresse weitergeleitet werden, beispielsweise

IPv6 Port Weiterleitung

Ein dedizierter Port kann zu einem internen System weitergeleitet werden, beispielsweise

Firewall-Setup mit nftables

Mit nftables wurde die Unterstützung einer Tabelle names "inet" eingeführt in welcher Regeln für IPv4/IPv6 gleichzeitig gelten

Präparation zur Nutzung von nftables

Installieren einer Linux-Distribution, welche die Unterstützung für nftables bereits eingebaut hat. Beim Schreiben dieses Absatzes (Mai 2014) war mindestens Fedora Rawhide (Vorläufer der Version 21) mit entsprechendem Support und nftables version 0.2.0 versehen.

Basis-nftables Konfiguration

Laden der Kernel-Module:

Löschen der Regeln in iptables and ip6tables um Interferenzen zu vermeiden:

Erzeugen der Filter-Tabelle:

Erzeugen einer input chain in der Filter-Tabelle:

Einfache Filter-Policy mit nftables

Konfiguration

Erlauben von Paketen, die zu existierenden Einträgen in der Connection-Tracking-Tabelle gehören

Erlauben von IPv4 und IPv6 ICMP echo-request (aka ping)

Erlauben einiger wichtiger IPv6 ICMP Pakete, ohne Zähler, dafür mit Hop-Limit-Prüfung (erhöht die Sicherheit)

Erlauben von eingehenden SSH-Verbindungen für IPv4 und IPv6

Reject/drop anderer Pakete

Ergebnis

Tabelle für IP unabhängigen Filter

Tipps für's Loggen

Für Logging wird ein zusätzliches Kernelmodul benötigt:

ACHTUNG, MOMENTAN KANN DER LOG-LEVEL NICHT ANGEGEBEN WERDEN, dadurch werden nftables-Ereignisse mit Log-Level kern.emerg ausgegeben - ES BESTEHT DIE GEFAHR, DASS DIE KONSOLE DADURCH ÜBERFLUTET WIRD!

Für erste Tests mit der Log-Option kann es nützlich sein, das Loggens für emergency-Ereignisse in beispielsweise /etc/rsyslog.conf zu deaktivieren mit Hilfe eines "#" am Anfang der Zeile und Neustart des logging-Daemons

Regel von oben, welche SSH auf Port 22 erlaubt, nun mit Logging:

Filter-Policy mit nftables unter Benutzung der Tablellen "ip", "ip6" und "inet"

Wie oben schon beschrieben, wenn die Regeln in den einzelnen Tabellen konfiguriert werden, muss gesichert sein, dass frühere "accepts" nicht aufgehoben werden. Eine einfache Lösung ist die Benutzung von Markierungen. Regeln, die Pakete erlauben, setzen die Marke mit "meta mark set xxxx". Eine generische Regel erlaubt Pakete mit gesetzter Marke "mark xxxx". Beispiel für ein resultierendes Filter-Regelwerk:


Tunnel

topic - Beschreibung

Beschreibung

Ein Tunnelbroker ist im Bereich der Computernetzwerke ein Dienst, der Tunnel bereitstellt, die zum Beispiel dazu genutzt werden können, Verkehr gesichert (Virtual Private Network) oder verkapselt zu transportieren, um beispielsweise IPv6 über ein IPv4-Netzwerk zu transportieren

Obwohl es mehrere Arten von Tunnelbrokern gibt, werden damit meist Broker bezeichnet, die Tunnel bereitstellen, die es ermöglichen, IPv6-Pakete über alte IPv4-Infrastruktur zu routen (RFC 3053), allerdings kann es auch IPv4-Tunnelbroker geben, die IPv4-Pakete über IPv6-Infrastruktur leiten

  • Um IPv6 über IPv4 zu leiten, werden verschiedene Methoden wie 6in4, 6over4, 6to4 oder 6rd verwendet
  • Heutzutage wird häufig Dual-Stack verwendet, bei dem sowohl IPv4 und IPv6 unabhängig voneinander verwendet werden

Automatische Konfiguration

Normalerweise werden IPv6-Tunnel über das Tunnel Setup Protocol oder Tunnel-Information-Control-Protokoll konfiguriert und erstellt

  • Oft wird ein Tunnel jedoch manuell konfiguriert

Probleme mit Network Address Translation und Routern

Protokoll-41-Tunnel, wobei IPv6 direkt in IPv4 verpackt wird, funktionieren hinter NATs eventuell nicht mehr zuverlässig
Protokoll 41 in Wireshark
  • Mit vielen modernen Routern gibt es allerdings keine Probleme
  • Umgehen kann man auftretende Probleme, indem man den Endpunkt entweder in eine Demilitarisierte Zone legt oder gleich auf das NAT-Gerät; moderne Router für den Heimeinsatz, die IPv6-fähig sind, unterstützen dies inzwischen
  • Ebenfalls möglich ist der Gebrauch von AYIYA oder TSP (Tunnel Setup Protocol), die IPv6-Pakete in UDP-Pakete verpacken
  • Diese können die meisten Firewalls problemlos passieren (vorausgesetzt, es gibt keine verbietende Regel)
Ein Problem, das immer noch auftreten kann, ist, dass eine NAT-Regel aus der Tabelle entfernt wird, obwohl die Verbindung noch besteht
  • Falls dann von außen Pakete für den Tunnel ankommen, kann der Router diese nicht mehr weiterleiten und verwirft sie
  • Das unterbricht die Tunnelverbindung, bis der Nutzer wieder ein Paket durch den Tunnel sendet
Ältere (Heim-)Router routen teilweise generell keine Protokoll-41-Pakete

Dynamische Endpunkte

Falls der Client-Endpunkt des Tunnels eine dynamische IP-Adresse besitzt (wie bei Privatkunden-Breitbandanschlüssen), dann muss der Kunde den Tunnelbroker immer bei einer Änderung über die neue IP-Adresse informieren

  • Das geschieht entweder manuell über die Website des Tunnelbrokers oder über ein automatisches Protokoll wie TSP oder Heartbeat

Andere Tunnelbroker erlauben eine komfortable webbasierte Lösung, bei der eine vorgegebene URL aufgerufen wird, in der Nutzername, Passwort und der Hostname oder die ID des Tunnels enthalten sind. Über die IP des Aufrufers (der Server für diese Lösung ist über IPv4 angebunden) kann der Endpunkt aktualisiert werden

tunnelbroker.net

Hurricane Electric bietet einen kostenlosen tunnel broker Dienst an, der unter Arch relativ einfach zu benutzen ist, wenn Sie einem IPv4-Host IPv6-Konnektivität hinzufügen möchten

Registrierung für einen Tunnel

Gehen Sie auf die Tunnelbroker-Site und füllen Sie die Registrierung aus

Einrichten des Hurricane Electric-Tunnels

Erstellen Sie die folgende systemd-Unit und ersetzen Sie den fettgedruckten Text durch die IP-Adressen, die Sie von HE erhalten haben
Hinweis
Wenn Sie sich hinter einem NAT befinden (typische Heimrouter-Einrichtung), verwenden Sie Ihre lokale IPv4-Adresse für client_IPv4_address, beispielsweise 192.168.0.2
/etc/systemd/system/he-ipv6.service
[Einheit]
Beschreibung=he.net IPv6-Tunnel
Nach=network.target
[Service]
Typ=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/ip tunnel add he-ipv6 mode sit remote server_IPv4_address local client_IPv4_address ttl 255
ExecStart=/usr/bin/ip link set he-ipv6 up mtu 1480
ExecStart=/usr/bin/ip addr add client_IPv6_address dev he-ipv6
ExecStart=/usr/bin/ip -6 route add ::/0 dev he-ipv6
ExecStop=/usr/bin/ip -6 route del ::/0 dev he-ipv6
ExecStop=/usr/bin/ip link set he-ipv6 down
ExecStop=/usr/bin/ip tunnel del he-ipv6
[Install]
WantedBy=multi-user.target
Dann start/enable he-ipv6.service

systemd-networkd

Wenn systemd-networkd Ihre Netzwerkverbindungen verwaltet, ist es wahrscheinlich eine bessere Idee, ihn auch den Tunnelbroker verwalten zu lassen (anstatt eine .service-Datei zu verwenden)
/etc/systemd/network/he-tunnel.netdev
[Match]
[NetDev]
Name=he-ipv6
Kind=sit
MTUBytes=1480
[Tunnel]
Lokal=<lokale IPv4>
Entfernt=<Tunnel-Endpunkt>
TTL=255
/etc/systemd/network/he-tunnel.network
[Match]
Name=he-ipv6
[Netzwerk]
Adresse=<lokale IPv6>
Gateway=<IPv6-Gateway>
DNS=2001:4860:4860::8888
DNS=2001:4860:4860::8844

Und fügen Sie diese Zeile in den Abschnitt "[Network]</nowiki>" Ihrer Standard-Internetverbindungsdatei "'.network" ein

Tunnel=he-ipv6

Verwendung des Tunneling mit dynamischer IPv4 IP

Aktualisierung über Cronjob

Der einfachste Weg, das Tunneln mit einer dynamischen IPv4-IP zu nutzen, besteht darin, einen Cronjob einzurichten, der Ihre aktuelle Adresse regelmäßig aktualisiert
  • Die Beispiel-URL und einen Update Key finden Sie auf der Registerkarte Advanced der Seite Tunnel Details
Um zu überprüfen, ob die Aktualisierung funktioniert, führen Sie den folgenden Befehl aus (ersetzen Sie USERNAME, UPDATEKEY und TUNNELID durch die Angaben zu Ihrem Konto und Ihrem Tunnel)
wget -O - https://USERNAME:UPDATEKEY@ipv4.tunnelbroker.net/nic/update?hostname=TUNNELID
Wenn es funktioniert, erstellen Sie einen Cronjob, indem Sie crontab -e öffnen und eine neue Zeile hinzufügen
*/10 * * * * wget -q -O /dev/null https://USERNAME:UPDATEKEY@ipv4.tunnelbroker.net/nic/update?hostname=TUNNELID

Aktualisieren über ddclient

Alternativ kann dies auch durch die Installation von ddclient und die Konfiguration von /etc/ddclient.conf konfiguriert werden
protocol=dyndns2
use=web
web=checkip.dns.he.net
server=ipv4.tunnelbroker.net
ssl=ja
anmeldung=BENUTZERNAME
passwort=UPDATEKEY
TUNNELID

Und schließlich start/enable ddclient.service

Setting up a tunnelbroker.net IPv6 tunnel on Debian

Things you need to find out first

The IP address you plan to use the tunnel from (e.g. your current IP, or the IP of the server you want to set this up on) - $yourip

Getting a tunnelbroker account

  • Hit the registration page and sign up
  • Wait for the confirmation email, then login
  • From the (left-hand-side) "User Functions" menu click "Create Regular Tunnel"
  • Enter the IP you want to use the tunnel from
  • Pick a host near the machine with that IP - the closer it is, the shorter the path your IPv6 packets will have to take to hit the IPv6 Internet

Configure your machine to use the tunnel

Pick a name for the tunnel - it is just used as the interface name on Linux. Let’s say sit1. Now click on the your new tunnel, and you’ll be on the "Tunnel details" page

Open up /etc/network/interfaces:

auto sit1
iface sit1 inet6 v4tunnel
    address $address
    netmask 64
    local $yourip
    endpoint $endpoint
    up ip route add 2000::0/3 via $theirip dev sit1

Where:

$address is the value of "Client IPv6 address"

$yourip is the local IP address

$endpoint is the value of "Server IPv4 address"

$theirip is the value of "Server IPv6 address", with the /64 removed

Test

Ping

Make sure iputils-ping is installed (sudo aptitude install iputils-ping, if it isn’t), then try ping6 www.kame.net in a terminal::

PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=54 time=126 ms

Web

If you are setting this up on your desktop, visit Kame using your browser. If this is on a server, use ssh -D1027 yourserver (via ipv4, of course) on your local machine to create a SOCKS proxy, tell your browser to use localhost:1027 as a SOCKS proxy, then visit Kame in your browser. If the tortoise is dancing, you’re done

  1. https://ertius.org/docs/ipv6-tunnel-on-debian/

IPv6 Tunnel unter Debian mit Tunnelbroker.net

Da es ja bald (TM) nur noch IPv6 Adressen gibt, wollte ich damit schon mal frühzeitig etwas herumspielen

Die Frage war nur wie, den natives IPv6 bekommt man nicht von jedem Provider, und als privater DSL Nutzer schon mal garnicht

  • Aber eine Lösung gibt es dennoch, sie heißt IPv6 Tunnel
  • Dabei wird der komplett IPv6 Traffic in IPv4 Pakete verpackt und zu einem Tunnelserver geschickt, der das ganze Entpackt und ins IPv6 Internet weiterleitet
  • Insgesamt eine schöne Sache, und es gibt kostenlose Dienste die einen solchen Service anbieten
  • Einer ist tunnelbroker.net, hier kann man sich Registrieren und bekommt dann Ipv6 Adressen und die Daten zu einem Tunnel Server

Einrichtung Debian

/etc/network/interfaces  folgenden Eintrag hinzugefügt:

#IPv6 TUNNEL
auto 6in4
iface 6in4 inet6 v4tunnel
   address 2001:470:1f0a:cf7::2 #Zugewiesene Addresse des eigenen Endpunkts
  netmask 64
  endpoint 216.66.80.30 #IPv4 Adresse des Tunnelservers auf der anderen Seite
  gateway 2001:470:1f0a:cf7::1 # IPv6 Adresse des Tunnelservers der anderen Seite
  up ip route add ::/0 dev 6in4

Dann speichern und man kann danach mit

ifup 6in4 #Tunnel anfahren
ifdown 6in4 #Tunnel herrunterfahren


Subnetting

IPv6/Subnetting - IPv6-Adressen mit Subnetzmasken in Netz- und Host-Teil unterteilen

Beschreibung

Wie bei IPv4 können IPv6-Adressen mittels Subnetzmasken (subnet masks) in einen Netz- und einen Host-Teil unterteilt werden

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)

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
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 beispielsweise eine Routing-Tabelle folgende Einträge zeigt (Liste ist nicht komplett)

Die gezeigten Zieladressen der IPv6 Pakete werden über die entsprechenden Geräte geroutet


TMP

Pv6/Windows/IPv6 Subnetz

Beschreibung

IPv6 Subnetz

Was ist das Richtige für mich?

Es gibt einen Standard-IPv6-Bereich, der vergleichbar mit dem private Class A / B / C Netzen von IPv4 ist, eine sog. Site local address. Übrigens, die Link local address (fe80::/64) ist mit der 169.254.0.0/16 bei IPv4 vergleichbar.

  • Wenn man also noch keine offizielle, von der IETF oder dem ISP zugewiesene IPv6 hat, sollte auch nicht auf die Idee kommen irgendeine zu verwenden.
  • Das macht früher oder später nur Probleme und man muss erneut umstellen.
Site local Adresse

Folgende Site local Adresse ist frei verfügbar

Site local: fec0::
Subnetz prefix length: 64

Gleiches Netz, andere Schreibweise

Address prefix: fec0::/64

Man könnte auch ein anderes Subnetz innerhalb von fec0 verwenden, allerdings bevorzuge ich kurze Schreibweisen.

Beispiel für ein Subnetz wäre

fec0:0:0:1::
Übersicht über alle Adressen

Testumgebung

Server A
  • Windows 2008 R2
  • AD, DNS
  • IPv6: fec0::3
Server B
  • Windows 2008 R2
  • DHCP
  • IPv6: fec0::2
Client
    • Windows 7
    • IPv6: DHCP (beispielsweise fec0::aaaa)

In dieser Umgebung gibt es keinen IPv6 fähigen Router und damit auch kein Gerät was per Router Discovery gefunden wird

Statische IPv6 vergeben

Nachdem IPv6 mittlerweile standardmäßig aktiv ist, muss man in den Protokolleigenschaften lediglich eine statische IP-Adresse eintragen, hier am Server B:

"image"

Server A erhält die IP fec0::3.     

Über ping -6 fec0::3 kann man die IPv6 Konnektivität von A nach B überprüfen (wenn ich den Parameter -6 nicht angebe, versucht Windows es zuerst über IPv6. Mit dem Parameter erzwingt man das Ganze):

"image"

Konfiguration DHCP-Server

Während der Installation der DHCP-Server Rolle, wird man gefragt, ob man den DHCP im Stateless oder Stateful Modus betreiben möchte, für diesen Verwendungszweck ist Stateful die richtige Wahl.

DHCP-Bereich

fec0:: /64

Ausnahmen

  • fec0::ffff bis fec0::ffff:ffff:ffff:ffff (ich möchte dass meine Clients möglichst kurze Adressen bekommen, und 65.000 IP's reichen mir)
  • fec0::1 bis fec0::20 (meine statischen IPv6 Adressen sind im Bereich 1-20, deshalb soll dieser nicht per DHCP vergeben werden)

Server Options

  • 00023 DNS Recursive Name Server IPv6 Addresss: fec0::3

Wenn ich jetzt am Client meine IPv6 Adresse per ipconfig /renew6 erneuere, bekomme ich beispielsweise fec0::aaaa

Starte ich einen ping vom Client zum Server (ping -6 fec0::3) kann es passieren, dass ich nur PING: transmit failed. General failure. Bekomme. Als nächstes sollte man den ping über link local Adresse (fe80::/64) versuchen, das sollte klappen. In diesem Fall hilft der nächste Schritt.

Zusätzliche Konfiguration am DHCP-Server

An dieser Stelle scheitert man ganz gerne. IPv6 ist auf das sog. Router Advertisement angewiesen, damit ein Routing im Netzwerk möglich ist. Nun steht uns aber kein IPv6 fähiger Router zur Verfügung, d.h. der DHCP-Server soll diese Aufgabe übernehmen. Dazu sind ein paar Kniffe über netsh notwendig. Ohne das Router Advertisement bekommt der Client auch keine Route ins eigene Netz zugewiesen. Über den folgenden Befehl kann man sich die Routen anzeigen lassen:

netsh int ipv6 show route

Hier fehlt fec0:: - unser neues Netz.

Damit es als Route hinzugefügt wird, muss man am DHCP-Server folgendes konfigurieren: # Auf der Netzwerkkarte Advertise=enabled setzen

  1. Für die entsprechende Route, also fec0::, die Eigenschaft publish=enabled setzen
Schritt 1
  • Man muss die ID der betroffenen Netzwerkkarte herausfinden: netsh int ipv6 show int
  • Anschließend muss Advertise=enabled gesetzt werden: netsh int ipv6 set int <ID> advertise=enabled   // optional noch: rou=en (das sollte schon enabled sein)
Schritt 2
  • Anschließend die Route hinzufügen: netsh int ipv6 add route fec0::/64 publish=enabled
  • Falls es die schon gibt, kann man die Eigenschaft publish wie folgt ändern: netsh int ipv6 set route fec0::/64 publish=enabled
  • Update, mit einem Service Pack hat sich scheinbar der Syntax geändert, beispielsweise: netsh int ipv6 set route fec0::/64 "LAN" publish=yes

"image"

Anschließend sollte ein ping vom Client zu Server A & B möglich sein. Alle weiteren IPv6 fähigen Clients können dann ohne zusätzliche Konfiguration über IPv6 kommunizieren.

Troubleshooting

Troubleshooting Tools

Wertvolle Helfer auf der Kommandozeile, die speziell auf IPv6 losgehen

ping -6 <hostname>
tracert -6 <hostname>
ipconfig /release6
ipconfig /renew6
netsh int ipv6 show int
netsh int ipv6 show int <ID>
netsh int ipv6 show route