Adrestoewijzing (DHCP?) in IPv6

In IPv4 kenden we 2 manieren om een computer van een IP-adres te voorzien. Ofwel configureerde je manueel een statisch IP-adres ofwel liet je een IP-adres toewijzen door gebruik te maken van het DHCP-protocol. In IPv6 komt daar een derde manier bij nl. de stateless address autoconfiguration of SLAAC.

Daar elk adres (ongeacht of het een link-local, site-local of global) bestaat uit een prefix en een suffix gebeurt de toewijzing telkens in twee stappen. Eén stap voor het prefix en één stap voor het suffix.

Suffix of interface identifier

Elke computer kan voor zichzelf een suffix berekenen, zonder de hulp van derden. Dit suffix of computer gedeelte wordt ook wel eens de interface identifier genoemd. De meest gebruikte manier om een interface identifier te bepalen noemt ‘64bit Extended Unique Identifier‘ of kortweg EUI-64.  Deze methode is gebaseerd op het in hardware gebakken adres van de netwerkkaart, het MAC-adres. Dit adres is per definitie wereldwijd uniek en niet te wijzigen.

Het MAC-adres kan opgevraagd worden met het commando “ipconfig /all”, het is te vinden naast de titel “Physical Address” (zie 1).

Om van het 48-bits MAC-adres een 64-bits interface identifier te maken wordt precies in het midden van het MAC-adres de code “FFFE” toegevoegd.  Bijvoorbeeld: een MAC-adres “74-D4-35-EB-62-AC” geeft ons de volgende (64 bits) interface identifier “74D4:35FF:FEEB:62AC”. We zijn er nog niet helemaal, om de juiste interface identifier te bekomen moeten we de zevende BIT van links omkeren (0 wordt 1, 1 wordt 0).  We zetten de eerste twee hexadecimale getallen om naar binair (7 en 4 => 0111 en 0100). De zevende bit is een 0 die veranderen we in 1 en we krijgen 0111 0110. Als we dat terug omzetten naar hexadecimaal krijgen we 76. De juiste interface identifier volgens EUI-64 is dus 76D4:35FF:FEEB:62AC (zie 2). (Deze werkwijze staat beschreven in RFC 2373)

Door deze manier van werken te gebruiken is het suffix van je IP-adres altijd hetzelfde ongeacht waar je je bevindt. Je MAC-adres wijzigt immers nooit (onmogelijk!) én bijgevolg dus ook het suffix van je IP-adres niet. Hoewel het prefix van je IP-adres wel zal wijzigen ben je dus makkelijk te traceren. Een inbreuk op je privacy?

Een tweede manier die vooral door Microsoft wordt gebruikt (sinds Windows Vista) is het toekennen van random interface identifier. Er is dus geen enkele link tussen de interface identifier en het MAC-adres. Daarmee is het privacy issue opgelost. Microsoft verwijst naar RFC4941.

Standaard zal Windows gebruik maken van random identifiers. Je kan dit controleren (zie 3) én desgewenst wijzigen naar EUI-64 (zie 4) met de volgende Powershell-commando’s.

Bij het gebruik van random identifiers bestaat de kans dat twee computers in het netwerk hetzelfde suffix krijgen. Die kans is extreem klein namelijk x / 2 tot de 64e macht. Waarbij x het aantal computers in het netwerk dat reeds een IP-adres heeft. Maar we mogen Murphy nooit onderschatten én daarom bestaat het Duplicate Address Detection (DAD) protocol. Je leest er meer over in een andere blog post. Dit protocol gaat na of een gekozen interface identifier al in gebruik is en in het zeldzame geval dat dat zo is wordt er een andere identifier gekozen.

Prefix of network identifier

Voor het samenstellen van het link-local-IP-adres hoeft er nauwelijks nog werk verzet te worden. De network identifier van dit adres is altijd fe80::/10. De berekende interface identifier wordt hier aan toegevoegd.  Bij een interface identifier “76D4:35FF:FEEB:62AC” wordt het link-local-adres dus “FE80::76D4:35FF:FEEB:62AC”. Een netwerkkaart heeft altijd een link-local IPv6 adres zelfs als het niet met een netwerk is verbonden. Dit adres wordt afzonderlijk vermeld in ipconfig.

Voor het toekennen van een prefix voor een global unicast address zijn er verschillende mogelijkheden.  Met deze adressen kom je open en bloot op internet én kunnen dus nooit zelf gekozen worden. Het suffix wordt door je computer zelf gekozen (zie hierboven) het prefix krijg je van je internet provider. Zoals eerder gezegd gebeurt kan dit prefix op drie verschillende manieren toegekend worden.

Methode 1: Statisch IP-adres – Manuele configuratie

Je provider kent je een prefix toe (bv. 2a02:1811:8d08:e700::/64) en deelt je dit mee via een e-mail, brief, contract … Je gaat hiermee zelf aan de slag.  Deze manier van werken wordt zelden tot nooit toegepast o.a. omdat de kans op fouten maken bij het intikken van 32 hexadecimale tekens groot is.

Methode 2: Stateless Address Autoconfiguration (SLAAC)

Je computer vraagt aan alle routers in het netwerk (typisch is er dat maar eentje) om een “router advertisement”. Dit router advertisement is een pakketje dat door de router opgemaakt en verstuurd wordt naar het link-local adres van de computer die erom vroeg. Dit pakketje bevat o.a. de “prefix information” (zie 5). Dit is het prefix dat in je netwerk mag gebruikt worden.

Het aangeboden prefix wordt gecombineerd met het zelf berekende suffix (via EUI-64 of via random identifiers) en zo bekomen we het global unicast IPv6 adres. Verder kan de router advertisement de te gebruiken DNS-servers bevatten, de te gebruiken DNS-suffixes (hier telenet.be) …  De aanvraag en verwerking van een router advertisement wordt geregeld door het Neighbor Discovery Protocol waarover je meer leest in een andere blogpost.

SLAAC zorgt er dus voor dat een eenvoudige router de nodige zaken kan doen om je computers van een goed werkend IPv6-adres te voorzien. Een echte DHCP-server wordt in 90% van alle gevallen overbodig.

Methode 3: Statefull Autoconfiguration (DHCPv6)