1
Op de userdag van september 2009 heb ik in de sessie over netwerken een Intranet netwerkmodel uitgetekend dat gebaseerd is op de volgende concepten: • (+) Alle clients verhuizen we buiten de perimeter. Dit heeft als gevolg dat zij buiten de firewall komen te staan en dat de toegang tot de servers steeds als een remote access probleem kan gezien worden. • (+) We kunnen dan de perimeter beperken tot de servers alleen; ttz de belangrijke resources die al de data bevatten. • (+) Tenslotte voorzien we 2 toegangspaden: één voor de managed clients en één voor de unmanaged clients. De Microsoft technologie DirectAccess, geïmplementeerd in Windows 7 en Windows 2008 R2, maakt de managed toegang mogelijk. (+) Deze DirectAccess is op zijn beurt gebaseerd op de IPv6 technologie. Uiteraard zijn een aantal wat men noemt transitie technologiën noodzakelijk en dit zolang niet exclusief over het ganse pad met IPv6 kan gewerkt worden.
2
Bekijken we nu het resultaat van een “ipconfig /all” op een IPv6 geconfigureerde Windows 7 box dan zien we toch een aantal merkwaardigheden. Wat onmiddellijk opvalt is dat er meerdere IPv6 adressen toegekend zijn (hier 3), daarentegen slechts 1 IPv4 adres. Bovendien zijn de IPv6 adressen moeilijk te lezen, laat staan te onthouden. Wat is de trouwens de betekenis van die “%8” en de term “Preferred”? (+)
3
Allemaal vragen die we zullen proberen te beantwoorden. (+) Na deze sessie is het de bedoeling dat jullie in staat zijn deze IPv6 adressen te lezen en te interpreteren. (+) Als je Vista, Windows 7, Windows 2008 of Windows 2008 R2 gebruikt, heb je wellicht reeds opgemerkt dat standaard het IPv6 protocol geactiveerd is. Meer nog, het is zelfs het voorkeursprotocol. Echter, niet elke applicatie is zomaar IPv6 compatibel. Afhankelijk van de netwerkconfiguratie (*) kan je dus in een situatie terecht komen dat de OS standaard via IPv6 willen communiceren maar dat de applicatie daar niet overweg mee kan. Het is dus belangrijk dat elke applicatie ook effectief in de IPv6 omgeving getest wordt. (*) Het gebruik van IPv6 wijzigt enkel de netwerklaag in het OSI model (layer-3). Hieruit volgt dat de introductie van IPv6 volledig datalinklaag (layer-2) agnostic is. Anders uitgedrukt, elk layer-2 toestel (hub, bridge of switch) is per definitie IPv6 compatibel en zal dus zonder problemen IPv6 pakketten transporteren. Dus, in een “single subnet” (link) netwerk is er altijd een volwaardige IPv6 connectiviteit.
4
5
6
De term “Subnet” wordt gebruikt in de IPv4 wereld. In de IPv6 wereld spreekt men daarentegen over “Link”. Dit is een heel belangrijk gegeven om de IPv6 RFC’s te kunnen begrijpen. Een voorbeeld. Mijn laptop heeft een Ethernet (RJ45) en een draadloze netwerk adapter; dit zijn dus 2 links. Zet ik nu nog een VPN connectie op naar Cevi, dan wordt er een 3de link toegevoegd.
Sterk vereenvoudigd verloopt de communicatie als volgt: • Ik heb een IP adres en wens te communiceren met jouw IP adres. • Zitten we op hetzelfde subnet dan kan ik rechtstreeks met jou communiceren door naar jou te “roepen”; cfr CSMA/CD (Carrier Sense Multiple Access with Collision Detection) & ARP broadcast (Address Resolution Protocol). • Zitten we niet op hetzelfde subnet dan kan ik niet rechtstreeks met jou communiceren. Ik moet daarentegen het IP packet versturen naar mijn lokale router die het dan verder zal versturen in jouw richting. Anders uitgedrukt (+), de IP’s hoofdtaak is te bepalen: “moet ik roepen of moet ik routeren?”. Hoe kan de IPv4 software (stack) nu weten of hij moet roepen of routeren? Hiertoe wordt het concept “subnet mask” gebruikt. Aan de hand van je eigen IP adres en het subnet mask kan je bepalen of het bestemmingsadres al of niet tot jouw subnet behoort; m.a.w. bepalen of je moet roepen of routeren. Dus (+), als je wil meespelen op een IPv4 netwerk dan moet je minimaal beschikken over een IP adres, een subnet mask en het IP adres van je lokale router. Deze elementen configureren we normaal via een DHCP server of manueel.
7
Een IPv4 adres bestaat uit 32 bits (32/8 = 4 bytes) en wordt geschreven in “dotted decimal notation”. Oorspronkelijk werd de subnet mask eveneens geschreven in “dotted decimal notation”. De bits die het subnet bepalen werden op “1” gezet. De rest op “0”. Sinds 1993 (RFC 1519) werd de CIDR (Classless Inter-Domain Routing) notatie ingevoerd.
8
Oorspronkelijk werd in 1981 de 32-bit adresruimte opgedeeld in 3 bereiken (RFC 791) : A, B en C. Hier was geen expliciete subnet mask noodzakelijk omdat het bereik impliciet een subnet mask definiëerde. Zoals reeds gezegd, sinds 1993 (RFC 1519) werd de CIDR (Classless Inter-Domain Routing) notatie ingevoerd en is een expliciet subnet mask wel noodzakelijk. (+) Private IP adressen worden gebruikt in private netwerken die geen full Internet connectiviteit nodig hebben. Deze adressen zijn in principe niet routeerbaar op het Internet en moeten dan ook niet afgesproken worden met een “ISP”. Echter, wanneer toch Internet connectiviteit gewenst is, zal dit moeten gebeuren via een NAT (Network Address Translation) toestel. AutoConfiguration IP addressess worden ook APIPA (Automatic Private IP Addressing) adressen genoemd. Als je zo een adres ziet in een netwerk met een DHCP server dan mag je doorgaans aannemen dat er iets grondig mis is met de DHCP service en/of de DHCP Relay services.
9
10
Een IPv4 adres is 32-bit lang. Een IPv6 adres is 128-bit lang. Dus een IPv6 adres is een faktor 4 langer. Men kan zich afvragen waarom zo veel bits? Uiteraard wil men niet snel meer geplaagd zijn met een tekort aan IPv6 adressen, maar deze overvloed aan adressen laat ook toe om op een comfortabele manier een hierarchische en efficiënte routering te implementeren op meerdere niveaus. Een voorbeeld is de split 50/50 tussen de network en de host identifier. Dit heeft als gevolg dat een link (subnet) maximaal een 2^64 aantal IPv6 adressen kan bevatten. Dat zijn een 18.446.744.073.709.551.616 adressen of een slordige 18 quintillion hosts. Uiteraard een verkwisting, maar later komen we nog terug op het waarom van deze beslissing bij het bespreken van de Host / Interface Identifier.
11
Het 16-delig (hexadecimaal) stelsel is helemaal terug.
12
Het belangrijkste concept is hier dat slechts één aaneensluitende serie van nullen kan samengenomen worden en vervangen door twee dubbelpunten (“::”). De afspraak is dat: a) steeds de langste sekwentie van nullen gecompresseerd wordt. b) bij discussie steeds de eerste sekwentie (van links te beginnen) gecompresseerd wordt. In ons laatste voorbeeld dus (+) het eerste resultaat.
13
Een IPv6 prefix definiëert een route of een adresbereik. In IPv6 wordt er steeds met een prefix notatie gewerkt. • Vanuit het standpunt van de gebruiker is IPv6 doelbewust minder flexibel in zijn “subnetting”. Een link (subnet) is altijd /64. • De meeste organisaties zullen van hun ISP een /48 prefix krijgen. Individuele gebruikers normaal een /64 prefix. Met een Subnet ID van 16-bits kan men 2^16 subnets definiëren, dus een 65.536 stuks. Voldoende voor de meeste organisatie zou ik zo denken.
14
15
In de IPv4 wereld kennen we de types Unicast, Multicast en Broadcast. In de IPv6 wereld hebben we Unicast, Multicast en Anycast. Een Unicast is het verzenden van datapaketten van één bronapparaat naar één enkele bestemming (host). In IPv6 onderscheiden we hier een 4-tal subtypes: global, link-local, site-local en unique-local. Multicast laat groepen van willekeurige grootte toe te communiceren over een netwerk via één enkele transmissie door de bron. Het lidmaatschap van een multicast groep is volledig dynamisch. Men moet zich dus in- en uitschrijven op één of meerdere groepen. In IPv6 heeft de multicasting volledig de broadcasting verdrongen. Wanneer een host gegevens wil versturen naar een andere host met een specifieke dienst, maar het daarbij niet uitmaakt welke host specifiek de gegevens ontvangt, spreken we van Anycast. De voordelen van anycasting zijn redundantie en schaalbaarheid van aangeboden diensten. Het grote nadeel van anycast is de onzekerheid waardoor het nagenoeg enkel geschikt is voor diensten op basis van UDP. Broadcast verwijst naar het overbrengen van een datapakket dat (in principe) door elk aangesloten apparaat op het netwerk (meestal subnet/link) zal worden ontvangen. Vanwege de ongerichte manier van gegevensdistributie wordt broadcasting meer en meer verdrongen door multicasting. In IPv6 zijn broadcasts zelfs volledig afgeschaft. Binnen het tijdsbestek kunnen we enkel de unicast adressen uitgebreider behandelen. 16
De eerste drie bits zijn “001”. Gezien 0010 == 2 en 0011 == 3 wil dit zeggen dat global unicast adressen steeds met een 2 of 3 beginnen.
17
Heeft een host meerdere links, dan zal hij ook meerdere link-local unicast adressen hebben, één per link. Link-Local adressen worden nooit gerouteerd.
18
Een gevolg van de scope van een link-local adres is dat een host met meerdere interfaces ook meerdere link-local adressen heeft. Anders uitgedrukt, ze zijn niet eenduidig en dus worden we geconfronteerd met eenzelfde adresbereik via verschillende interfaces. Via het concept Zone ID kunnen we die dubbelzinnigheid opheffen. Een “zone ID” heeft enkel lokale betekenis, dus enkel op de lokale host zelf.
19
Voor die gevallen waar geen Internet connectiviteit noodzakelijk of gewenst is, werden in 2005 de unique-local unicast IPv6 adressen gedefiniëerd in RFC 9143. Deze IPv6 adressen zijn enkel routeerbaar binnen een privaat netwerk van een organisatie en dus niet op het Internet. Oorspronkelijk werd een prefix FC00::/7 gedefiniëerd. Afhankelijk van de L-bit wordt de Global ID als volgt toegekend: • L-bit == 0 (FC00::/8 prefix): een of andere IPv6 authoriteit (bv IANA, RIR, etc...) is verantwoordelijk voor de toekenning. • L-bit == 1 (FD00::/8 prefix): de organisatie zelf genereert een random bit-reeks van 40-bit lang. Mits het gebruik van een goed algoritme en random generator is de kans voldoende klein dat twee organisaties los van elkaar eenzelfde Global ID zouden genereren. Dit moet bij overnames en allerlei samenwerkingsverbanden vermijden dat er routeringsproblemen zouden ontstaan tussen de private netwerken.
20
Site-local unicast addressen waren oorspronkelijk bedoeld als private IP adressen met een scope van een “site” van een organisatie. De definitie van “site” was echter nogal dubbelzinnig zodat er problemen waren met de implementatie ervan in de IPv6 protocolstack. In 2004 (RFC 3879) zijn dan de site-local unicast adressen in onbruik geraakt en vervangen door de unique-local unicast adressen. (+) Herinner je nog dit fragment uit “ipconfig /all” van in het begin van de presentatie? Als “early adopter” van IPv6 had Microsoft een brilliant idee om het concept van “well-known” DNS server adressen te definiëren en te implementeren als site-local unicast adressen. Dit maakte het mogelijk dat hosts zonder verdere configuratie de broodnodige DNS servers kon vinden op het site-netwerk. De drie “well-known” DNS server adressen waren fec0:0:0:ffff::1, fec0:0:0:ffff::2 en fec0:0:0:ffff::3. Deze kan je in de huidige IPv6 implementaties op Windows nog steeds tegenkomen. (+)
21
22
We hebben nu genoeg gepraat over de “Network Identifier”, de hoogste 64-bit van een IPv6 adres. Het wordt dus tijd dat de laagste 64-bit, de “Interface Identifier” of ook wel “Host Identifier” genoemd, wat aandacht krijgt. Het origineel idee was om hiervoor EUI-64 adressen te gebruiken (vandaar de 50/50 split tussen de network en host identifier). EUI-64 adressen kan je zien als de opvolger van de alomgekende IEEE 802 of MAC adressen die 48-bit lang zijn. Er werd immers berekend dat ongeveer vanaf 2100 men geen nieuwe MAC adressen meer zal kunnen uitdelen. Alle 281 trillion (2^48) mogelijke adressen zouden dan opgebruikt zijn. Via een eenvoudig algoritme kan men een 48-bit IEEE 802 (MAC) adres omzetten naar een 64-bit EUI adres.
23
Een belangrijke eigenschap van EUI-64 adressen is dat zij wereldwijd uniek zijn. Dit is een garantie dat men nooit een adres conflict kan krijgen tussen interface identifiers behorende tot eenzelfde link. Deze eigenschap is tevens een bijzonder groot nadeel, namelijk een mogelijke inbreuk op de privacy omdat je gewoon zeer eenvoudig traceerbaar bent op het Internet. Met EUI-64 is de Interface Identifier immers wereldwijd uniek en bovendien constant (cfr RFC 3041 van 2001). Op vandaag wordt dan ook normaal met een random gegeneerde Interface Identifier gewerkt. Deze randomisatie kan gebeuren bij de creatie van de interface (eenmalig) of op geregelde tijdstippen (bv om de 4 - 8 uur). In het laatste geval spreekt men van tijdelijke IPv6 adressen. Andere mogelijkheden zijn nog...
24
Als we nu terugkijken naar de resultaten van de “ipconfig /all” van in het begin van de presentatie dan zien we het volgende: • Een link-local adres (start met FE80) met een (+) random permanent of statisch interface ID. • Een global unicast adres (start met 2) met hetzelfde (+) random permanent of statisch interface ID. • Een tweede global unicast adres (start met 2) met een (+) nieuw random tijdelijk interface ID. Waarom nu 2 global unicast adressen? Veel hosts hebben zowel een client als een server functie. Ruwweg kunnen we stellen dat de client functie connecties initiëert en dat de server functie connecties aanvaard. In het geval van de server functie moet je per definitie via een DNS naam uniek identificeerbaar zijn en heeft het dus geen zin je interface identifier proberen te verbergen. Een random permanent of statisch interface ID is dus voldoende. Het is dan ook dit statisch IPv6 adres dat zich in de DNS server moet registreren. We noemen dit dan ook het “Public IPv6 Address”. Voor de client functie daarentegen is het wel aangewezen om de traceerbaarheid te minimaliseren. Hiervoor wordt dus best een random tijdelijk interface ID gebruikt. Dit tijdelijk IPv6 adres mag zich uiteraard niet in de DNS server registreren. Vandaar ook de benaming “Temporary IPv6 Address”.
25
26
Dit autoconfiguratie overzicht is voornamelijk gericht op Windows Vista / 2008 en later. Het proces Router Discovery bestaat uit het uitwisselen van “Router Solicitation” en “Router Advertisement” berichten. In het kader van de autoconfiguratie bevat een router advertisement de “Managed Address Configuration” (M) en “Other Stateful Configuration” (O) vlaggen, en mogelijks een lijst van global en unique-local unicast prefixes. De status van de M en O vlaggen bepalen of een host ook nog het DHCPv6 protocol dient te gebruiken voor bijkomende adres prefixen en/of andere configuratie parameters (bv DNS servers). Voor het publieke global en unique-local unicast IPv6 adres wordt normaal hetzelfde random permanent of statisch interface ID gebruikt als bij het link-local adres. Dit doet men ondermeer om het lidmaatschap van diverse multicast groepen te optimaliseren.
27
We hebben reeds meermaals gezegd dat de interface identifier door de host zelf toegekend wordt. Er kan zich dus altijd een adresconflict voordoen. Daarom kan een IPv6 adres zich in 4 toestanden bevinden (cfr ipconfig /all): Tentative: het verifiëren van het uniek zijn van het adres is bezig. De methode gebruikt voor de verificatie noemt men DAD (Duplicate Address Detection). Gezien Windows standaard een random interface identifier gebruikt is er slechts een kleine kans op een conflict (ruwweg 1 op 18 quintillion). Om nu het initialisatie proces te versnellen gebruikt Windows een variant “Optimistic DAD” genoemd. Hierbij wordt het adres reeds gebruikt vooraleer de verificatie voltrokken is. Eventuele conflicten worden opgevangen. Preferred: het adres is uniek bevonden en mag dus onbeperkt gebruikt worden. Deprecated: het adres is nog steeds geldig maar mag niet meer gebruikt worden voor nieuwe communicaties. Invalid: het adres is niet meer geldig en mag bijgevolg niet meer gebruikt worden. (+) Hiermee hebben we de laatste onbekende behandeld uit de resultaten van de “ipconfig /all” van in het begin van de presentatie.
28
Ten slotte een overzicht van de mogelijke autoconfiguratie opties: stateless, stateful of een combinatie van beiden. Stateless : (+) een router advertisement bevat de “Managed Address Configuration” (M) en “Other Stateful Configuration” (O) vlaggen, en mogelijks een lijst van global en unique-local unicast prefixes. Is de M of O vlag gezet dan wordt het DHCPv6 protocol gebruikt voor extra configuratie parameters. Note: (+) in theorie kan men ook IPv6 adressen manueel configureren maar dat is wel zeer ongebruikelijk. Stateful: (+) maakt gebruik van het DHCPv6 protocol voor de volledige of aanvullende configuraties (bv DNS servers).
29
30