IPv6 Basics – Hoe werkt het 2/2
Nu we in deel 1 een korte intro van IPv6 gehad hebben wordt het pas echt interessant. Nu gaan we kijken hoe IPv6 werkt!
Converteren naar binair en decimaal
Het voorbeeld IPv6 adres (2001:db81:85a3:08d3:1319:8a2e:0370:7344) heeft de volgende binaire waarde (en zo leest de computer het IP adres):
0010 0000 0000 0001:1101 1011 1000 0001:1000 0101 1010 0011:0000 1000 1101 0011:0001 0011 0001 1001:1000 1010 0010 1110:0000 0011 0111 0000:0111 0011 0100 0100 |
Het hexadecimale IP adres is 32 karakters lang t.o.v. het 128 karakters lange binaire adres.
De conversie is simpelweg door elk hexadecimaal nummer per stuk om te zetten naar binair. Dus als we kijken naar het eerste octet:
2 = 0010
0 = 0000
0 = 0000
1 = 0001
Dit is gemakkelijker dan het omzetten van een IPv4 adres naar binair omdat je bij IPv4 het hele octet (192) om moest zetten naar binair en niet separaat de 1, de 9 en de 2 zoals we dat bij het hexadecimale IPv6 kunnen doen.
Op bovenstaande manier kunnen we het hexadecimale IPv6 adres ook omzetten naar decimalen.
2 = 2
0 = 0
0 = 0
1 = 1
Het hele 32 karakters lange hexadecimale adres heeft 38 decimale karakters waarbij het niet meer duidelijk is of een getal een tiental is of niet:
2001:131181:85103:08133:1319:810214:0370:7344 |
Trucje met de nullen
Binnen IPv6 kunnen octetten die uit nullen bestaan 1 maal gegroepeerd worden door 2x een dubbele punt (colon).
Bijvoorbeeld:
2001:0b81:0000:0000:0000:0a2e:0000:7344 |
Kan geschreven worden waarbij de octetten samengevoegd zijn met een colon:
2001:0b81::0a2e:0000:7344 |
Ook mogen alle voorloopnullen binnen ieder octet weggelaten worden:
2001:b81:0000:0000:0000:a2e:0000:7344 |
En ieder octet met 4 nullen mag genoteerd worden als 1 nul. Dus het volledige IPv6 adres:
2001:0b81:0000:0000:0000:0a2e:0000:7344 |
Kan als volgt genoteerd worden:
2001:b81::a2e:0:7344 |
De opbouw van een IPv6 adres
Net als bij IPv4 is een gedeelte van het IPv6 adres gereserveerd voor het netwerk en heb je het andere gedeelte ter beschikking voor je hosts. Stel je het volgende IPv6 adres voor:
FE80:0212:34FF:FE56:7890:8a2e:0370:7344/64 |
De /64 is een CIDR notatie (Classless Inter-Domain Routing). Deze geeft aan dat de eerste 64 bits gebruikt worden om het netwerk aan te duiden (het netwerk gedeelte ofwel de prefix). Het volgende gedeelte is dus voor iedere hosts op het netwerk hetzelfde:
FE80:0212:34FF:FE56 |
Het laatste gedeelte is het hosts adres (Interface ID) voor de cliënts op het interne netwerk.
7890:8a2e:0370:7344 |
De host kan zijn volledige 128-bits IP ontvangen via DHCPv6 of zijn prefix via DHCPv6 en SLAAC (StateLess Address AutoConfiguration) en hij kan zelf zijn interface ID (host ID) genereren via het zogenaamde EUI-64 proces.
Als een host op het netwerk komt stuurt hij een link-local router sollicitation multicast request voor zijn configuratie parameters. Als er een SLAAC of DHCPv6 server op het netwerk aanwezig is zal deze de cliënt voorzien van de juiste gegevens.
SLAAC
SLAAC is een methode die door veel IPv6 routers gebruikt worden. De SLAAC router stuurt periodiek een Router Advertisement (RA) bericht naar alle IPv6 apparaten op het netwerk. Cisco routers doen dit standaard iedere 200 seconden. Maar een IPv6 apparaat hoeft hier niet op te wachten en kan zelf ook een Router Sollicitation (RS) naar de router sturen. De router voorziet de cliënt dan van een Prefix, Prefix lengte (subnetmask) en Default Gateway. Hiervoor wordt het NDP (Network Discovery Protocol) gebruikt via ICMPv6 (Internet Comunication Protocol version 6).
DHCPv6
Net als bij IPv4 kan de cliënt zijn volledige adres of alleen de prefix verkrijgen via DHCP (nu DHCPv6 genoemd). Hiervoor moet een DHCPv6 server op het netwerk aanwezig zijn. DHCP kan een cliënt een global unicast adres, prefix lengte, default gateway en DNS server IP adres toewijzen.
SLAAC met DHCPv6
De SLAAC met DHCPv6 optie is een hybride optie waarbij SLAAC de cliënt voorziet van een Prefix, Prefix lengte (subnetmask) en Default Gateway en DHCPv6 de cliënt voorziet van de juiste DNS server.
EUI-64 aan het werk
Als de client een prefix ontvangt via SLAAC of DHCPv6 dan kan hij zelf zijn interface ID (host ID) genereren via het EUI-64 proces. Bij dit wordt gebruik gemaakt van het eigen unieke 48-bits MAC adres. Stel je voor dat het MAC adres als volgt is: 00-12-34-56-78-90. Dan wordt deze verdeeld in 2 delen: 00-12-34 en 56-78-90. Tussen deze delen wordt de toevoeging FFFE geplaatst. Het wordt dan: 001234FFFE567890. Vervolgens word de universal/local bit aangepast. Dit bit is de 7e bit van het eerste octet. Het eerste octet ziet er binair als volgt uit:
0 = 0000
0 = 0000
1 = 0001
2 = 0010
Dus 0000000000010010. Het 7e bit veranderd van een 0 naar een 1 waardoor de hexadecimale waarde als volgt wordt:
0 = 0000
2 = 0010
1 = 0001
2 = 0010
Op dit moment ziet het host IP er als volgt uit:
021234FFFE567890 |
Voor de huidige interface ID wordt een vaste prefix geplaatst om aan te tonen dat het over een intern netwerk gaat. Deze vaste prefix is FE80. Er kunnen ook andere prefixen gebruikt worden als dit expliciet zo geconfigureerd is binnen het netwerk (bij SLAAC en DHCPv6). Het complete host adres wordt dan:
{prefix}FE80:0212:34FF:FE56:7890 |
Het nadeel van de EUI-64 methode is dat het interface ID gedeelte van de host op dit en ieder ander IPv6 netwerk altijd hetzelfde is. Als een device dus meerdere netwerken bezoekt blijft het interface ID van het IPv6 adres hetzelfde waardoor deze getraceerd kan worden. Hiervoor kunnen privacy beschermende maatregelen genomen worden door de administrator. Deze laten de laatste 64 bits regelmatig veranderen. Beter is om je device van een IPv6 adres te laten voorzien door DHCPv6. Deze zorgt voor een periodiek veranderend adres.
Bij IPv4 gebruikte we i.p.v. de CIDR notatie (/24) ook weleens de decimale notatie (255.255.255.0) maar dat doen we niet meer bij IPv6.
Ook zijn we van IPv4 gewend dat een interface maar 1 IP adres heeft. Bij IPv6 komt het regelmatig voor dat een interface meerdere IP adressen heeft. Zo zal er altijd een FE80 adres zijn. Dit is het interne adres waarop devices in hetzelfde LAN met elkaar kunnen communiceren. Deze adressen zijn echter niet routeerbaar (over het internet).
Daarnaast kan het apparaat voorzien zijn van een Unique Local Adres en een globaal IPv6 adres welke uitgegeven is door de ISP en welke routeerbaar is over het internet.
Een regulier IPv6 adres met 64-bits subnetmask is als volgt opgebouwd:

Als we in bovenstaande afbeelding een Link-Local Unicast adres hadden gebruikt van had het subnet ID er dus uitgezien als FE80.
Soorten IPv6 adressen
Binnen IPv6 kennen we een aantal soorten IPv6 adressen. De volgende zijn de meest belangrijke varianten:
Unicast IPv6
Een Unicast adres is een host-to-host adres ofwel voor verkeer dat 1 op 1 gerouteerd moet worden. Er zijn een paar soorten Unicast adressen, namelijk:
Global Unicast IPv6
Deze komt overeen met het oude publieke IPv4 adres. Deze adressen zijn globaal uniek en routeerbaar over het internet. Momenteel worden de volgende Global Unicast adressen uitgedeeld aan providers:
Link-Local Unicast IPv6
Ieder IPv6 apparaat beschikt over een Link-Local Unicast adres. Dit adres wordt gebruikt om binnen het eigen netwerk te communiceren. Dit adres is niet routeerbaar en kan statisch ingesteld worden, via DHCPv6 of SLAAC (zoals hierboven beschreven). Deze adressen hebben altijd de FE80 toevoeging (Subnet ID).
Loopback
Het loopback adres is het oude IPv4 “local” adres. Ieder device beschik over het loopback adres zodat hij pakketten aan zichzelf kan zenden. Je kunt je loopback adres dus ook altijd pingen. Het IPv6 loopback adres ziet er altijd als volgt uit:
::1/128 |
Ofwel:
0000:0000:0000:0000:0000:0000:0000:0001 |
Unspecified address:
Het unspecified adres kan alleen gebruikt worden als “source” adres in een IP pakket wanneer het apparaat geen geldig IPv6 adres heeft of wanneer het “source” adres irrelevant is. Een unspecified adres bestaat alleen uit nullen (dus ::0/128).
Unique Local Address:
Het Unique Local Address is een privé adres welke gebruikt wordt voor lokale adressering binnen 1 of meerdere sites. Dit adres is niet routeerbaar over het internet. De Unique Local Address range is van:
FC00::/7 tot FDFF::/7
IPv4 embedded:
Om Ipv4 langzaam over te laten gaan naar Ipv6. Deze adressen worden toegewezen aan apparaten die met zowel Ipv4 als Ipv6 overweg kunnen (ofwel Dual Stack appartaten). Deze adressen bestaan allemaal uit nullen met uitzondering van de laatste 32-bit die ingevuld worden met het 32-bits Ipv4 adres.
Ipv4:
101.44.61.32 |
Ipv6:
0:0:0:0:0:0:101.44.61.32 (ofwel: ::101.44.61.32) |
Multicast Ipv6
Multicast is te vergelijken met het oude “broadcast” idee. Er bestaan 3 soorten multicast adressen:
All-nodes multicast
Verkeer naar de “all-nodes multicast” adressen gaat naar ieder Ipv6 apparaat op het netwerk. Deze range is als volgt: FF02::1
All-routers multicast
Multicast verkeer naar de “all-routers” groep gaat naar alle routers binnen het netwerk. Een router wordt lid van deze groep als hij Ipv6 geactiveerd heeft en RS (Router Solicitation) berichten kan ontvangen en verwerken. Deze range is als volgt: FF02::2
Solicited node multicast
Dit is een multicast adres dat gebruikt wordt door het NDP (Neighbor Discovery Protocol) en wordt automatisch aangemaakt wanneer de global unicast of link-local unicast adressen worden toegewezen. Dit adres wordt gemaakt door de prefix FF02:0:0:0:0:1:FF:/104 te combineren met de laatste 24 bits van het global unicast of link-local adres.
Anycast Ipv6
Anycast is speciaal voor 1-to-many (van 1 naar een grote groep) communicatie. Denk hierbij b.v. aan b.v. videosharing. Er is geen speciaal adresschema voor Ipv6 Anycast adressen. Anycast is nieuw en heeft als voordeel dat het load sharing tussen routers ondersteund. Met Anycast kun je denken aan het opvragen van een video bij een video farm met servers over de hele wereld. Deze servers werken met anycast waardoor de gebruiker gestuurd wordt naar de server die de load het beste kan verwerken. Het maakt niet uit welke server dit is!
Subnets en Subnetting in Ipv6
Net zoals bij Ipv4 kunnen we subnetting gebruiken bij Ipv6. Door het grote aantal beschikbare adressen is dit minder belangrijk maar de wens kan zeker bestaan om fysiek gescheiden subnetten te hebben. Zorg er allereerst voor dat je je mindset veranderd als je gaat subnetten. Waar we bij IPv4 nog gingen rekenen hoeveel hosts we nodig hadden. Omdat een normaal host netwerk bij IPv6 64-bits lang is en dus miljarden hosts kan bevatten is dat geen probleem meer. Bij IPv6 kijken we hoe we onze beschikbare subnetten zo goed mogelijk kunnen verdelen.
Het wordt wel altijd aangeraden om 64 bits te reserveren voor de interface ID (hosts netwerk) omdat SLAAC en EUI-64 ook altijd 64 bits gebruiken.
Als we de eerder gebruikte afbeelding nog even bekijken:
We zien hierboven een Global Unicast Ipv6 adres zoals deze uitgegeven kan worden door een provider. De eerste 3 octetten (48 bits) zijn vast. Dit is de site prefix. De laatste 64-bits (4 octetten) zijn gereserveerd voor de host netwerken. De 16 bits uit het 4e octet zijn gereserveerd voor het Subnet ID. Met deze 16 bits heb je 65535 mogelijke subnetten tot je beschikking. Je zou je subnetten dus kunnen nummeren met een logisch nummer.
Marketing = subnet 1000
Sales = subnet 2000
Directie = subnet 5000
etc.
Een IP adres van de afdeling marketing is dan gemakkelijk te herkennen aan het subnetmask. Deze ziet er b.v. als volgt uit:
FE80:0212:34FF:<strong>1000</strong>:7890:8a2e:0374:7288/64 |
IPv6 pakket
Het IPv6 pakket ziet er anders uit van het IPv4 pakket en is efficiënter ingericht.
Het pakket bestaat uit een header en een payload. De payload bevat de werkelijke data. De IPv6 header ziet er als volgt uit:
IPv6 pakketten bevatten een kleine standaard header en optioneel nog extra headers. In de vaste header vinden we de IP versie (4 bits), verkeersklasse (packet priority – 8 bits), Flow Label (o.a. voor QoS – 20 bits), Payload Length (pakket formaat – 16 bits), Next header (volgende header – 8 bits), Hop Limit (time to live – 8 bits) enhet source address en het destination address (elk 128 bits).
De header kan voorzien worden van optionele headers als deze benodigd zijn zoals “Router header”, “Fragment header”, Authentication header” en “Encrypted Security Payload header”.
Na de header komt de lading / data. De lading moet minimaal 1280 bytes groot zijn (of 1500 bytes in een omgeving met een flexibele MTU (Maximum Transport Unit) grootte. De lading kan maximaal 65.535 bytes groot worden. Dit is veel groter dan IPv4. Om dit formaat aan te kunnen moeten wel “Jumbo Payloads” ondersteund worden.
Ipv6 beveiliging
De manier waarop we gewend zijn om ons netwerk te beveiligen is gebaseerd op NAT. Middels NAT bij IPv4 sturen we bepaalde poorten naar bepaalde apparaten in ons netwerk. Nu met IPv6 kunnen we diensten doorsturen op basis van IP. Dit voorkomt het openzetten van extra poorten. IPv6 ondersteund ook IPSEC welke ten goede komt aan de vertrouwelijkheid en integriteit van de data.
Sommige beweren dat hierdoor IPv6 een stuk veiliger is dan IPv4 maar dat is niet zo. Ik denk wel dat het veiliger is dan IPv4 maar bekende aanvallen als DoS attacks zijn nog steeds mogelijk. Daarnaast wordt DHCPv6 ondersteund waardoor een kwaadwillende gebruiker een rogue DHCPv6 server opzetten binnen het netwerk om het netwerkverkeer te beïnvloeden.
IPv6 gebruikt Router Advertisements (RA pakketten) die aangeven dat het apparaat een router is en dat er informatie bij de router opgehaald kan worden. Dit klinkt een beetje als ARP Spoofing bij IPv4. Een kwaadwillende gebruiker kan immers ook een rogue router plaatsen en zichzelf voordoen als default gateway om het netwerk verkeer te kunnen lezen.
Heel veel oude kwetsbaarheden van IPv4 blijven van kracht bij IPv6 maar er zijn absoluut goede verbeteringen aangebracht.
Conclusie
Omdat de laatste IPv4 blokken uitgegeven zijn gaan we nu eindelijk de kant op waar we 5 jaar geleden al hadden moeten zijn (of waar de industrie had willen zijn). IPv6 wordt nu langzaam aan geïntroduceerd en zal op termijn IPv4 vervangen. Omdat IPv4 en IPv6 niet goed samenwerken (en een IPv4 netwerk en een separaat netwerk is t.o.v. IPv6) zal de groei van IPv6 steeds sneller gaan. Ik verwacht dat rond 2025 80% van alle netwerken op IPv6 werken. Wanneer IPv4 stopt is niet duidelijk. Wellicht blijft IPv4 wel gebruikt worden voor speciale doeleinden. Mijn advies, wanneer de gelegenheid zich voordoet begin dan alvast met het omzetten van je netwerk. Test alles echter uitvoerig in een testomgeving. Nieuwe technieken bevatten vaak onbekende valkuilen…
Succes!