Menu Zavrieť

4.8. Sieťový protokol IP verzie 6 (IPv6)

IPv6: internet protocol, version 6RFC 2460

Protokol IPv4 sa postupne nahrádza protokolom IPv6. Hlavnou zmenou je dlhšia IP adresa, ktorá už nezaberá 32, ale až 128 bitov. Tým pádom by už nikdy nemal vzniknúť stav, že sa voľné IP adresy začnú rýchlo míňať, ako to začíname pociťovať pri protokole IPv4. Samozrejme, už len kvôli dlhším adresám, musí IPv6 používať inú hlavičku ako IPv4.

Význam jednotlivých častí hlavičky IPv6:

  • version, teda verzia IP protokolu má v sebe číslo 6
  • traffic class, teda prenosová trieda určuje charakter dát prenášaných v tomto IPv6 datagrame a jej význam je podobný ako type of service v IPv4. Určuje dôležitosť prenášaných dát, ktorá sa môže na routroch brať do úvahy na „prednostné vybavenie“.
  • flow label je 20 bitová informácia identifikujúca tok dát. Toto číslo ešte nemá presné určenie použitia a má sa vyšpecifikovať priebežne podľa potreby. Predpokladané použitie je v kombinácii s hodnotou traffic class pre identifikovanie multimediálnych prúdov dát ako TV, rádiá, videokonferencie, alebo ako identifikátor zákazníka, ktorý si priplatil za špeciálnu prioritu svojich datagramov.
  • payload length predstavuje veľkosť tela datagramu v bajtoch bez hlavičky, ktorá má vždy 40 bajtov.
  • next header zodpovedá políčku protocol v IPv4 a určuje, že hlavička akého protokolu sa nachádza v tele datagramu, teda hneď za hlavnou hlavičkou Ipv4 datagramu. Typicky to je TCP alebo UDP hlavička, ale môžu to byť aj iné hlavičky ako ICMP či dokonca hlavička protokolu IPv4 prenášaná cez IPv6. Novinkou oproti IPv4 je, že nasledujúcou hlavičkou môže byť aj rozširujúca hlavička. IPv6 má definovaných celkovo 8 rozširujúcich hlavičiek. Je možné použiť žiadnu, niektoré, aj všetky. Tieto hlavičky sú za sebou zreťazené cez „next header“. Ich zameranie je rôzne – na fragmentáciu, šifrovanie cez IPsec, mobilitu a iné.
  • hop limit zodpovedá políčku time to live v IPv4 a určuje životnosť datagramu, presnejšie počet routrov, cez ktoré môže prejsť.
  • source address alebo zdrojová adresa je 128 bitová adresa zdrojovej stanice.
  • destination address alebo cieľová adresa je 128 bitová adresa cieľa (stanice alebo skupiny). Viac o adresácii v IPv6 sieťach bude spomenuté nižšie.

Môžete si všimnúť že oproti protokolu IPv4 má hlavička IPv6 menej políčok. Svoj náprotivok nemajú v hlavnej hlavičke políčka pre kontrolný súčet, fragmentáciu a voľby. Všetky tieto zmeny znižujú výpočtové nároky na spracovanie datagramov na routroch.

Kontrolný súčet bol odstránený úplne ako nadbytočný a redundantný, keďže kontrola sa prevádza ako na spojovej, tak aj na transportnej vrstve.

Fragmentácia na routroch je v IPv6 neprípustná. Keď router zistí, že nevie ďalej poslať tak veľký datagram, namiesto fragmentácie tento datagram zahodí a pošle ICMPv6 správu, že datagram je príliš veľký a odosielateľ by mal posielať menšie datagramy. Cez rozširujúcu hlavičku je možné fragmentovať na zdrojovej stanici.

4.8.1  Adresácia v protokole IPv6

Adresy v protokole IPv6 majú 128 bitov. Zapisujú sa ako osem dvojbajtových slov v šestnástkovej sústave oddelených dvojbodkou. Napríklad fe80:0000:0000:0000:0221:5cff:fe64:d39a. Prvé dvojbajtové slovo fe80 v dvojkovej sústave vyzerá nasledovne 1111 1110 1000 0000, ostatné si môžete vyjadriť sami podľa známych prevodov medzi číselnými sústavami.

Okrem úplného tvaru IPv6 adresy máme možnosť aj skrátených vyjadrení. V nasledujúcej tabuľke označujú všetky riadky tú istú adresu.

tvar IPv6 adresy vysvetlenie
fe80:0000:0000:0000:0221:5cff:fe64:d39a úplný tvar, každá štvorica bitov je zobrazená ako číslica v šestnástkovej sústave
fe80:0:0:0:221:5cff:fe64:d39a odstránené úvodné nuly z každého dvojbajtového slova
fe80::221:5cff:fe64:d39a vyjadrenie :: znamená, že je potrebné doplniť toľko nulových dvojbajtových slov, aby bolo dokopy osem dvojbajtových slov; výraz :: sa môže v každej adrese použiť len raz
fe80::221:5cff:254.100.221.154 posledné dve dvojbajtové slová sú vyjadrené ako štyri jednobajtové slová v desiatkovej sústave oddelené bodkami; hovoríme o mixovanej notácii, keďže posledné 4 bajty vyzerajú ako IPv4 adresa

To, aká časť IPv6 adresy nás zaujíma (napríklad v smerovacej tabuľke) sa označuje podobne ako v IPv4 lomkou za IP adresou a predstavuje počet jednotiek v maske v dvojkovej sústave. Vyjadrenie cez masky v duchu ffff:ffff:ffff:ff00:: sa nepoužíva.

Podobne ako v IPv4 aj v IPv6 je niekoľko adries vyhradených na špeciálne účely.

  • Ako prvé uvedieme, že IPv6 nepozná broadcast, takže broadcastové IP adresy 255.255.255.225/32, 158.197.31.255/24 a podobne nemajú svoj náprotivok v IPv6. Ak chceme posielať nejakú správu viacerým, musíme použiť multicast.
  • 0:0:0:0:0:0:0:0/128 alebo aj ::/128 má rovnaký význam ako adresa 0.0.0.0 v IPv4, a určuje nešpecifikovanú adresu zdroja v lokálnej sieti – pozrite si minulú prednášku.
  • 0:0:0:0:0:0:0:1/128 alebo aj ::1/128 určuje localhost, a je ekvivalentom z 127.0.0.1 z IPv4.
  • 0:0:0:0:0:ffff:IPv4 adresa/128 alebo aj ::ffff:IPv4 adresa/128, napríklad ::ffff:158.197.31.4/128, slúži na reprezentáciu rozhraní s IPv4 adresami ako rozhraní s IPv6 adresami v SIIT (Stateless IP/ICMP Translation), ktoré sa veľmi nepresadilo (viac o prechode z IPv4 na IPv6 je popísané nižšie).
  • fe80::/10 (fe8X:hocičo, fe9X:hocičo, feaX:hocičo a febX:hocičo) – link-local – Lokálne adresy slúžia ako adresy pre lokálnu sieť a nemôžu prejsť routrom. Tieto adresy sú novinkou oproti čomukoľvek v IPv4. Tieto adresy si stanice prideľujú samy ako súčasť autokonfigurácie. Takto vygenerovaná IPv6 adresa sa dá používať na komunikáciu s počítačmi vo vnútri lokálnej siete. To znamená, že ak nejakí neskúsení používatelia vezmú niekoľko počítačov a napoja ich cez obyčajný switch, alebo dokonca na priamo, tieto počítače si sami nastavia svoje IPv6 adresy bez DHCP servera a bez potreby ručnej konfigurácie, a môžu začať komunikovať – hrať hry, zdieľať súbory a pod. Viac o autokonfigurácii nižšie.
  • fec0::/10 – site-local – Lokálny rozsah adries pre vnútro organizácií, ktorý by presne zodpovedal určeniu privátnych adries 10.0.0.0/8, 172.16.0.0/12 a 192.168.0.0/16, bol zrušený a nemá sa používať.
  • fc00::/7 – unique-local – Unikátne privátne adresy sú veľmi podobné „site-local“ adresám, ale majú oproti nim špeciálnu výhodu, a síce, že majú určené, akým spôsobom sa má generovať sieťový prefix pre tieto privátne IPv6 adresy – kombináciou MAC adresy, dátumu a hašovacej funkcie SHA1 – čo zabezpečuje vysokú pravdepodobnosť jedinečnosti tohto prefixu na celom internete (RFC 4193) (vyberá sa jedna z 2,2 biliónov možností). Príkladom využitia sú virtuálne privátne siete (VPN) bez potreby NATovania.
  • ff00::/8 sú určené pre multicast. Multicastová adresa nesmie byť pridelená žiadnemu rozhraniu.
    • ffX2:hocičo je multicast pre lokálnu sieť, ffX8:hocičo je multicast pre sieť vlastnej organizácie aj keď má vo vnútri viac podsietí. Tieto multicastové IP adresy si môžu nastavovať administrátori sami podľa ľubovôle, lebo tieto adresy nie sú prístupné z verejného internetu. Pre každý známejší protokol, ktorý v IPv4 používal broadcast je vyhradená dobre známa lokálna multicastová IPv6 adresa. Napríklad ak chceme kontaktovať DHCPv6 server môžeme použiť multicastovú adresu ff02::1:2, keďže ide o dobre známu lokálnu multicastovú IPv6 adresu, a datagramy s touto cieľovou adresou podľa štandardu spracúvajú všetky DHCPv6 servery a relay agenti lokálnej siete.
    • ffXe:hocičo je multicast pre celý Internet. Tieto adresy sú prideľované regionálnymi registrátormi pod organizáciou IANA (u nás RIPE NCC)
  • 2000::/3 (2xxx:hocičo, 3xxx:hocičo) – globálne adresy – Verejné unicastové (= na komunikáciu jedného z jedným) adresy určené pre adresovanie všetkých koncových uzlov. V ideálnom prípade by takúto IPv6 adresu malo mať každé zariadenie pripojené do internetu (už žiaden NAT).

Celá adresácia, vrátane týchto špeciálnych IPv6 adries je popísaná v RFC 4291. Ďalšie adresy na špecifické ciele spomenieme nižšie, môžete ich nájsť aj v RFC 5156.

4.8.2  Štruktúra globálnych unicastových IPv6 adries

V IPv4 sa identifikuje rozhranie zariadenia v sieti na základe takej dlhej časti IPv4 adresy, akú mu určuje maska. V unicastovej IPv6 adrese sa na identifikáciu rozhrania používa VŽDY posledných 64 bitov adresy, teda presne polovica celej adresy. IPv6 adresa je teda rozdelená na dve polovice: sieťovú časť a časť rozhrania. Kratšie masky sietí sa používajú vlastne iba v smerovacích tabuľkách routrov. Koncové siete by mali byť vždy s prefixom dĺžky 64 bitov.

Sieťový prefix je robený tak, aby delenie sietí na podsiete zodpovedalo deleniu podľa geografickej polohy podsietí – kratšie prefixy určujú kontinenty, dlhšie potom časti kontinentov, štáty, okresy, mestá, mestské časti, až tie najdlhšie (48 bitov) určujú koncových zákazníkov. Koncoví zákazníci majú k dispozícii ešte 16 bitov sieťovej časti na delenie svojej inštitúcie alebo domácnosti na ďalších až 65536 sietí.

Analógiou je poštová adresa, kde posledný riadok – názov štátu, v tomto prípade najkratší sufix adresy, určuje lokalizáciu hrubšie ako vyššie riadky (dlhší sufix) s lokálnejším charakterom (obec, ulica, osoba). Takéto hierarchické delenie adries podľa lokality umožňuje mať na routroch relatívne málo záznamov v smerovacích tabuľkách. Ľudovo povedané, jedným riadkom viem na routri v Košiciach vybaviť celú Áziu a ďalším celú Ameriku, ale na smerovanie do košických sídlisk a mestských častí už potrebujem viac riadkov s dlhšími prefixmi.

Ako vidno na obrázku, globálne unicastové adresy začínajú dvojkou (alebo trojkou, ktorá sa zatiaľ nezačala rozdeľovať), ktorá je nasledovaná 32 bitovým prefixom, ktorý rozdeľuje organizácia IANA spolu s 5 regionálnymi registrátormi – RIR – (RIPE NCC, ARIN, APNIC, AFRNIC, LACNIC), z ktorých každý spravuje jeden subkontinent sveta. Tieto prefixy sú rozdeľované lokálnym registrátorom (LIR), ktorí prideľujú prefixy dĺžky 48 bitov koncovým zákazníkom, ktorým tak ostáva ešte 16 bitov na realizáciu vlastných až do 65536 podsietí (Subnet ID) s prefixmi dĺžky 64 bitov. Niektorí zainteresovaní tvrdia, že prideľovať malým koncovým zákazníkom (domácnostiam) také krátke sieťové prefixy je zbytočné plytvanie a je možné, že sa pristúpi k tomu, aby boli takýmto malým koncovým zákazníkom prideľované prefixy dĺžky 56 bitov. Aj tak bude možné v každej domácnosti vytvoriť 256 podsietí, čo by malo v pohode stačiť.

4.8.3  Autokonfigurácia

SLAAC – Stateless Address AutoconfigurationRFC 2462

Asi najradikálnejšou zmenou je spôsob prideľovania IPv6 adries koncovým staniciam. Samozrejme, je možné ručné statické prideľovanie adries, čo je využiteľné hlavne pre počítače, na ktoré existujú DNS záznamy. Pre pracovné stanice a iné koncové zariadenia je však vhodné prideliť IPv6 adresu automaticky. Pre IPv4 adresy celú réžiu prideľovania realizuje DHCP server. V prípade IPv6 adries je to pestrejšie. Celý proces prideľovania sa dá rozdeliť na pridelenie identifikátora rozhrania v sieti (Interface ID), pridelenie sieťovej časti adresy, default routra a lokálnych rekurzívnych DNS serverov.

Prideľovanie identifikátora rozhrania

Keďže na identifikáciu rozhraní v sieti je vyhradených až 64 bitov, tak teoreticky môžeme v každej sieti adresovať až 264 zariadení. Takéto množstvo zariadení v jedinej sieti samozrejme nebolo cieľom. Keď máme k dispozícii taký adresový priestor, je umožnené každému zariadeniu vytvoriť si jeden alebo viac sieťovo unikátnych identifikátorov bez centrálneho prideľovača.

Prvé riešenie nazvané IPv6 EUI-64 generuje unikátny identifikátor jednoducho tak, že využije unikátnosť MAC adresy, ktorá má dĺžku 48 bitov. Namapovať 48 bitov na 64 nie je žiaden problém, používa sa na to jednoduchý prevod, ktorý ukazuje nasledujúci obrázok.

Tento mechanizmus zaručuje jedinečnosť adresy, ale narúša súkromie, pretože generuje rovnaký identifikátor vo všetkých sieťach, kde sa toto zariadenie pripojí. Pohyb takého zariadenia je potom jednoducho sledovateľný (napr. na webovej stránke vieme zistiť, že z ktorých sietí sa dané zariadenie pripájalo)

Druhé riešenie Privacy extensions for stateless address autoconfiguration in IPv6 tento nedostatok úplne eliminuje. Jednoducho sa koncovky generujú cez pseudonáhodný generátor. Navyše, tieto koncovky sa pravidelne (každý deň) menia a jedna stanica môže používať viaceré naraz. V tomto prípade už je šanca, aj keď strašne malá, že dve zariadenia si zvolia ten istý identifikátor. Každá stanica si preto po vygenerovaní ešte overuje jedinečnosť vygenerovaného identifikátora cez detekciu duplicitných adries protokolom ICMPv6.

Postup autokonfigurácie IPv6 adresy

Pri napojení do siete si zariadenie samo vygeneruje link-local adresu fe80::identifikátor_rozhrania na základe niektorého zo spôsobov prideľovania identifikátora rozhrania. Následne si pomocou detekcie duplicitných adries zistí jednoznačnosť svojho identifikátora. Ak náhodou už v sieti niekto takýto identifikátor má, vygeneruje si iný.

Router v pravidelných intervaloch odosiela cez multicast do lokálnej siete oznámenia routra – router advertisement (typ ICMPv6 správy), v ktorých informuje zariadenia v sieti o svojej IPv6 adrese, aby si zariadenia vedeli nastaviť predvolenú bránu (default gateway) a o sieťovom prefixe, ktorý si má stanica nastaviť. Stanica, ktorá sa práve napojila, si môže zažiadať o okamžité zaslanie oznámenia routra cez požiadavku routru – router solicitation (typ ICMPv6 správy).

V oznámeniach routra sa nachádzajú dva príznaky M-managed a O-other. Ak je nastavený príznak M na 1, tak router informuje, že v sieti sa nachádza stavový DHCPv6 server, ktorý je potrebné kontaktovať kvôli ďalším potrebným nastaveniam. Ak je nastavený príznak O na 1, v sieti sa nachádza bezstavový DHCPv6 server. Ak sú oba príznaky vypnuté, t. j. nastavené na 0, v sieti sa (podľa routra) nenachádza DHCPv6 server. Stanica sa teda zariadi podľa týchto príznakov.

Najjednoduchší prípad, keď sú oba príznaky vynulované, predpokladá, že všetko potrebné na nakonfigurovanie je obsiahnuté v oznámeniach routra.

V prípade, že sme sa dozvedeli o prítomnosti bezstavového DHCPv6 servera, zistíme hlavne adresy lokálnych DNS serverov, ale aj napr. predvolené domény či NTP servery.

Stavový DHCPv6 server prideľuje okrem adries lokálnych DNS serverov aj celé IPv6 adresy s prefixom siete aj identifikátorom rozhrania. Pracuje teda podobne ako DHCP(v4) server s jedným rozdielom, a to že neposiela adresy predvolenej brány. Tá sa musí získať cez oznámenia samotného routra, ktorý je touto bránou. Môže sa zdať, že sa použitím stavového DHCPv6 servera popiera automatické generovanie identifikátora rozhrania, nie je to však pravda. Zariadenie si okrem pridelenej IPv6 adresy môže generovať aj ďalšie – napr. keď použije sieťový prefix zasielaný v oznámeniach routra spolu s vlastným vygenerovaným identifikátorom.

4.8.4  Prechod z IPv4 na IPv6

Prechod na IPv6 je náročný proces. Keďže do internetu je zapojených niekoľko miliárd zariadení s rôznym hardvérovým a softvérovým vybavením, nedá sa jednoducho spraviť to, že sa vyhlási deň a hodina, keď sa všetci prepnú na vyššiu verziu IP protokolu. Okrem operačných systémov koncových zariadení musia byť na prechod postupne pripravené aj všetky sieťové aplikácie a všetky routre. Tiež je potrebné vykonať príslušné zmeny aj na DNS serveroch. Je teda nutné riešiť to, aby bolo súčasne možné fungovať nad oboma protokolmi.

Najpravdepodobnejší scenár je, že všetky zariadenia postupne prejdú na tzv. dual-stack, čo znamená, že budú vedieť komunikovať protokolom IPv4 aj IPv6 a budú mať aj obe IP adresy, alebo namiesto IPv4 adresy nejakú špeciálnu IPv6 adresu, v ktorej je IPv4 adresa zakomponovaná. Keď už nastane takýto stav, postupne bude možné IPv4 adresy prestať používať a časom už budú všetky zariadenia komunikovať výhradne cez IPv6. Ale to je asi ešte dosť vzdialená budúcnosť.

Zavádzať siete s IPv6 adresami v súčasnosti je nutné tak, aby bolo možné komunikovať so zariadeniami, ktoré majú iba IPv4 adresy. Aj keby sme chceli komunikovať len s IPv6 sieťami, pravdepodobne sa nevyhneme tomu, že na ceste do cieľovej siete pôjdu naše IPv6 datagramy cez také routre, ktoré na základe IPv6 adresy nevedia smerovať a rozumejú iba IPv4 adresám v IPv4 hlavičkách.

Ak chceme komunikovať z IPv6 siete do IPv4 siete môžeme použiť niektorý z prekladových mechanizmov. Medzi menej úspešné patrí SIIT, v ktorom sa reprezentujú IPv4 adresy v IPv6 adresách v tvare „::FFFF:IPv4 adresa“, ktorá sa na routri na pomedzí IPv6 a IPv4 sietí transformuje na „IPv4 adresu“. Problém tohto riešenia je, na akú cieľovú IPv4 adresu je potrebné zaslať odpoveď. Úspešnejším je stavový prekladový mechanizmus nazvaný NAT64+DNS64. Tento preklad je podobný NAT-u z IPv4 s tým rozdielom, že preklad sa deje iba voči IPv4 cieľovým adresám. Postup je nasledovný: Ak sa počítač, ktorý má iba IPv6 adresu, spýta v DNS64 na AAAA záznam cieľovej stanice a táto stanica má iba A záznam, DNS64 vygeneruje IPv6 adresu v tvare „prefix64::IPv4adresa“. Keď stanica pošle takýto datagram, odchytí ho NAT64 router, ktorý spraví preklad cieľovej IPv6 na IPv4, a zmení aj zdrojovú IPv6 adresu na svoju IPv4 adresu a nový zdrojový port a odošle takýto IPv4 datagram do IPv4 infraštruktúry. Pri príchode odpovede spraví opačný preklad.

Na vyriešenie komunikácie medzi dvoma ostrovmi IPv6 infraštruktúry cez IPv4 časti internetu sa v súčasnosti využívajú rôzne tunelovacie techniky založené na tom, že celý IPv6 datagram sa na jednom mieste zabalí do IPv4 datagramu, ten cestuje bežným spôsobom IPv4 infraštruktúrou až k nejakému zariadeniu, ktoré rozbalí IPv4 datagram, a IPv6 datagram v ňom pošle ďalej k cieľu už IPv6 infraštruktúrou.

Týchto tunelovacích techník existuje niekoľko. Niektoré sa používajú viac, niektoré iba veľmi okrajovo.

Celkom úspešný je spôsob tunelovania konfigurovanými tunelmi, pri ktorých si je potrebné ručne nastaviť tunel od svojho prekladového 6na4 routra k cieľovému prekladovému 4na6 routru. Existuje aj niekoľko automatizovaných mechanizmov na vyhľadávanie vhodného cieľového prekladového 4na6 routra.

Jeden z najúspešnejších tunelovacích mechanizmov, ktorý sa označuje 6to4 (RFC 3056), robí automatický preklad IPv6 adries na IPv4 adresy podobne ako SIIT. Zvláda to bezstavovo, t.j. nemusí si pamätať preklady, ktoré realizoval v minulosti. Idea tohto prístupu sa zakladá na tom, že prijímajúca organizácia má aspoň jednu IPv4 adresu, od ktorej sa odvodia špeciálne IPv6 adresy s prefixom 2002:IPv4 adresa:/48 pre všetky stanice vo všetkých podsieťach organizácie (okrem toho môže mať aj normálne natívne globálne IPv6 adresy napríklad s prefixom 2001::/8). IPv6 datagram s cieľovou IPv6 adresou 2002:IPv4 adresa:/48 je na 6to4 routri zabalený do IPv4 datagramu s vyextrahovanou IPv4 adresou, ten putuje po IPv4 infraštruktúre až cieľovej IPv4 adrese 6to4 routra cieľovej organizácie kde je automaticky rozbalený a v ňom dopravený IPv6 datagram je zaslaný do vnútornej siete organizácie až k cieľovému zariadeniu na základe IPv6 adresy s prefixom 2002:IPv4 adresa:/48.

Trochu zložitá situácia v 6to4 je, keď zariadenie má iba IPv6 adresu s prefixom 2002::/16 a nemá natívnu globálnu IPv6 adresu (napr. s prefixom 2001::/16) a chce adresovať cieľové zariadenie, ktoré má len natívnu globálnu IPv6 adresu a nemá IPv6 adresu s prefixom 2002::/16. V takom prípade pri odchode cez jej hlavný router organizácie nie je možné zabaliť takýto datagram do IPv4 datagramu s IPv4 adresou cieľovej organizácie, keďže cieľová organizácia takú IPv4 adresu nemá. RFC 3068 to vyriešilo tak, že definovalo anycastovú IPv4 adresu 192.88.99.1, na ktorú to treba poslať, a ktorú odchytí najbližší 6to4 router s globálnou natívnou IPv6 adresou a uskutoční rozbalenie a zaslanie pôvodného datagramu IPv6 infraštruktúrou k cieľu.

Celá idea prechodu z IPv4 na IPv6 je popísaná v RFC 4038.

Na ďalšie hlbšie čítanie o IPv6 môže výborne poslúžiť voľne stiahnuteľná kniha Pavla Satrapu IPv6 a tiež skvelý seriál na serveri lupa.cz Pohněme s IPv6. Pre hlbšiu analýzu bezpečnosti a nasadenia IPv6 určenú pre správcov sietí vznikol seriál Bezpečné IPv6.