IPv6 ist ein sehr umfangreiches Thema. Nicht nur Anfänger in
der Netzwerktechnik, sondern auch Personen, die bereits
über fundierte Kenntnisse mit IP-Adressen in der Version 4
verfügen, haben Schwierigkeiten, IPv6 umzusetzen.
Wenn du also diesen Text liest und nicht sofort alles umsetzen
kannst...keine Sorge, das geht fast jedem so. Wer sich aber
durch das Thema IPv6 durcharbeitet, stellt häufig für sich
selbst fest, dass es sich auf jeden Fall gelohnt hat.
IPv6 ist ein komplexes Thema. Wenn man aber die Regeln hinter
dem Grundgedanken von IPv6 versteht, dann löst IPv6 sehr viele
Probleme, bei denen IP in der Version 4 grundsätzlich am Ende
ist.
Getreu dem Motto : “Never Change a running System”, und damit
ist IPv4 gemeint, wurde IPv6 bislang immer noch nicht
flächendeckend umgesetzt - weder bei den Providern noch bei den
Admins in den unterschiedlichen Unternehmen, geschweige denn im
privaten Umfeld. Allerdings bietet IPv6 jede Menge Vorteile,
insbesondere dann, wenn man eine fest zugewiesene IP-Adresse
benötigt.
Betrachten wir zuerst nochmal IPv4. Mit den 32 Bit im Adressraum stehen ungefähr 4 Milliarden Adressen zur Verfügung. In der Anfangszeit der Netzwerktechnik war das auch durchaus ausreichend, aber mittlerweile ist durch den wachsenden Bedarf an IP-Adressen bei den Endgeräten nun die Grenze erreicht. Die letzten verfügbaren öffentlichen IP-Adressen der Version 4 sind im Jahre 2012 verkauft worden. Somit muss ein Umstieg auf Version 6 erfolgen.
Bei IPv6 möchte man nun alles richtig machen. Das beginnt bereits bei der Größe der IP-Adresse. IPv6 hat einen Adressraum von 128 Bit. Wenn man bedenkt, dass jedes zusätzlich eingebundene Bit eine Verdopplung der Anzahl möglicher Adressen bietet, dann ist der Sprung auf 128 Bit im Adressraum von IPv6 durchaus ein Schritt in die richtige Richtung.
Mit IPv6 bekommen wir einen Adressraum mit 2128 Adressen. Das entspricht in etwa 340Sextillionen Adressen. Versuche gar nicht erst, dir diese Zahl vorzustellen. Mit dieser Anzahl von IP-Adressen kann jedem Atom im menschlichen Körper eine IP-Adresse zugewiesen werden.
Im Vergleich zu IPv6 wirkt das aktuelle System mit IPv4 und seinen 4 Blöcken recht übersichtlich. Auch dies ist ein Grund, weshalb sich IPv6 noch nicht so richtig durchgesetzt hat. Viele Admins haben bereits Probleme mit den 32 Bit aus der IPv4-Adresse korrekt umzugehen. Zudem haben sich alle an die Dotted-Decimal-Schreibweise der IPv4-Adressen gewöhnt und ein Umschwenken ist mit Aufwand verbunden. (Never Change a running System).
IPv6 ist im RFC 4291 definiert. ( https://www.rfc-editor.org/rfc/rfc4291.html
)
RFC bedeutet “request for comments” und steht für eine Reihe
von technischen und organisatorischen Dokumente im Internet.
RFC beschreiben somit die grundsätzlichen Regeln der
Netzwerktechnik und des Internets. IPv4 als derzeitiger
Standard wird im RFC 791 kommentiert.
Im Folgenden möchte ich aber keinen Vergleich ziehen zwischen IPv4 und IPv6. Denn es ist meiner Meinung nach kontraproduktiv, immer wieder die alten Dinge aufzuwärmen. Denn auch das ist ein Grund, weswegen sich IPv6 immer noch nicht durchgesetzt hat.
Die insgesamt 128 Bit der IPv6-Adresse werden in Blöcken zu je 4 Bit aufgeteilt. Diese Blöcke werden als Nibble bezeichnet. Diese 4 Bit lassen sich als Zahl im Hexadezimalen Format von 0-F hervorragend darstellen.
Siehe dazu auch die Darstellung binärer Zahlen in der
nebenstehenden Tabelle.
Ein Nibble ist also die hexadezimale Darstellung von 4 Bit, von
“0” bis “F”.
So ergibt sich aus den insgesamt 128 Bit eine Reihe von Hex zahlen. Jeweils 4 dieser Zahlen (Nibble) werden wiederum durch Doppelpunkte voneinander getrennt.
Daraus ergeben sich insgesamt 8 Blöcke von jeweils 4 Hex-Zahlen, die man recht leicht lesen kann.
Die Schreibweise der IPv6 Adressen besteht demnach aus:
8 Blöcke * 4 Nibble/Block * 4 Bit/Nibble = 128 Bit
Eine vollständige IPv6-Adresse stellt sich demnach wie folgt dar.
2001:0DB8:0000:affe:0000:0000:0000:0001
Gut erkennbar sind die einzelnen Nibble, innerhalb der durch Doppelpunkte getrennten Blöcke.
Zur Vereinfachung der Schreibweise gelten weitere Regeln.
1.Führende Nullen dürfen in jedem Block weggelassen werden.
2001:0DB8:0000:affe:0000:0000:0000:0001
ergibt
2001:DB8:0:affe:0:0:0:1
2. Einmal darf eine Folge von Nullblöcken durch :: ersetzt werden das ergibt
2001:DB8:0:affe::1
Dabei gilt, dass der erste 0 Block nicht ersetzt werden sollte. Außerdem darf das Ersetzen durch zwei Doppelpunkten nur einmal erfolgen.
IPv6 benötigt eine Subnetzmaske, um den Netzanteil vom
Hostanteil zu trennen. Die Darstellung der Subnetzmaske ist
immer die CIDR Schreibweise.
So werden die IPv6 Bereiche auch beherrschbar und greifbar.
Denn der Hostbereich ist immer 64 Bit groß.
In unserem Beispiel wird der Hostbereich überall mit Nullen
aufgefüllt.
2001:db8:0:15:0000:0000:0000:0001/64
Aufgrund der Vereinfachungsregeln stellt sich diese Adresse dann wie folgt dar.
2001:db8:0:15::1/64
Die Subnetzmaske trennt die IP-Adresse in diesem Fall genau in
der Mitte, nach vier Blöcken (64Bit Netzanteil und 64Bit
Hostanteil). Dies ist dann der Fall, wenn Endgeräte eingebunden
werden. Die Netze, in denen die Geräte zugeordnet werden, sind
letztlich, mit einer Größe von 64 Bit, alle gleich groß.
Wenn nur die Netzbereiche betrachtet werden kommen auch noch
andere Subnetzmasken zum Einsatz.
Um Dienste auf Server innerhalb eines Netzwerkes zu erreichen,
werden die Portnummern an die IP Adresse angehängt, auch
bekannt als Socket.
Die übliche Schreibweise mit der Angabe der Portnummer über
einen Doppelpunkt kann bei IPv6 nicht mehr erfolgen. Denn bei
IPv6 haben Doppelpunkte eine andere Bedeutung.
Ein weiteres Problem ist die Angabe von IPv6-Adressen im
Browser. Der Browser interpretiert einen Doppelpunkt ebenfalls
als Portabgrenzung um einen Dienst zu erreichen. Es muss also
zu einem Fehler kommen.
2001:db8:0:15::af1:80
Ist die 80 eine Portangabe oder gehört das noch zur Adresse?
In der Praxis werden IPv6 Adressen deshalb in Eckigen Klammer eingesetzt
[2001:db8:0:15::af1]:80
So können Adressbereiche von Port-Nummer getrennt werden.
Achtung bei Microsoft:
Uniform Naming Convention
Microsoft nutzt die sogenannte UNC-Schreibweise . Die
UNC-Schreibweise von Microsoft erlaubt generell keine
Doppelpunkte.
Das sieht man auch bei der MAC Adresse in der Konsole
4a-3b-2f-23-44-4f
Auch die IPv6-Adresse wird danach anders dargestellt
2001-db8-0-15--af1.ipv6-literal.net
Dem folgt, wenn man in einem Windows Netzwerk auf einen Ordner "Bilder" zugreifen möchte, folgende Schreibweise:
Host: 2001:db8:0:15:af1
Ordner: Bilder
Windows -Netzwerk:
2001-db8-0--af1.ipv6-literal.net\Bilder
Es gibt IPv6- Adressen, welche im Internet kommunizieren können und es gibt Adressen, die nur innerhalb der Netze oder auch auf dem Endgerät zur Verfügung stehen. Pro Netzwerkkarte können aus diesem Grund mehrere Adressen auf einer Netzwerkkarte konfiguriert werden.
Es werden drei Adresstypen unterschieden.
Mit einer Unicast-Adresse werden Pakete nur einer einzigen Adresse, also einem einzelnen spezifizierten Gerät, zugestellt. Aus kommunikationstechnischer Sicht wird ein definiertes Gerät über die IP-Adresse angesprochen und die Informationen übertragen.
Unicastadressen werden benötigt um eine Netzwerkkarte eindeutig zu identifizieren. Und nur für dieses Netzwerk-Interface wird diese Adresse konfiguriert. Dabei besteht die Unicast Adresse zum einen aus dem Prefix und zum anderen aus dem Interface-Identifier.
Zu jeder Adresse gehört deshalb auch eine Präfixlänge. Die Schreibweise ist die CIDR Schreibweise also z.B. /64
Die Adresse wird in der Mitte geteilt. Das hat den
Vorteil, das der Interface Identifier für verschiedene Prefixe
verwenden werden kann - mehrere Adresse pro Netzwerkkarte.
Damit kann der Rechner dann in mehreren Netzen sicher
identifiziert werden.
Das bietet den großen Vorteil z.B. bei der Netzwerksicherheit.
Bei einer Multicast-Adresse werden von einem Sender mehrere
Geräte, als Gruppe, gleichzeitig angesprochen. Eine
Information wird also einer Gruppe von Empfängern zur Verfügung
gestellt. Damit dies funktioniert, müssen die Empfänger mit
IP-Adressen versorgt werden, die vom Sender angesprochen werden
können.
Wesentliche Multicast-Dienste sind unter anderem IPTV,
Streaming-Dienste oder auch Kommunikations- und
Routingprotokolle wie bspw. RIP und OSPF.
Bei Anycast werden Pakete nur einem Gerät aus einer bestimmten Gruppe zugestellt. Mehrere Rechner bzw. Teilnehmer bekommen dazu bestimmte Adresse zugewiesen, an die Informationen gesendet werden. Es ist nicht festgelegt, welches Gerät der Gruppe die Information empfängt. Damit lassen sich z.B. auch Lastenteilung oder Sicherheitsmaßnahmen im Netzwerk realisieren.
Als Scope wird ein Bereich bezeichnet, in dem man mit einer IPv6 Adresse kommunizieren kann. Es gibt zum einen den Link-Local-Adressbereich.
Eine Link-Local-Adresse wird Switchweit genutzt und geht nicht über diesen Switch-Bereich hinaus. Eine Link-Local-Adresse wird somit auch innerhalb eines VLANs genutzt. Die Link-Local-Adresse wird von einem Router verworfen, sobald eine Kommunikation nach außen aufgebaut werden soll.
Der nächstgrößere Kommunikations- bzw. Gültigkeitsbereich ist das Lokale Netz. Dieser Adresstyp wird als Local-Adresse oder als ULA-Adresse bezeichnet. Auch diese Adresse kommuniziert nicht mit dem Internet, ist also nur innerhalb eines LAN zu nutzen. Die Internen Router des Unternehmens routen diese Adresse normal durch, aber eine Kommunikation mit Routern außerhalb des Firmennetzwerkes erfolgt nicht.
Für die weltweite Kommunikation wird eine globale Adresse benötigt. Mit einer solchen Adresse kann dann das Internet erreicht und somit entfernte Server angesprochen werden.
Bei der Konfiguration eines Endgerätes mit IPv6 wird immer eine
Link-Local Adresse generiert, da diese Adresse auch für eigene
Hintergrundprozesse benötigt wird. Lokale oder auch globale
Adressen müssen dem Rechner von einem Admin entweder manuell
oder per DHCP zur Verfügung gestellt werden.
Bei IPv6 werden also somit mehrere IP-Adressen an ein Endgerät
gebunden.
Das bedeutet auch, wenn ein PC mehrere Netzwerkkarten besitzt,
dann muss unter Umständen dem Rechner mitgeteilt werden, mit
welcher Netzwerkkarte kommuniziert werden soll. Die
Anwendungsprogramme können das normalerweise selber
ermitteln.
Bei einem Ping allerdings muss der Zonenindex mit angegeben
werden, damit die richtige Karte angesprochen wird.
Der Zonenindex ist die Angabe des Netzes bzw. der
Netzwerkkarte, auf der der Ping ausgeführt werden soll.
Unter Windows wird zur Ermittlung des Zonenindex ein spezieller
Befehl benötigt.
netsh interface ipv6 show interface
Dieser gibt dann die IDx-Indexnummer an.
Beim PING-Befehl wird dann der Zonenindex mit %eth0 oder %9
angehängt.
Ein Prefix gibt an, zu welchem Netz eine Adresse gehört. Dabei muss ein Prefix innerhalb eines Scopes natürlich eindeutig sein.
Die einzelnen Scopes werden durch unterschiedliche Prefixe
getrennt. Deshalb ist es möglich, dass eine Netzwerkkarte
unterschiedliche Adressen hat und in unterschiedlichen Scopes
arbeiten kann.
Ein Global-Scope muss entsprechend gekennzeichnet werden, damit
dieser auch korrekt geroutet werden kann.
Ein Globaler gültiger Prefix wird durch die ersten drei Bits wie folgt gekennzeichnet
2000::/3 (HEX)
In binärer Schreibweise dargestellt als:
0010 0000 0000 0000 :: /3
Die ersten 3 Bit kennzeichnen somit eine globale Adresse, die weltweit geroutet werden kann. Alle anderen Bit sind somit für diesen Zweck nicht relevant. Derzeit werden nur ⅛ des möglichen Adressraumes für die globale Kommunikation genutzt. Es sind noch 7 weitere Bitkombinationen möglich.
Das bedeutet, wenn irgendwann weitere Adressbereiche genutzt werden, dann werden auch andere Bitkombinationen der ersten 3 Bit genutzt, um globales Routing zu ermöglichen.
Die öffentliche IPv6-Adressverteilung folgt demselben hierarchischen Aufbau wie das gesamte Internet.
Verwaltet wird die Adressverteilung durch die IANA (Internet Assigned Numbers Authority).
Die IANA ist zuständig für die weltweite Verteilung von IP-Adressen und mit dem zugehörigen WHOIS-Service und bedient dabei in erster Instanz die jeweiligen Regional Internet Registrar (RIR).
Es gibt fünf globale Registrare.
Die jeweiligen Registrare verteilen dann ihre zugewiesenen Adressen an die unterschiedlichen Provider, welche dann die Adressen an die Kunden verteilen.
Die Kundenadressen sind sogenannte Provider Assigned Adressen,
die vom Provider an den Kunden vergeben werden. Es ist aber
möglich, sich als Kunde auch direkt an die RIR zu wenden, um
eine Provider Invited (PI) Adresse zu bekommen.
Das ist aber wahrscheinlich nur durch eine gute Begründung
möglich. Denn die RIR sind organisatorisch nicht so
aufgestellt, dass Sie Einzelunternehmen oder gar Privatpersonen
mit IP-Adressen versorgen.
Diese strikt hierarchische Vergabe der Adressen hat einige
Vorteile.
Bei IPv4 war es so, dass durch den begrenzten Adressraum die
einzelnen IP Adressbereiche auch sehr stark gestückelt wurden.
Das führte letztendlich zu langen Routingtabellen und damit zu
einer geringen Aggregation, die Maschinen konnten also nicht
optimal zusammenarbeiten.
Je länger die Routing-Tabelle, desto langsamer das
Routing.
Durch IPv6-Adressen haben wir zwar längere IP-Adressen, aber
die Anzahl der Routingeinträge verringert sich. Gleichzeitig
werden durch die hierarchische Verteilung von der IANA die
Netze nicht gestückelt. Es kommt zu einer besseren Aggregation,
was schnelleres Routing trotz längerer IP-Adressen mit sich
bringt.
Durch das sortierte Verteilen der IP-Adressen können
übergeordnete Router die IP-Adressbereiche sauber bündeln und
die Netze schneller ansprechen.
Wenn die IP-Adressvergabe also weiterhin strukturiert
durchgeführt wird, dann wird sich ein effektiveres Routing
einstellen als bei IPv4.
IPv6-Unique Local Addresses (ULA) sind eindeutige lokale
Adressen, die für die interne Kommunikation verwendet werden.
Für Internetrouter stellen die ULA-Prefixe Möglichkeiten dar um
NAT, Network Address Translation, durchzuführen.
Prinzipiell sollte es durch IPv6 nun möglich sein, Endgeräte
durch eine globale Adresse eindeutig anzusprechen, dies
ist aber zum Beispiel für Firmeninterne Sicherheitsmaßnahmen
nicht immer sinnvoll.
ULA gelten somit als privater Adressraum, um Netzwerke zu administrieren und Firewallregeln umzusetzen.
In RFC 4193 ist alles definiert, was es zu ULA zu wissen gilt. Wer sich in der Tiefe mit IPv6 befassen möchte, kommt um diesen RFC nicht herum. Allgemeine Beschreibungen, wie auch diese hier, die du gerade liest, zeigen in der Regel nur eine Zusammenfassung der wichtigsten Beschreibungen auf.
In der Kurzform werden ULA auch nur “lokale Adressen”
genannt.
Der Prefix ist
fd00:: /8 (HEX)
in Binärer Darstellung.
1111 1101 0000 0000:: /8
Dieser Adressbereich ist also der private Bereich, der innerhalb eines LANs, dem Lokal-Skope genutzt werden sollte.
ULA kann als Backup-Adressierung bezeichnet werden. Doch wozu
wird ein solches Backup benötigt?
Das Prinzip ist folgendes:
Im Regelfall bekommt der Kunde vom Provider eine Globale IP
Adresse zugewiesen. Mit dieser Adresse ist das Endgerät nun
weltweit sichtbar und kann kommunizieren. Das bedeutet auch,
dass alle Einstellungen wie Firewallregeln und Freigaben auf
dieser Adresse eingerichtet sind.
Wenn es jetzt zu einem Ausfall des Internetproviders kommen
würde, dann kann kein Endgerät im Unternehmensnetz mehr
kommunizieren, da der eigene Internetrouter ja auch keinen
IPv6-Prefix vom Provider mehr bekommt. Das Durchführen eines
eigenen DHCP ist somit nicht mehr möglich, denn die
DHCP-Einstellungen sind auf die globalen Prefixe
eingerichtet.
Die Link-Local Adresse, die ebenfalls an das Endgerät vergeben
wird, gilt nur Switchweit und eine andere Adresse hat das
Endgerät nicht mehr. Die Endgeräte (Server,Hosts,etc) stehen
somit ohne gültige Adressen dar.
Drüber hinaus werden Firewallregeln oftmals an die IP-Adresse gebunden. Im Fall eines Providerwechsels sind somit alle Firewallregeln veraltet, da vom neuen Provider das Global-Routing-Prefix verändert wird.
Im Regelfall sollte ein Rechner mindestens drei IP-Adressen
haben, die Link-Local-Adresse, die ULA-Adresse und eine
Global-Unique-Adresse.
Wobei die ULA-Adresse ein eigener vom Administrator gepflegter
Adressbereich ist, um im LAN zu kommunizieren und um eine
Abhängigkeit vom Provider auszuschließen.
Die ersten 8 Bits sind nach RFC 4193 fest definiert.
fdxx::/8
Dabei ist ein lokales Prefix nur 48 Bit lang und nicht 64 Bit.
Da die ersten 8 Bit bereits definiert sind, müssen die nächsten
40 Bit, welche als Globale-ID gelten,
generiert werden. Die folgenden 16 Bit sind dann dazu da,
weitere Subnetze zu bilden.
Mit 16 Bit sind demnach 65536 verschiedene Subnetze in einem
lokalen Prefix möglich. Das sollte erstmal reichen. Subnetting
bekommt hier nochmal eine ganz eigene Bedeutung. Dazu später
mehr.
Hier ein Beispiel für ein ULA-Prefix mit einer generierten Global-ID:
fd2a:1ab2:4d5e:0000::/48
Die ersten 8 Bit der ULA sind fest, der Rest wird vom Admin
frei vergeben.
Dabei gilt: Ein lokales Prefix, die ULA, muss per
Zufall entstehen. Ein lokales Prefix darf
nicht frei gewählt werden, sondern muss
gebildet werden. Dies soll Eindeutigkeiten im Netzwerk
verhindern. Ein Grund könnte sein, dass die Wahrscheinlichkeit
bei der Admins leicht zu merkende Zahlenfolgen als Global ID
verwenden einfach zu hoch ist.
Im ersten Schritt wird über NTP, Network Time Protocol, die
Uhrzeit im 64 Bit Format abgefragt: 01011100101….
Danach wird eine echte MAC-Adresse einer verwendeten
Netzwerkkarte ermittelt. Das kann die eigene MAC-Adresse sein,
muss aber nicht, da der Prefix innerhalb des Netzwerkes ja
überall gleich sein muss. Deshalb ist auch eine andere, echte
und somit eindeutige MAC Adresse möglich.
Die 48 Bit der MAC-Adresse werden in der Mitte geteilt und mit
Füllbits in Form “FFFE” (HEX) erweitert und im EUI 64 Format
abgespeichert.
(dazu später Mehr): 1101011011000…
Diese beiden Werte (Uhrzeit +EUI 64) werden zusammengeführt.
Das Ergebnis der Zusammenführung ergibt einen 128 Bit langen
Datenstrom welcher durch einen SHA-1 Algorithmus nochmals
verarbeitet wird und im Ergebnis eine Prüfsumme
bildet.
Von dieser Prüfsumme werden die letzten 40 Bit
in der IPv6 Adresse als Global-ID genutzt.
toll oder? ;-)
Um ULA-Prefixe zu generieren, werden ULA-Generatoren verwendet,
die im Internet zu finden und frei verfügbar sind.
Zum Beispiel: RFC4193
IPv6 Generator
Danach hat man die Möglichkeit, diesen Prefix in eine globale
Datenbank einzutragen. Dies sollte aber nur dann
erfolgen, wenn der Prefix auch wirklich genutzt wird. Sonst ist
die Datenbank irgendwann zugemüllt.
Aber Achtung:
Auch wenn das generierte ULA-Prefix durch den verwendeten
Algorithmus sehr wahrscheinlich eindeutig ist, werden diese im
Internet nicht geroutet.
Kollisionen können auftreten, denn es erfolgt keine
Kontrolle durch die IANA. Durch ein eventuelles Routing der
selbst generierten Adressen würde es wieder zu Fragmentierungen
kommen, die nicht gewollt sind. ULA-Adressen zu routen ergibt
also keinen Sinn.
Außerdem werden zusätzlich noch 16 Bit für das Subnetting
verwendet. Das sind wie bereits beschrieben 65536 Netze mit
jeweils 2^64 Hostadressen. Das sind ca. 18 Trillionen
Endgeräte.
Also das gesamte Internet multipliziert mit dem gesamten
Internet mal 65536 - So groß ist kein Netzwerk.
Bei IPv6 sind die Dimensionen immer sehr groß.
Jedes Interface im Netzwerk benötigt eine Link-Local-Adresse um switchweit kommunizieren zu können. Die Link-Local-Adresse wird auch benötigt, um Dienste, die auf dem eigenen Rechner bereitgestellt werden, ansprechen zu können. Deshalb generiert ein Computersystem immer selbstständig eine Link-Local-Adresse.
Der Prefix einer Link-Local-Adresse ist:
fe80:: /64
Mit folgenden Befehlen in der Kommandozeilenoberfläche kann man seine Link-Local-Adresse ermitteln.
Der Scope ist auf das lokale Netz (Switch) beschränkt. Verwendet wird die Adresse beispielsweise im Neighbour-Discovery-Protokoll um die Layer 2 Adressen der weiteren Kommunikationspartner im LAN zu ermitteln. (ARP-Ersatz)
Des weiteren werden darüber die automatische Konfigurationen
der Interfaces organisiert (DHCPv6).
Über die Link-Local-Adresse hat der Rechner also die
Möglichkeit, innerhalb seines LANs mit anderen Teilnehmern zu
kommunizieren, ohne eine spezielle Adresse von außerhalb zu
bekommen.
Jedes Interface hat eine solche Adresse, diese wird im Regelfall selbständig generiert (zufällig), kann aber auch angepasst werden. Die Link-Lokal-Adresse wird von Diensten genutzt, die das eigene, switchweite Netzwerk nicht verlassen.
Die grundsätzlichen globalen Prefixe werden hierarchisch von
der IANA verwaltet und an die Nutzer zugewiesen. private
globale Prefixe sind demnach nur schwer bis gar nicht zu
bekommen.
Eine weitere Möglichkeit sich IPv6-Adressen für ein privates
Netzwerk zu generieren sind ULA-Prefixe, welche man sich mit
einem ULA-Generator erstellen kann.
Um auch Zugriff auf das Netzwerk zu erhalten, wird nun
noch der 64Bit-Interface-Identifier benötigt. Denn die
Teilnehmer im Netzwerk müssen entsprechend angesprochen werden
können.
Der Interface-Identifier, also die Host-Adresse der Endgeräte,
wird in der zweiten Hälfte der IPv6-Adresse festgelegt und
besteht genau wie der Prefix aus 64 Bit. Beide zusammen, der
Prefix und der Interface-Identifier bilden dann die 128 Bit der
IPv6-Adresse.
IPv6-Adressen können temporär per DHCP zugeordnet werden. Der Vorteil ist natürlich, dass hierbei auch weitere Informationen automatisiert verteilt werden können. Es gilt aber zu bedenken, dass der Lease hierbei irgendwann abläuft.
Genauso wie bei der Link-Local-Adresse können auch
Interface-Identifier zufällig generiert werden. Je nach
Betriebssystem und Einstellung kann dies temporär oder
dauerhaft erfolgen um z.B. aus sicherheitstechnischen Gründen
die Privatsphäre zu schützen.
In der Regel wird der Interface-Identifier aber aus der MAC
Adresse der Schnittstelle generiert. Das hat Vor- und
Nachteile.
Aber Achtung: Bei global eindeutigen IDs. Insgesamt sind 2^64
Interface-Identifier möglich. Diese sind sehr wahrscheinlich
weltweit immer eindeutig, so dass es durchaus möglich
ist, ein Endgerät anhand der MAC-Adresse weltweit zu tracken.
Dies ist eine Sicherheitslücke, die es zu beachten gilt.
Mithilfe sog. Privacy-Extension kann man dafür sorgen, dass die
Interface-Identifier in kurzen Abständen geändert werden, so
dass eine Nachverfolgung nicht möglich ist.
Das Generieren eines Interface-Identifier aus einer MAC-Adresse erfolgt nach dem Modified-EUI-64 Format.
Da die MAC Adresse weltweit einmalig ist, wird diese als Basis
zur Ermittlung des Interface-Identifier genutzt.
Die MAC Adresse besteht aus 48 Bit (EUI-48), es werden aber 64
Bit benötigt. Deshalb werden, genau in der Mitte der
MAC-Adresse, 16 Füllbits in der Form “ff:fe:” eingesetzt
(EUI-64).
Der Admin kann dein Interface-Identifier auch manuell festlegen
und zuweisen.
Daraus resultieren dann einfach zu schreibenden Adressen, die
mit ::1/64 abgekürzt werden können. Auch
hexadezimale Bezeichnungen wie “affe”,
“cafe” oder “face”, sind
Synonyme, die man sich als Admin leicht merken kann.
Hier noch ein Beispiel: (...:b16b:00b5:...)... na, wer kommt drauf?
Generell ist es gut, wenn man sich die IPv6-Adresse gut merken
kann. Ein Interface-Identifier muss innerhalb eines
Netzwerk-Prefix wie sonst auch alles in der Netzwerktechnik
eindeutig sein.
Der ULA-Prefix hat 64 Bit und wird mit einem /64 in der
IPv6-Adresse angegeben. Das bedeutet, dass der
Interface-Identifier sowohl in einer globalen Adresse als auch
in einer ULA- oder Link-Local-Adresse und sogar in einer
Globalen-IPv6-Adresse gleich sein kann.
Der Host kann also durch die letzten 64 Bit unabhängig vom
Prefix identifiziert werden.
Der Interface-Identifier ist gleich, sowohl im Global- als auch im ULA-Prefix.
Es ergibt sich aber noch eine Herausforderung:
Das siebte Bit der MAC-Adresse, das sog. U/L-Bit, verhindert,
dass ein einfacher Interface-Identifier wie zum Beispiel
"::1 /64" gebildet werden kann.
Das U/L-Bit stellt fest, ob es tatsächlich eine echte MAC-Adresse ist oder eine eigens generierte virtuelle Adresse, die vom Administrator gebildet wurde. Bei einer eindeutigen MAC-Adresse ist dieses Bit auf 0 gesetzt, bei einer selbst generierten auf 1.
Es gilt also: Wenn das 7. Bit einer MAC Adresse eine 0 ist, dann ist diese MAC-Adresse weltweit einmalig. eine 1 bedeutet, dass diese lokal erzeugt wurde.
Das Auffüllen der MAC-Adresse mit den Füllbits "ff:fe" ändert
nichts an der Bedeutung des U/L-Bits. Das 7. Bit signalisiert
immer noch, dass ein eindeutiger Interface-Identifier aus einer
global eindeutigen MAC Adresse gebaut wurde.
Wenn man das siebte Bit "kippt", dann ist das einfache
Generieren eines Interface-Identifiers möglich. Es entsteht
dabei in diesem Fall eine 2 (vorherige Zahl +2) in der Adresse
und die ID gilt nicht mehr als global eindeutig.
02:5a:2c:ff:fe::4f:dd.9a
Die anderen Bits können bei dieser Betrachtung erst einmal vernachlässigt werden.
Wo genau liegt aber das Problem?
Bei einfach zu merkenden Interface-Identifier wie z.B.
2001:db8:a:b::1/64
würde das siebte Bit dem EUI-64 Format anzeigen, dass dies eine
global eindeutige ID ist.
Wenn nun das 7. Bit des Interface-identifier gekippt wird, dann
wird daraus
2001:db8:a:b:200::1/64
Dies wiederum ist aber für den Nutzer nur schwer zu merken. Denn man hat als Nutzer, bzw. Als Admin immer ein Bestreben, die händisch vergebenen IP-Adressen so zu wählen, dass man ein eigenes Konzept umsetzen kann. Wie auch immer dieses aussieht. Wenn dabei immer darauf geachtet werden muss, das siebte Bit zu kippen, wird es komplizierter in der Umsetzung. Komplizierte Dinge sollten allerdings vermieden werden.
Wie sieht demnach eine einfache Lösung aus?
Beim Modified-EUI-64 wird einfach die Bedeutung des siebten Bit geändert.
Das bedeutet, dass bei einer 0 der Interface-Identifier lokal eindeutig und bei einer 1 global eindeutig definiert ist. Die Bedeutung wird einfach umgekehrt. Das hat nun den Vorteil. Dass ein Administrator die Möglichkeit hat, einfache Interface-Identifier zu erstellen, ohne auf das siebte Bit achten zu müssen.
Das "Modified-EUI64-Format" ist das normale Format in dem IPv6 Adressen vergeben werden. Ein Nutzer muss sich im Normalfall nicht darum kümmern. Für Administratoren hingegen kann dies eine wichtige Information sein, um mögliche Fehlkonfigurationen zu vermeiden.
Grundlegendes zu Subnetting mit IPv6.
Bei IPv6 stehen insgesamt 128 Bit bei der Adressbildung zur
Verfügung. Der Prefix einer IPv6-Adresse ist 48 Bit lang
und der Interface-Identifier ist immer 64 Bit lang. Es bleiben
somit noch 16 Bit, um Subnetze zu generieren.
Die Binäre Betrachtung ist wichtig zum Verständnis des Subnettings. Dazu schauen wir uns zuerst nochmal ein Beispiel einer IPv6-Adresse an. Immer darauf achten ob wir das Beispiel in Hex oder Binär darstellen.
fd2a:1ab2:4d5e:0000::/48
Der Interface Identifier ist in diesem Beispiel noch nicht vergeben.
Die 16 Bit zum Subnetting in der IPv6 Adresse stehen derzeit noch alle auf 0. Subnetting bedeutet, dass wir das Hauptnetz in zwei kleinere Netze teilen. Dabei gilt, das bei IPv6 die Netze von vorne getrennt werden. Das hochwertige Bit der 16 Subnetz-Bits wird gekippt und auf 1 gesetzt. Das große Netz wird so halbiert. Die Schreibweise wechselt von 0 auf 8.und die Subnetzmaske wird um 1 erhöht, auf /49.
fd2a:1ab2:4d5e:8000::/49
Es besteht natürlich die Möglichkeit die Subnetze frei zu vergeben.
z.B. Subnet: 1234 (HEX) oder ABCD (HEX)
oder 0001 und 0002 und 0003 usw.
Solange dies ein kleines Netz ist mit nur einem oder evtl. zwei Routern ist das auch kein Problem. Aber in der Regel werden die Routen verteilt. Hierbei kommt es aufs Supernetting an und darauf, dass die Router miteinander aggregieren. Nun wird auch klar, warum bei der Subnetzbildung von “oben” angefangen wird. Würde das niederwertigste Bit gekippt werden, dann müsste die Subnetzmaske direkt auf /64 erhöht werden.
Natürlich spart man sich dann die binäre Betrachtung, aber das sorgt für ineffizientes Routing, da man Netze beim Supernetting nicht zusammenfassen kann. Werden hingegen Hosts in den einzelnen Netzen verbaut, dann muss die Subnetzmaske direkt auf /64 erhöht werden.