Ziggo ondersteunt sinds 1 december IPv6 voor abonnees die gebruikmaken van de bridgefunctionaliteit van de modem, tot grote vreugde van vele tweakers die daar al een tijdje op zaten te wachten. Een kleine kanttekening: het voormalige UPC-gedeelte van het netwerk is nog niet helemaal gereed voor deze overgang, dus abonnees in deze gebieden moeten nog even geduld hebben.
Het IPv6-protocol is de opvolger van IPv4 en is in 1995 geïntroduceerd om een oplossing te bieden voor het tekort aan IPv4-adressen dat men destijds al zag aankomen. De adoptie van IPv6 verloopt echter traag en is ook nu nog lang niet voltooid. Het (her)inrichten van een professionele infrastructuur met IPv6 kost tijd en vereist kennis. Dit heeft er in veel gevallen toe geleid dat het wordt uitgesteld, totdat het uiteindelijk technisch of door regelgeving wordt afgedwongen. Een goed voorbeeld is dat de overheid zichzelf heeft verplicht voor het eind van dit jaar alle overheidswebsites en e-maildomeinen bereikbaar te maken over IPv6.
Velen van jullie hebben zich er in de tussentijd al in verdiept en hebben een redelijk idee van de veranderingen ten opzichte van IPv4. IPv6 aan consumentenzijde is ook niet nieuw. KPN en XS4ALL leveren het bijvoorbeeld al jaren, en in België ligt de adoptie van IPv6 al jaren ver boven de 50 procent.
Nu IPv6 steeds meer gemeengoed wordt en het met de update bij Ziggo nu voor een nieuwe, grote groep gebruikers relevant wordt, leek dit ons een mooi moment om er wat meer aandacht aan te besteden. Dit doen we door het pad te volgen dat door een host wordt afgelegd om zijn IPv6-communicatie op te zetten. Gaandeweg wordt zo de vraag beantwoord wat er achter de instellingen zit die je tegenkomt in het IPv6-gedeelte van je router. Ook leggen we uit wat belangrijk is om te controleren voordat je IPv6 activeert in je thuisnetwerk.
Wat levert Ziggo?
Ziggo biedt al een tijd IPv6 aan voor zijn verbindingen. Standaard krijgen de meeste abonnees een dual stack-lite-, of DS-lite-verbinding. Dit is een Native IPv6-verbinding met IPv4-ondersteuning door middel van carrier grade nat, of CG-nat. Bij DS-lite krijgt de abonnee geen eigen IPv4-adres, maar deelt hij dat met anderen. Voor abonnees die een eigen IP-adres en portforwarding eisen, is het in sommige regio's mogelijk om de verbinding om te zetten in een full dual stack- of full-DS-verbinding, maar in de meeste gevallen kreeg de modem dan IPv4-only-firmware zonder IPv6-ondersteuning.
Een aanzienlijk deel van onze lezers zal een eigen router achter de Ziggo-modem hebben geknoopt en Ziggo hebben verzocht de modem enkel als bridge te laten functioneren. Ook in zo'n geval kreeg je tot op heden slechts één publiek IPv4-adres en geen IPv6-connectiviteit. Deze gebruikers van de bridgemodus krijgen sinds 1 december een full-DS-verbinding geleverd. Een herstart van het modem is vereist om deze functionaliteit te ontgrendelen. Naast een eigen IPv4-adres krijg je een IPv6-netwerksegment toegewezen, waar je zelf adressen in kunt uitdelen. Dit segment heeft een grootte van /56. Om te begrijpen wat die aanduiding inhoudt, beginnen we met adressering.
IPv6-adressen
Het eerste zichtbare verschil van IPv6 ten opzichte van IPv4 zijn de adressen. Bij IPv6 hebben die een lengte van 128bit. Zo’n adres binair uitschrijven, lezen en onthouden is nogal bewerkelijk, dus voor de human readability noteren we de IP-adressen normaal gesproken in acht groepen van vier hexadecimale waarden. Deze groepen worden gescheiden met een dubbele punt. Loze nullen kunnen worden verwijderd om het binaire adres leesbaarder te presenteren. Hoe dit werkt, laten we zien aan de hand van het volgende, willekeurig gekozen (global-unicast-) IPv6-adres:
2001:09a8:0000:000e:0000:0000:0000:0140
Een of meer groepjes van enkel nullen mag je per adres één keer afkorten tot twee dubbele punten ::
2001:09a8:0000:000e::0140
Ten slotte mogen ook voorloopnullen weggenomen worden, zodat dit adres in de verkorte vorm als volgt wordt genoteerd:
2001:9a8:0:e::140
Op je IPv6-verbinding krijg je van de provider een prefix toegewezen: prefix delegation. Dit is het vaste deel van je IP-adres. De lengte van die prefix, het aantal ‘vaste bits’, verschilt per provider en bepaalt hoeveel bits van het adres je zelf kunt toewijzen en dus van hoeveel ip-adressen en subnets je gebruik kunt maken in je eigen netwerk. De grootte van een prefix of netwerksegment wordt aangeduid met het aantal bits dat de prefix gebruikt, bijvoorbeeld /48 of /56.
Bij IPv6 is het gebruikelijk om LAN-segmenten op te delen in subnets met een grootte van 64bit. Als het bovenstaande adres deel uitmaakt van een /64-netwerksegment, is de prefix en notatie van dit segment:
2001:9a8:0:e::/64
Om dit adres in een URL te kunnen gebruiken, is het vaak nodig om dit, in tegenstelling tot een IPv4-adres, tussen blokhaken te zetten, omdat je in een URL normaal gesproken de dubbele punt gebruikt om het adres van een poort te scheiden. Bovenstaand adres kun je dus op de volgende manier in je browser gebruiken met poortnummer: http://[2001:9a8:0:e::140]:80/.
De door Ziggo toegewezen /56-prefix is uiteindelijk zelf te verdelen in 256-subnets van /64-grootte. Dit is te vergelijken met het 192.168.0.0/16-netwerk. Ook dat is eenvoudig op te knippen in 256 subnets, die je bijvoorbeeld kunt toewijzen aan je privénetwerk, gastennetwerk, iot-netwerk enzovoort. Zo zijn deze netwerken administratief, maar ook op beveiligingsgebied van elkaar te scheiden.
link-local- en global-unicastadressen
De belangrijkste IPv6-adresklassen die je in de praktijk zult tegenkomen, zijn link-local- en global-unicastadressen. Het verschil tussen deze twee is vergelijkbaar met wat we bij IPv4 kennen als private (lokale netwerk) en public (internet) IP-adressen.
Het local-hostadres dat verwijst naar de host zelf, bestaat ook bij IPv6. Dit is het adres: ::1. Bij IPv4 kennen we dit als 127.0.0.1/8. Aan de notatie zie je al dat dit bij IPv4 om een segment gaat. Bij IPv6 heb je maar één local-hostadres: het eerder genoemde ::1.
Een link-local-IPv6-adres is non-routable. Een router die een pakket ontvangt van een link-localadres, zal dit niet willen doorsturen naar een ander netwerksegment, zoals internet. Je kunt een link-localadres herkennen doordat het IP-adres altijd begint met fe80::. Het netwerksegment waarbinnen link-localadressen gegenereerd mogen worden, is enorm: /10.
Een host mag zijn link-localadres zelfstandig bepalen, zonder tussenkomst van een router of DHCP(v6)-server. Dit kan (op fe80:: na) een compleet willekeurig adres zijn of via een stappenplan worden gegenereerd: de EUI-64 IID-methode. De host gebruikt het MAC-adres van de netwerkinterface en voegt in het midden van dit adres ff:fe toe. Van het resultaat wordt de zevende bit geflipt en vooraan wordt fe80:: toegevoegd.
Als voorbeeld nemen we het MAC-adres: 16:E1:8C:EF:8D:D1, wat uiteindelijk het link-localadres fe80::14e1:8cff:feef:8dd1 oplevert.
Er is natuurlijk een heel kleine kans dat er geen uniek adres is gegenereerd en er al een andere host met hetzelfde adres online is. Om dit te detecteren, gebruikt de host een methode waarbij gebruikt wordt gemaakt van multicast-adressen.
Multicast
Naast unicast-adressen, waaronder local link en het localhostadres vallen, zijn er multicast-adressen. Netwerkverkeer dat is geadresseerd aan een unicast-adres, komt terecht bij enkel de host die dat adres bezit; multicast-adressen kunnen gebruikt worden om netwerkverkeer bij verschillende hosts tegelijk terecht te laten komen.
Multicast-adressen herken je aan de prefix ff00::/8. Je hebt well-known multicast-adressen zoals ff02::1 en ff02::2. Het eerste adresseert alle nodes en het tweede alle routers op het lokale netwerk.
Hiernaast heb je nog sollicited node multicast-adressen. Dit zijn multicast-adressen beginnend met ff02::1:ff die in de laatste 24bit van het adres het unicast-adres van een host hebben verwerkt. Elke host die een unicast-adres heeft, accepteert verkeer dat gericht is aan het sollicited node multicast-adres dat hij genereert op basis van zijn unicast-adres.
Als we dit toepassen op het voorbeeld van hierboven, komen we op het sollicited node multicast-adres ff02::1:ffef:8dd1.
Het sollicited node multicast-adres wordt onder andere gebruikt bij het mechanisme om te herkennen of een host een uniek IP-adres heeft gegenereerd. De host zal een ping sturen naar zijn eigen multicast-adres. Als hier een antwoord op komt van een andere host, betekent dit dat het adres al in gebruik is. De host zal dan een nieuw adres genereren. Dit mechanisme heet duplicate address detection of dad.
Om buiten het lokale netwerk te communiceren, heeft de host een global-unicastadres nodig. Dit kan de host naast het al verkregen link-localadres gebruiken, aangezien een host verschillende adressen tegelijk op één interface kan hebben. Het adres kan statisch ingesteld worden of dynamisch worden toegewezen. Om dynamisch een adres te krijgen, zijn er bij IPv6 verschillende opties, Slaac en DHCPv6, die je naast elkaar kunt gebruiken en die elkaar kunnen aanvullen. Verderop behandelen we enkele scenario's. Om erachter te komen welke combinatie van deze twee van toepassing is, zal de host een router-advertisement moeten afwachten of een DHCPv6-sollicit moeten uitsturen.
Router-advertisements
Bij IPv6 zenden de routers op gezette tijden een router-advertisement het netwerk in. Een host zal na de autoconfiguratie van een link-localadres zo snel mogelijk een advertisement afdwingen door een router-sollicitation op het netwerk uit te zenden.
In de router-advertisement vindt de host de informatie waarmee hij kan bepalen in welke netwerksituatie hij zich bevindt. Er is in te vinden hoe groot het lokale netwerksegment is, welke prefix (het vaste deel van het IP-adres) is toegewezen en welke default gateway hij mag gebruiken. Verder kan er informatie meegestuurd worden, zoals de domainlijst en nameservers die gebruikt moeten worden. Dit is een vrij nieuwe toevoeging, die pas sinds de Windows 10 Creators Update in Windows zit en al geruime tijd in Linux. Ook vindt de host er informatie over hoe hij aan zijn global adres kan komen, bijvoorbeeld of hij dat zelf mag bepalen of juist niet, of dat hij het aan een DHCPv6-server moet vragen.
Slaac
Slaac staat voor Stateless Address Auto Configuration, kortweg: stateless configuration genoemd, en is een methode om zonder tussenkomst van een DHCPv6-server een IPv6-global-unicastadres te genereren.
De host combineert de ontvangen prefix uit de router-advertisement bijvoorbeeld met zijn eigen link-localadres om zo zelf zijn eigen adres op te bouwen. Het adres van de router die de advertisement uitdeelde, wordt ingesteld als local gateway, zodat de pakketten bestemd voor andere netwerken naar het juiste pad worden geleid. Ook nu zal de host door middel van dad controleren of er een uniek adres is gegenereerd.
Hierna blijft enkel nog de vraag over welke DNS-server gebruikt moet worden. Dit kan al verpakt zijn in de router-advertisement of het moet worden aangevraagd bij de DHCPv6-server, die in dit geval enkel DNS-informatie uitdeelt.
DHCPv6
Als de router-advertisement aangeeft dat er in het netwerk sprake is van stateful configuration of als de host de nameservers en andere configuratie via het DHCP-protocol nodig heeft, wordt vanaf het ontvangen en verwerken van de router-advertisement de volgende route bewandeld:
- de host doet een DHCPv6-sollicit-aanvraag op het netwerk;
- de DHCPv6-server antwoord met een advertise om de aanwezigheid en het adres kenbaar te maken;
- de host doet een request of other information-aanvraag;
- de server antwoordt met een adres dat de host mag gebruiken of met other information, zoals de DNS-serverlijst en de domeinnaam van het netwerk.
Het grote verschil met Slaac+DHCPv6 voor DNS is dus de request waarmee de host aangeeft een IPv6- global-unicastadres te willen verkrijgen.
De firewall
Bij het gebruik van network address translation, of nat, zoals gebruikelijk is bij de meeste thuisgebruikers die over minder IPv4-adressen dan apparaten beschikken, stuurt de router alle aanvragen van binnen naar buiten vanaf zijn eigen publieke IP-adres en zorgt hij er aan de hand van de nat-tabel voor dat antwoorden intern weer bij de juiste host terechtkomen. Dit voorkomt automatisch dat een apparaat op je netwerk zomaar vanaf internet bereikbaar is, tenzij je een port forward instelt of het apparaat zelf met UPnP een poort aanvraagt. Het nat-mechanisme is bij IPv6 niet meer nodig, want je hebt nu meer adressen beschikbaar dan je apparaten hebt. Daarmee valt voor je gevoel misschien een stukje ‘veiligheid’ van nat weg, maar die functie verschuift bij IPv6 naar de firewall.
De firewall was bij IPv4 al nodig om ervoor te zorgen dat niet iedereen zomaar bij de beheerinterface van je router kon komen. Met IPv6 neemt hij echter ook de 'beveiliging' die nat bood, voor zijn rekening. De firewall ziet een verzoek van een interne host naar een externe host en zorgt ervoor dat er tweewegcommunicatie mogelijk is. Als dit andersom gebeurt, dus een externe host wil een host binnen je netwerk bereiken zonder voorafgaand verzoek van binnenuit, blokkeert de firewall het verzoek, tenzij er expliciet een regel is ingesteld voor toegang. De meeste besturingssystemen hebben een firewall waarin dit gedrag standaard is geactiveerd. Verkeer afkomstig vanaf het eigen lokale netwerk kan iets soepeler worden behandeld en kan dus eventueel meer privileges krijgen, zoals SMB-verkeer voor het lokaal delen van bestanden.
Services die vanaf internet via IPv6 toegankelijk moeten zijn, worden nu dan ook toegelaten in de firewall van je router, waar je de regels bepaalt welke hosts extern bereikbaar moeten zijn op welke poort(ranges). Portforwarding is bij IPv6 dus niet meer van toepassing, tenminste, het is niet het standaardgedrag. Je kunt nog steeds nat gebruiken in combinatie met IPv6 als dat gewenst is.
Doordat de firewall van de router nu een belangrijke rol speelt, is het wel opletten geblazen met apparatuur met een managementinterface, zoals IP-camera's, nas-schijven, homeservers, iot en overige apparatuur die verbindingen aanbiedt over bijvoorbeeld HTTP, SSH of soms zelfs nog telnet. Deze hebben meestal geen eigen lokale firewall en accepteren verkeer van alle bronnen. Als de firewall op je router niet actief is, zijn deze apparaten open en bloot bereikbaar op hun IPv6-adres.
Privacy
Bij het gebruik van een statisch IPv6-adres komen er wat privacyzorgen om de hoek kijken. Als een host zich altijd meldt met een vast, uniek IP-adres, is het mogelijk om individuele apparaten in jouw netwerk te volgen. Bij IPv4 in combinatie met nat, waarbij veel apparaten gebruikmaken van hetzelfde IPv4-adres, speelt dit minder, zeker in het geval van CG-nat, waarmee je dat adres deelt met andere gebruikers.
Om dit tegen te gaan, zijn er IPv6-privacyextensions beschikbaar, die bij de meeste besturingssystemen standaard zijn geactiveerd. Bij geactiveerde privacyextensions kun je via Slaac voor elke verbinding zelf een uniek IPv6-adres genereren en daarmee communiceren met de externe host. Nadat de communicatie over is, kan dit adres weer in de prullenbak. Het is dan nog steeds mogelijk om jouw netwerk te volgen, maar niet meer de individuele apparaten. Daarnaast heeft IPv6 als voordeel dat het je privacy verbetert doordat je veel meer adressen tot je beschikking hebt. Een volledig IPv4-netwerk scannen is geen enkele moeite; maar alle 2^64 adressen van een /64-IPv6 netwerk scannen duurt al snel duizenden jaren.
Een makkelijke manier om te controleren of je gebruikmaakt van privacyextensions, is door het bezoeken van https://ip.bieringer.net/. Hier zou je onder de EUI64_SCOPE de waarde 'local random of iid-privacy' moeten zien. Zie je dit niet, controleer dan of stateless configuratie is ingesteld op je router.
Instellen van je thuisnetwerk
Hopelijk is duidelijk geworden dat het in elk geval van belang is om de firewallinstellingen na te lopen. De stappen hiervoor verschillen uiteraard van router-tot-router, maar als voorbeeld zullen we de IPv6- en firewall-instellingen van een ASUS-router doornemen. De eerste stap is het activeren van IPv6 en het aangeven van DHCP/Slaac-instellingen.
Bij deze router is bij het selecteren van Native IPv6 als connectietype alles al goed ingesteld. Belangrijk is dat DHCP-PD, of prefix delegation, aanstaat. Dan vraagt de router aan Ziggo een IPv6-segment om te verdelen. Eventueel moet je handmatig aangeven dat het om een /56-segment gaat, maar in veel gevallen wordt dat al automatisch gedetecteerd.
De autoconfigurationsetting is uitgebreid behandeld. Wat je zelf kiest, stateful of stateless, is afhankelijk van je situatie. In de meeste gevallen is stateless prima. Wil je controle uitoefenen over de adressering van je hosts vanaf de router of DHCPv6-server, dan zul je stateful adressering moeten kiezen. Afhankelijk van de mogelijkheden van de DHCPv6-functie van je router kun je dan bijvoorbeeld statische adressen toewijzen of de range bepalen waarin adressen worden uitgedeeld. Met vaste IP-adressering vervalt wel het eerder genoemde voordeel van privacyextensions.
Door naar de firewallinstellingen:
De belangrijkste instelling die hier gecontroleerd moet worden, is of de firewall enabled is.
Als er in je netwerk een server of ander apparaat aanwezig is dat bereikbaar moet zijn vanaf internet, moet je hiervoor een firewallregel instellen. In het voorbeeld zie je een regel die is aangemaakt voor een homeassistantserver in het netwerk. Hier wordt het IPv6-adres opgegeven van het lokale apparaat en de poort die bereikbaar moet zijn. Eventueel kan de toegang tot het apparaat tot een range of enkel adres worden beperkt.
Tot slot
Met bovenstaande informatie heb je de belangrijkste informatie om jouw netwerk klaar te maken voor IPv6. Als extra check om je instellingen te testen, kun bijvoorbeeld je ipv6-test.com bezoeken. Ook het eerder genoemde ip.bieringer.net geeft veel informatie over je IPv6-configuratie. Ben je geïnteresseerd in het serveraspect rondom IPv6, zoals DNS en e-mailservers, dan is het Hurricane Electric IPv6 Certification Project interessant, en bovendien gratis te volgen.
Foto: MR.Cole_Photographer / Getty Images.