Ipv6 SLAAC

Von Nix zu GUA!

By Ramon Franke

Note: Dies ist mein erster Beitrag. Ich versuche mich noch im Schreibstil zu finden. Ich hoffe, du kannst dennoch etwas mit dem Inhalt anfangen. Findest du Fehler, melde dich doch gerne bei mir.

Eine kurze Wiederholung zu IPv6

IPv6 Adressen bestehen aus 128 Bit, wodurch bis zu 340 Sextillionen Adressen vergeben werden koennen. Eine IPv6 Adresse kann grob in zwei Bereiche unterteilt werden. Einmal der Netzwerk Präfix und der Interface Identifier.

Die Schritte im überblick

1. Interface Identifier:

Zunächst wird der Interface Identifier kurz Interface ID gebilded bzw ist es bei IPv6 so, das jedes einzelne Interface eine eigene ID hat. Ähnlich wie bei IPv4 MAC-Adressen. Die Interface ID kann durch mit der MAC Adresse und des EUI64 Formats gebildet werden oder wird durch das aktivieren der Privacy extention zufällig generiert. Wie der Prozess dafür genau aussieht ist an anderer stelle nachzulesen. + Ein Beispiel mit einer MAC-Adresse meines Computers

Physische Adresse . . . . . . . . : 7C-10-C9-41-1E-90
gebildete EUI-64 Adresse . . . . .: 7E10:C9FF:FE41:1E90

Im zweiten Schritt wird jetzt aus der EUI-64 Adresse und dem Präfix fe80::/10 die Link-Lokale-Adresse gebildet. Der Scope einer Link-Lokalen-Adresse reicht nur bis zum Router. Das heißt die Adresse wird nicht geroutet. Damit ist aber unter anderem die Kommunikation mit anderen Clients möglich, was im nächsten Schritt wichtig wird. Hier ein Beispiel mit meiner MAC-Adresse:

Physische Adresse . . . . . . . . : 7C-10-C9-41-1E-90
gebildete EUI-64 Adresse . . . . .: 7E10:C9FF:FE41:1E90
IPv6-Adresse. . . . . . . . . . . : fe80::7E10:C9FF:FE41:1E90 <1>
  1. Der Präfixblock ist fe80::, Die Interfaceid ist 7E10:C9FF:FE41:1E90 (das siebte Bit wird gedreht, aus 7C wird 7E)

3.Duplicate Address Detection (DAD):

Jetzt muss geprüft werden ob die zuvor erstellte Adresse auch wirklich nur einmal im Netzwerk existiert. Es ist zwar sehr unwahrscheinlich, aber dennoch möglich, dass es eine Adressdopplung gibt. Damit es nicht dazu kommt, muss nun also geprüft werden ob es die Adresse bereits in unserem Netzwerk gibt. Dafür verzichtet IPv6 komplett auf Broadcasts. Staddessen wird folgender Prozess benutzt.

Die selbst generierte Link-Lokal Adresse hat jetzt noch den Status tentative, bevor diese nun endgültig im Link-local Scope benutzt wird, führt der Client eine Duplicate-Address-Detection (DAD) durch. Zunächst sendet der Client eine neighbor solicitation Nachricht an die entsprechende solicited-node Adresse, diese gehört zu den Well known Multicast Adressen und bildet sich aus dem Präfix ff02::1:ff+[die letzten 24Bit der Link-Local Adresse]. Dabei wird als Source-Adresse die unspezifische Adresse :: verwendet (der Client darf/kann die generierte IPv6-Adresse ja noch nicht verwenden). Dann wartet der Client eine bestimmte Zeit ab, kommt keine Antwort, verwendet der Client die IPv6 Adresse und sendet ein neighbor advertisment an die all-node Adresse, auch eine Well known Multicast Adresse. In dem anderen Fall, wenn eine Dopplung besteht, sendet der Client mit der bereits reservierten IPv6-Adresse ein neighbor_advertisment an die all-nodes -Multicast-Adresse. Dazu muss man wissen, dass alle Clients im Netzwerk die all-nodes-multicast-Adresse abonieren sobald eine IPv6-Adresse besteht, auch wenn diese noch nicht benutzt werden kann.

Hier ein Beispiel zu Fall Eins. Wichtig sind hier die zwei markierten Pakete, man achte besonders auf die Source- und Destination-Adresse:

DAD

Fall Zwei, eine Adressdopplung:

DAD

4. Präfix holen

Bisher konnten wir nur in unserem LAN kommunizieren. Ins “Internet” können wir mit der aktuellen Adresse noch nicht. Dafür benötigen wir eine GUA eine global unicast address. Adressen aus dem Bereich 2000::/3 werden geroutet. Dafür benötigt unser Client noch ein Präfix. Diesen kann er sich über zwei Wege besorgen. Zum einen kann der Client auf das nächste Router advertisment warten (alle 3 Minuten) oder direkt selber über eine neighbor solicitation anfragen. Wenn der Client die Anfrage direkt stellt, verwendet er dazu die all routers multicast address f02::2. Diese Multicast Adresse wird standardmäßig von allen Routern abonniert. Der Router antwortet dann mit einem router advertisment. Nachfolgend ein Beispiel eines router advertisments, in den mitgesendeten Optionen steht das Präfix.

Crepe

Der letzte Schritt

Nun können wir aus dem Präfix und unserer bekannten Interface-ID, den 2. Schritt wiederholen. Wir kombinieren das Präfix mit unserer ID und bilden so unsere global unicast adress. Mit dieser Adresse kommen wi jetzt ins Internet.

   Physische Adresse . . . . . . . . : 7C-10-C9-41-1E-90
   IPv6-Adresse. . . . . . . . . . . : 2003:dc:f73a:8e00:7E10:C9FF:FE41:1E90

Wireshark Filter:

Hier ein paar nützliche Filter um die Ipv6 Prozesse nachvollziehen zu können: router solicitation: icmpv6.type == 133 router advertisement: icmpv6.type == 134 neighbour solicitation: icmpv6.type == 135 neighbor advertisement: icmpv6.type == 136 Redirect: icmpv6.type == 137

Sonstiges

Ich wollte es noch gerne mit hier rein nehmen wusste aber nicht wie. Das Interface eines Cisco Switches, gut sichtbar sind die abonierten Multicast Adressen.

inserthostname-here#show ipv6 interface vlan 2
Vlan2 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::5054:FF:FE18:8002 
  No Virtual link-local address(es):
  No global unicast address is configured
  Joined group address(es):
    FF02::1
    FF02::1:FF18:8002
  MTU is 1500 bytes
  ICMP error messages limited to one every 100 milliseconds
  ICMP redirects are enabled
  ICMP unreachables are sent
  ND DAD is enabled, number of DAD attempts: 1
  ND reachable time is 30000 milliseconds (using 30000)
  ND NS retransmit interval is 1000 milliseconds

https://www.lancom-systems.de/docs/LCOS/Refmanual/DE/topics/lcos_ipv6_basics_design.html
https://www.itwissen.info/Interface-Identifier-interface-ID-IPv6.html
https://www.elektronik-kompendium.de/sites/net/1902111.html
https://eui64-calc.princelle.org/
https://www.elektronik-kompendium.de/sites/net/1601271.htm
https://ben.akrin.com/mac-address-to-ipv6-link-local-address-online-converter/
https://www.youtube.com/watch?v=JSAfVisCvuI&t=1368s
https://sephi42.wordpress.com/2015/11/17/ipv6-multicast-adressen/
https://theinternetprotocolblog.wordpress.com/2021/02/21/ipv6-duplicate-address-detection/
https://datatracker.ietf.org/doc/html/rfc4861#section-4.4
https://community.cisco.com/t5/switching/why-we-need-ipv6-solicited-multicast-address/td-p/2794231
https://mrncciew.com/2019/10/03/ipv6-neighbor-discovry/
https://www.iternas.com/post/ipv6-erlernen-einer-mac-adresse-solicited-node-multicast-adresse

Share: LinkedIn