SLAAC - Stateless Address Autoconfiguration (IPv6)
Die Stateless Address Autoconfiguration (SLAAC) ist ein Verfahren zur zustandslosen und automatischen Konfiguration von IPv6-Adressen an einem Netzwerk-Interface. Mit "stateless" oder "zustandslos" ist gemeint, dass die jeweilige IPv6-Adresse nicht zentral vergeben und gespeichert wird. Demnach erzeugt sich der Host seine IPv6-Adresse unter Zuhilfenahme zusätzlicher Informationen selbst. SLAAC ist die Weiterentwicklung von Verfahren für die klassische IP-Autokonfiguration unter IPv6. Anders als bei IPv4 übernehmen IPv6-Router dabei eine aktive Rolle.
Man unterscheidet grob gesehen zwischen link-lokalen IPv6-Adressen (Local Scope) und globalen IPv6-Adressen (Global Scope). Mit der Stateless Address Autoconfiguration kann sich ein IPv6-Host sowohl eine link-lokale, wie auch auf eine globale IPv6-Adresse erzeugen.
SLAAC für eine link-lokale IPv6-Adresse (ohne Privacy Extensions)
Eine IPv6-Adresse besteht aus insgesamt 128 Bit. Eine link-lokale IPv6-Adresse wird aus einem Präfix (64 Bit) und einem Suffix (64 Bit) gebildet. Der Präfix für alle link-lokalen IPv6-Adressen ist immer "fe80:0000:0000:0000". Das Suffix (Interface Identifier) ist der EUI-64-Identifier oder IEEE-Identifier, der aus der MAC-Adresse (Hardware-Adresse des Netzwerkadapters) gebildet wird. In der Mitte der Hardware-Adresse (zwischen dem dritten und dem vierten Byte) werden zwei feste Bytes (ff:fe) eingefügt. Das siebte Bit im ersten Byte der MAC-Adresse wird umgekehrt. Aus der MAC-Adresse 00:0c:f1:8e:c1:d8 wird so der Interface Identifier 020c:f1ff:fe8e:c1d8. Auf diese Weise bildet sich ein Host seine eigene link-lokale Adresse. Hier "fe80::020c:f1ff:fe8e:c1d8".
Bevor ein Host seine link-lokale Adresse nutzen kann muss er eine Duplicate Address Detection (DAD) durchführen, um festzustellen ob die Adresse im Netz womöglich bereits existiert.
- Neighbor Solicitation: Dazu schickt der Host eine Anfrage ins lokale Netz.
- Neighbor Advertisement: Falls eine andere Station die Adresse bereits nutzt, kommt eine Antwort zurück.
Wenn ja, dann muss die IPv6-Adresse vom Anwender manuell geändert werden. In der Regel ist das nicht notwendig, weil MAC-Adressen in der Regel weltweit einmalig sind. Sollte doch einmal eine Doppelung vorkommen, dann sollte man das Netzwerk überprüfen. Dann könnte es sein, dass jemand eine MAC-Adresse gekapert hat und per MAC-Spoofing ins Netzwerk eingedrungen ist.
Erst wenn keine Dopplung vorkommt bindet sich das Interface an diese Adresse. Anschließend kommuniziert der Host im lokalen Netzwerk mit dieser IPv6-Adresse.
SLAAC für eine globale IPv6-Adresse (ohne Privacy Extensions)
Mit seiner link-lokalen IPv6-Adresse kann der Host nur im lokalen Netzwerk kommunizieren. Für das Internet braucht er eine zusätzliche IPv6-Adresse, die er sich ebenfalls selber generiert. Dazu muss der Host beim Standard-Gateway (nächster Router) nachfragen, was der Präfix des öffentlichen Adressblocks ist. Es handelt sich dabei um die Netzadresse, die in der Regel 64 Bit umfasst. In der Regel verschickt der Router den Präfix in regelmäßigen Abständen per Router Advertisement. Sofern der Client oder Host diesen noch nicht erhalten hat, kann er den Präfix auch per Solicitation Message (Router Soliciattion) anfordern.
- Router Solicitation (Solicitation Message): Mit seiner link-lokalen IPv6-Adresse bittet der Host auf der Multicast-Adresse "ff02::2" um den Präfix.
- Router Advertisement (Advertisement Message): Der Router schickt daraufhin eine Nachricht mit dem globalen Präfix für dieses Netzwerk und der MTU (Größe der IP-Pakete).
Aus dem Präfix und Suffix erzeugt der Host seine globale IPv6-Adresse. Der Suffix ist eine EUI-64-Adresse, die aus der Hardware-Adresse (MAC-Adresse) erzeugt wird.
Danach prüft der Host, ob diese Adresse im lokalen Netzwerk schon vergeben ist (Duplicate Address Detection, DAD). Wenn sie frei ist, weist er die globale Adresse seiner Netzwerkschnittstelle zu.
SLAAC mit Privacy Extensions (Lösung des Datenschutz-Problems)
Der Hostanteil bzw. Interface Identifier einer per SLAAC erzeugten IPv6-Adresse ist weltweit eindeutig, sofern die dafür verwendete MAC-Adresse einmalig verwendet wird. Das bedeutet, am Interface Identifier kann man einen Host identifizieren. Unabhängig in welchem Netz (Präfix) er sich befindet. Da alle Computer und Computer-ähnlichen Geräte über eine oder mehrere Hardware-Adressen verfügen ist jeder Host identifizierbar. Da viel Hosts, zum Beispiel Smartphones und Tablets, nur von einer Person genutzt werden, sind Interface Identifier personenbezogene Daten. Somit wäre jeder Nutzer jederzeit identifizierbar. Mit der Einführung von IPv6 ist damit die Angst um den Verlust der Privatsphäre gestiegen.
Deshalb gibt es aus Gründen des Datenschutzes die Erweiterung "Privacy Extensions", die standardmäßig in allen IPv6-Clients aktiviert ist. Statt die eindeutige MAC-Adresse für den Interface Identifier zu verwenden, generiert der Host für den Interface Identifier einen pseudozufälligen Hash-Wert.
Ein anderes Verfahren erzeugt Cryptographically Generated Addresses (CGAs). Auch CGN verhindert eine Lokalisierung des Clients anhand seiner IPv6-Adresse.
Unvollständige Autokonfiguration
Die IP-Autokonfiguration per SLAAC ist allerdings nicht ganz vollständig. Es werden keine Adressen für DNS- oder NTP-Server erzeugt. Allerdings ist für eine Verbindung ins Internet mit Domain-Namen die Adresse eines DNS-Servers zwingend notwendig. Ursprünglich war die Verteilung über einen zusätzlichen DHCPv6-Server vorgesehen. Im Rahmen von Router-Advertisements definiert RFC 6106 die RDNSS-Option (Recursive DNS-Server). Mit der RDNSS-Option erfolgt die IPv6-Autokonfiguration der Clients mittels Router-Advertisements mit einer globalen IPv6-Adresse (Netzwerk-ID), dem Default-Router und dem DNS-Server. Weitere Parameter (etwa NTP-Server) erfordern DHCPv6. Ein Hostname kann beispielsweise über Bonjour (Apple), PNRP (Microsoft) oder DHCPv6 zugewiesen werden.
Leider fehlt für die vollständige Autokonfiguration über Router-Advertisements (SLAAC) vielen Betriebssystemen die RDNSS-Option. Dazu gehören Windows 7 und 8, sowie einige ältere Linux-Distributionen. Bei anderen Betriebssystemen und Geräten ist es womöglich ebenso.
Ein DHCPv6-Server ist deshalb für die DNS-Konfiguration dringend notwendig, weil die Unterstützung der RDNSS-Option oftmals fehlt. Weil das Betriebssystem Windows XP keinen DHCPv6-Client hat, ist es nur eingeschränkt IPv6-fähig. Es kann auf IPv6-Ebene keine Domain-Namen auflösen. Es sei denn man konfiguriert die IPv6-Adresse des DNS-Servers manuell.
Betriebssystem | Windows XP | Windows 7 | Windows 8 | Ubuntu 11.10 | Ubuntu 12.04 | Mac OS X ab 10.7 | iOS ab V6 | Android 4.2 |
---|---|---|---|---|---|---|---|---|
IPv6-Support | ja, deaktiviert | ja | ja | ja | ja | ja | ja | ja |
IPv6-Adresse (RA) | ja | ja | ja | ja | ja | ja | ja | ja |
Default-Route (RA) | ja | ja | ja | ja | ja | ja | ja | geräteabhängig |
RDNSS-Option | nein | nein | nein | ja | ja | ja | ja | nein |
Privacy Extensions | Default | Default | Default | manuell | manuell | Default | Default | Default |
DHCPv6-Client | ja, deaktiviert | ja | ja | ja, deaktiviert | ja | ja | ja | nein |
Hinweis: Dass die RDNSS-Option bei manchen Clients fehlt, spielt in einer Dual-Stack-Umgebung (IPv4 und IPv6 im Parallelbetrieb) keine Rolle. Es ist ausreichend, wenn die Clients die Adresse des DNS-Servers über DHCPv4 zugewiesen bekommen. Zur Namensauflösung verwendet der Client dann die IPv4-Adresse des DNS-Servers und bekommt die IPv4-Adresse und falls vorhanden auch die IPv6-Adresse zurück. Sofern der Client eine globale IPv6-Adresse hat wird er die Verbindung wahlweise über IPv4 oder IPv6 aufbauen.
SLAAC bei Servern und Routern
Jeder IPv6-Client richtet automatisch eine eigene link-lokale und globale IPv6-Adressen ein. Für die meisten Endgeräte ist das eine praktische Lösung. Doch bei einem Server oder Router sollten sich die IP-Adressen nicht ändern. Insbesondere dann nicht, wenn dem Server per DNS ein Host- oder Domain-Name zugeordnet ist. Und fürs IP-Routing muss ein Router zwangsläufig eine feste IP-Adresse haben. Hier sollte man die IPv6-Adresse manuell zuweisen oder zentral per DHCPv6 eine statische IP-Adresse vergeben.
Bei Servern empfiehlt es sich daher, die Autokonfiguration (SLAAC) zu deaktivieren bzw. serverseitig zu ignorieren und eine statische IPv6-Adressen nach dem Zufallsprinzip zu erzeugen und nicht durchnummeriert vergeben.
Aufgaben und Übungen mit dem Raspberry Pi
Wer mit IPv6 experimentieren will, der kann das zum Beispiel auf einem Raspberry Pi tun. Dazu gibt es ein paar Aufgaben und Übungen speziell für IPv6.
- IPv6 auf dem Raspberry Pi einschalten und konfigurieren
- IPv6 Privacy Extensions im Raspberry Pi aktivieren
- Feste IPv6-Adresse für den Raspberry Pi einrichten
- IPv6-Tunnel für SixXS mit aiccu einrichten (Raspberry Pi)
- IPv6-Firewall für einen IPv6-Tunnel einrichten (Raspberry Pi)
- IPv6-Gateway einrichten (Raspberry Pi)