IPv6/Stateless Address Autoconfiguration
SLAAC (Stateless Address Autoconfiguration) ist die automatische Konfiguration von IPv6-Adressen
Autoconfiguration
SLAAC ist Bestandteil der Autoconfiguration, die drei wesentliche Aufgaben hat:
- Generieren einer Link-local Address.
- Durchführen der Stateless Address Autoconfiguration.
- Sicherstellen der Eindeutigkeit der generierten Adressen (Duplicate Address Detection)
Ablauf
- Den ersten Schritt macht der Host, indem er mittels Router Solicitation nach einem Router Advertisement fragt.
- Alternativ könnte er auch ein periodisches Router Advertisement abwarten.
- diese Geduld beobachtet man aber eher selten.
- Der Router verschickt das angeforderte Router Advertisement,welches alle konfigurationsrelevanten Daten enthält.
- Daraufhin führt der Host die Konfiguration des Interfaces durch und prüft die Eindeutigkeit der selbst erzeugten Adressen.
- Wenn diese Eindeutigkeit angenommen werden kann, ist die Konfiguration des Interfaces vollständig und gilt als beendet.
Duplicate Address Detection
Dir Duplicate Address Detection besteht aus mehrere Neighbor Solicitations
- Wenn ein Node feststellen möchte, ob eine Adresse schon von einem anderen Node genutzt wird,dann versucht er die zugehörige Linklayer Address aufzulösen.
- Bleibt eine Antwort aus, benutzt offensichtlich kein anderer Node auf dem Link die überprüfte Adresse.
- Um Fehlschlüsse aufgrund von Paketverlusten zu vermeiden, sollen mehrere Neighbor Solicitations verschickt werden.
Ab wann eine Adresse als eindeutig gilt, hängt von den Parametern der jeweiligen Implementierung ab.
- Jede Adresse hat anfangs den Status tentative (probeweise).
- Erst wenn die Duplicate Address Detection vollständig durchlaufen wurde, und keine Anzeichen darauf schließen lassen, dass die Adresse bereits in Benutzung ist, wird die Adresse valid (gültig).
Ablaufverfolgung
- Ziel ist eine komplette Aufzeichnung Autoconfiguration mit Wireshark aufzufangen.
- Vom Hochfahren des Interfaces bis zu seiner endgültigen Konfiguration.
Interface herunterfahren
# ip link set down dev enp2s0
2: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 link/ether 74:27:ea:e1:b2:b4 brd ff:ff:ff:ff:ff:ff inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0 valid_lft 4826sec preferred_lft 4826sec
Wireshark starten
starten wir Wireshark und lassen ihn auf dem PseudoInterface any lauschen.
$ ssh -X root@localhost root@localhost's password:
# wireshark&
Interface hochfahren
Danach fahren wir enp1s0 wieder hoch:
# ip link set up dev enp2s0
enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 74:27:ea:e1:b2:b4 brd ff:ff:ff:ff:ff:ff inet6 2001::a44d:a161:1a33:c64d/64 scope global dynamic noprefixroute valid_lft 86399sec preferred_lft 14399sec inet6 fe80::99d7:66e5:331d:9449/64 scope link noprefixroute valid_lft forever preferred_lft forever
X
In Wireshark können wir bereits Aktivität beobachten. Wir warten den Abschluss der Konfiguration ab, sie ist erfolgreich verlaufen wenn wir Adressen mit den Parametern scope global und dynamic sehen:
# ip addr show dev enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 50:3e:aa:1f:63:81 brd ff:ff:ff:ff:ff:ff inet 10.30.1.1/24 brd 10.30.1.255 scope global enp1s0 valid_lft forever preferred_lft forever inet6 fe80::523e:aaff:fe1f:6381/64 scope link valid_lft forever preferred_lft forever