IPv6

Michal Škrdla, xskrdla@fi.muni.cz


Obsah


Úvod

Na počátku devadesátých let, již bylo zřejmé, že adresní prostor vymezený protokolem IPv4 nebude brzy stačit, a proto se začal vyvíjet nový protokol - IPv6. Jelikož však vývojáři měli spoustu času, rozhodli se pro zásadní změnu, která by přinesla i nové vlastnosti.
Tento protokol je stále ve fázi vývoje, avšak již nyní jej ať již oficiálně či neoficiálně /MS Windows XP/ většinou implementován ve všech OS.
Co by tedy IPv6 měl přinést nového?
  • rozsáhlý adresní prostor, který by měl vystačit pokud možno navždy
  • jednotné adresní schéma pro Internet i vnitřní sítě
  • hierarchické směrování v souladu s hierarchickou adresací
  • zvýšení bezpečnosti, zahrnutím funkcí pro šifrování, autentizaci a sledování cesty k odesílateli
  • optimalizace pro vysokorychlostní směrování
  • automatickou konfiguraci
  • podporu mobility

    Adresace

    Jedním z hlavních důvodů pro vývoj nového protokolu byl nedostatek adresního prostoru. Proto nový protokol rozšířil délku adresy z 32 bitou na 128 bitů. Adresní prostor tak nyní má kapacitu 2^128 adres, což v praxi znamená, že na jeden čtvereční palec na Zemi je k dispozici 32 IP adres.
    IP adresy jsou, stejně jako u IPv4, přiřazovány síťovým rozhraním. Každé zařízení může mít libovolný počet adres, jedinou podmínkou je, že počítače v jedné fyzické síti budou mít společný prefix. IPv6 definuje 3 typy adres.
  • individuální /unicast/ - adresa právě jednoho zařízení
  • skupinové /multicast - adresují skupinu síťových rozhraní, data odeslaná na tuto adresu musí být doručena všem
  • výběrové /anycast/ - adresují skupinu síťových rozhraní, data se však doručí jen jednomu nejbližšímu členovi Zápis adres
    Adresy se zapisují jako osm skupin po 4 znacích v šestnáctkové soustavě, navzájem se oddělují dvojtečkou.

    2001:0718:0801:e010:0260:0000:0000:81cf

    Adresy lze rovněž zkracovat. Zkracování se řídí těmito pravidly: pokud jsou na počátku čtveřice nuly, můžeme je vynechat, avšak alespoň jedna musí zůstat. Pokud se v řadě za sebou vyskytuje více nulových skupin, lze je nahradit ::. Toto však lze kvůli jednoznačnosti udělat maximálně jednou v jedné adrese. Výše uvedenou adresu tedy můžeme zjednodušit na:

    2001:718:801:e010:260:0:0:81cf

    respektive na:

    2001:718:801:e010:260::81cf

    V některých případech je možné kvůli kompatibilitě s IPv4 zadávat adresu ve tvaru:

    ::147.251.60.43 což je zkrácené z 0:0:0:0:0:0:147.251.60.43

    Důvodem pro tento způsob zápisu je jejich použití u některých přechodových mechanismů jako jsou automatické tunely.

    Základní rozvržení adres
    ::/128		- nedefinová adresa
    ::1/128 	- loopback
    FF00::/8 	- skupinové adresy
    FE80::/10 	- individuální lokální linkové adresy
    
    Link-local obsahuje na nejvyšších deseti bitech vzorek 1111111010, ve spodních 64 bitech je obsažen Identifikátor příslušného rozhraní a zbylých 54 bitů je vyplněno nulami. Link-local slouží pro komunikaci v rámci spojení tj. paket s touto adresou jako cílovou, nebo zdrojovou nesmí nikdy projít přes router do jiného segmentu sítě.
    FEC0::/10 	- individuální lokální místní adresy
    
    Je podobný na předchozí typ. V horních deseti bitech se liší pouze jedničkou na desáté pozici - 1111111011. Před adresu rozhraní rozhraní přibude ještě 16 bitů pro adresaci sítě. Site-local slouží pro adresaci v rámci sítě. Routery nesmí pakety s těmito adresami jako cílovými, nebo zdrojovými nikdy propustit za hranice sítě.
    ostatní 	- individuální globální adresy
    
    Globální individuální adresy se shlukují do skupinek stále větších, podle vzájemné vzdálenosti. Toto shlukování je velmi významné, protože snižuje počet záznamů, které musí spravovat směrovače. Směrování je tedy hierarchické. Struktura těchto adres je navržena aby tomtu způsobu směrování vyhovala.
    Adresa se tedy člení na dva hlavní díly první obsahuje topologii sítě a druhá polovina obsahuje identifikátor rozhraní.
    První část se skládá z TLA - Top-Level Aggregation - většinou se jedná o hlavní směrovače, NLA - Next-Level Aggregation - používají organizace, které dostaly přidělen TLA identifikátor a SLA - Site-Level Aggregation - slouží k identifikaci podsítě. Mezi TLA a NLA je ještě 8 bitová rezerva.

    EUI-64
    Tento standard určuje jak se bude vytvářet právě poslední část adresy - identifikátor rozhraní. Nejčastěji se asi bude používat pro odvození adresy z MAC adresy zařízení. Vezme se 48-bitová MAC adresa a mezi její 3. a 4. bajt se vloží hodnota FFFE. Krom toho se obrátí příznak globality.
    Jelikož tato část by zůstávala stále stejná a byla by tedy jednoznačnou identifikací uživatele například i při jeho pohybu, dala by se takto přesně určit poloha a pohyb uživatele. Proto se proti tomuto návrhu postavili ochránci soukromí.Proto se navrhuje, abz počítač měl jeden pevný identifikátor rozhraní podle EUI-64, pod kterým bude uveden v DNS a navíc si bude generovat vlastní náhodné dočasné identifikátory. Adresy z nich odvozených bude používat pro navazování spojení s někým jiným. Díky tomu nelze dlouhodobě sledovat aktivity uživatele.


    Datagram

    Jak vypadá datagram? Oproti IPv4 došlo k zjednodušení základní hlavičky, ta má nyní konstantní velikost a obsahuje pouze nejnutnější informace. Ostatní příležitostně užívané údaje byly přesunuty do rozšiřujících hlaviček.
    Základní hlavička tedy obsahuje:
  • verze - zahajuje IP datagram a určuje verzi protokolu, tedy v našem případě 6 /4 bity/
  • třída provozu - vyjadřuje prioritu datagramu nebo jeho zařazení do určité přepravní třídy. Její přesný význam nebyl ještě specifikován /8 bitů/
  • značka toku - také není přesně definován, avšak uvažuje se s ním pro urychlení práce směrovače, který pokud pozná, že pracoval již s některým taktoo označeným datagramem, a bude ho odesílat stejně jako předchozí /20 bitů/
  • délka dat - obsahuje informaci o délce datagramu bez základní hlavičky /16 bitů/
  • další hlavička - obsahuje identifikaci jaká hlavička nebo druh dat následuje za základní hlavičkou /8 bitů/, co zde může být:
  • dosah - je náhradou za předchozí životnost datagramu. Určuje maximálně kolika směrovači může datagram projít, než je odeslána ICMP zpráva odesílateli a zahození datagramu /8 bitů/
  • adresy - obsahuje adresu odesílatele a cílovou adresu /256 bitů/

    Automatická konfigurace

    V IPv6 jsou definovány dvo možné způsoby automatické konfigurace - stavová a bezstavová
    Stavová konfigurace je staré známe DHCP, zde označované jako DHCPv6. Počítač rozešle na obecnou adresu dotaz a pokud tento dotaz dorazí na DHCP server, tak ten mu pošle odpověď obsahující IP adresu, prefix sítě, záznam do routovací tabulky a adresu DNS serveru.
    Bezstavová konfigurace funguje na principu, že směrovač, kteří znají důležité informace o síti, občas odešlou informace, jaká je situace. Nový počítač může jen poslouchat respektive po nějakém čase sám požádat o tyto informace.


    DNS

    DNS je v IPv6 více než požadovanou službou, jelikož v IPv6 jsou adresy nechutně dlouhé. Avšak právě s DNS pro IPv6 je veliký problém. V roce 1995 vyšlo první RFC o DNS pro IPv6, které je nyní široce podporováno. V roce 2000 následovalo novější RFC, které zavádí lepší mechanismy a zároveň prohlásilo předchozí specifikaci za zastaralou. Vázla jeho implementace, která se objevila až v BINDu 9. V létě 2001 však byla novější specifikace prohlášena za experimentální a bylo doporučeno vrátit se k předchozímu. BIND 9 nyní podporuje obě specifikaci, takže jak teda vypadají?

    RFC 1886
    Původní návrh se striktně drží zažité konfiguraci, kdy pro dopředné záznamy zavádí nový typ záznamů nazvaný AAAA a definice domeny by mohla vypadat například takto:
    $ORIGIN kdesi.cz.
    @               SOA ns1.kdesi.cz. root.ns1.kdesi.cz. (
                                    2002011200      ; Serial 
                                    10800           ; Refresh 
                                    3600            ; Retry   
                                    3600000         ; Expire  
                                    86400           ; default_ttl
    )
    
    ;DNS servery
    NS	ns1
    NS	ns2
    
    ;adresy pocitacu
    ns1	AAAA	2345:67:89AB:1:2A0:ECFF:FE12:3456
    ns2	AAAA	2345:67:89AB:2:2A0:ECFF:FE12:7890
    pc	AAAA	2345:67:89AB:1:123:45FF:FE67:89AB
    
    
    a zpětné dotazy by vypadaly takto:
    
    $ORIGINB.A.9.8.7.6.0.0.5.4.3.2.ip6.arpa.
    @               SOA ns1.kdesi.cz. root.ns1.kdesi.cz. (
                                    2002011200      ; Serial 
                                    10800           ; Refresh 
                                    3600            ; Retry   
                                    3600000         ; Expire  
                                    86400           ; default_ttl
    )
    
    ;DNS servery
    NS	ns1
    NS	ns2
    
    ;reverzni zaznamy
    6.5.4.3.2.1.E.F.F.F.C.E.0.A.2.0.1.0.0.0	PTR	ns1.kdesi.cz.
    0.9.8.7.2.1.E.F.F.F.C.E.0.A.2.0.2.0.0.0	PTR	ns2.kdesi.cz.
    B.A.9.8.7.6.E.F.F.F.5.4.3.2.1.0.1.0.0.0	PTR	pc.kdesi.cz.
    
    
    Tento přístup k DNS je samozřejmě funkční, ale pro správce dosti pracný. Dále IPv6 podporuje multihoming - tedy možnost využívat vícero poskystovatelů internetu a tedy používání více různých prefixů současně. Právě s tímto se tento model nedokáže lehce smířit.

    RFC 2874
    Pro dopředné dotazy byl zaveden další typ záznamů nazvaný A6. Výhoda oproti předchozímu je zkrácení adresy. Záznam obsahuje pouze konec adresy a odkaz na prefix, který se vkládá.
    $ORIGIN kdesi.cz.
    @               SOA ns1.kdesi.cz. root.ns1.kdesi.cz. (
                                    2002011200      ; Serial 
                                    10800           ; Refresh 
                                    3600            ; Retry   
                                    3600000         ; Expire  
                                    86400           ; default_ttl
    )
    
    ;DNS servery
    NS	ns1
    NS	ns2
    
    ;adresy pocitacu
    ns1	A6	64	::2A0:ECFF:FE12:3456 sit1.ip6
    ns2	A6	64	::2A0:ECFF:FE12:7890 sit2.ip6
    pc	A6	64	::123:45FF:FE67:89AB sit1.ip6
    
    ;poddomena ip6 prefixy
    sit1.ip6	A6	48	0:0:0:1:: ip6
    sit2.ip6	A6	48	0:0:0:2:: ip6
    ip6		A6	0	2345:67:89AB::
    
    
    Poslední záznam by bylo ještě možné elegantně odkazovat přímo na poskytovatele tedy:
    ip6		A6	48	::0	kdesi-prefix.ipv6.isp.cz
    
    Pro multihoming, pak stačí přidělit prefixu několik adres
    ip6		A6	0	2345:67:89AB::
    		A6	0	2389:AB:1234::
    
    
    Revezní dotazy využívají nově definovaných možností, kdy lze používat binární prefixy:
    \[xprefix_šestnáctkově/délka]
    
    Pokud se jméno rozděluje do více domén jsou tyto binární prefixy zapsány v opačném pořadí, tedy nejkonkrétnější záznam je nejvíce vlevo.
    Pro síť s prefixem 2345:67:89AB::/48 by pak v zónovém souboru existoval tento záznam:
    \[x2345006789AB/48]	DNAME	ip6.kdesi.cz
    


    IPsec

    Implementace IPv4 vůbec neobsahovala žádné bezpečnostní mechanismy. Postupem času se objevily rozšíření i pro IPv4 zajišťující jakousi bezpečnošt, ale pro IPv6 byla bezpečnost jedním z požadavků. Proto vlastní realizace bezpečnostních služeb je ukryta ve dvou dalších rozšiřujících hlavičkách: AH /Authentication Head/ a ESP /Encapsulating Security Payload/. Datagramy mohou obsahovat jednu nebo obě, podle toho jak se chceme zabezpečit.
    Přenos těchto datagramů se dále dělí na dva možné režimy:
    transportní - hlavičky AH/ESP se přidávají jako rozšiřující k původní hlavičce
    tunelující - původní datagram je obalen novou hlavičkou, která obbsahuje i rozšiřující hlavičky AH/ESP

    Authentication Header, AH
    Tato hlavička slouží k autentizaci odesílatele. V této hlavičce jsou autentizovaná data zahashovaná pomocí MD5 nebo SHA-1. Oba algoritmy používají dříve dohodnutý sdílený klíč, který se vygeneruje při navazování spojení.
    Encapsulating Security Payload, ESP
    Tato hlavička spolkne všechna data datagramu krom hlaviček určených pro směrovače a informací obsahujících data o fragmentaci a zašifruje je. Každá implementace musí obsahovat podporu DES, MD5 a SHA-1.

    Pro správu bezpečnostních asociací se používá protokol ISAKMP, který ale neobsahuje například předpis pro protokol výměny klíčů. Toto je ponecháno pro jiné specifikace. Nyní se využívá IKE /Internet Key Exchange/.


    Mobilita

    Po oddálení problému IPv4 s nedostatkem adres se stala mobilita IPv6 značným trumfem a důvodem pro zavedení IPv6. Mobilita předpokládá, že každé zařízení je někde doma a tedy má svoji vlastní pevnou IP adresu, ta se nazývá domácí. Je uložena v DNS a stroj je pod touto adresou trvale dostupný i když je na cestách. Při cestování obdrží nějakou dočasnou adresu. Aby byl dosažitelný původní adresou je v domácí síti vytvořen domácí agent /home agent/. Jde o jeden ze směrovačů z domácí sítě, který k sobě bere všechny datagramy posílané pro mobilní zařízení a pak pomocí tunelu mu je předává. Tím se dozví, že se jej někdo pokusil kontaktovat a začne vyhledávat optimální trasu k odesílateli, aby mu mohl oznámit svoji dočasnou adresu. Následně se pak musí autentizovat novému partnerovi, aby prokázal, že jen ten, za kterého se vydává. Po autentizaci se do datagramů přidávají rozšiřující hlavičky Směrování, kde je uvedena dočasná adresa a další komunikace tedy probíhá bez účasti domácího agenta.


    radvd - Router ADVertisement Daemon

    Jedná se o směrovač pro systémy typu Unix. Vývoj toho programu se však rozdělil do dvou větví. Oficiální je na této adrese
    ftp://ftp.cityline.net/pub/systems/linux/network/ipv6/radvd/ a druhou verzi je možné získat na této adrese http://v6web.litech.org/radvd
    Konfigurace programu lze nalézt v /etc/radvd.conf. Obsahuje definici, jak se má směrovač chovat pro každé rozhraní ve tvaru:
    interface jmeno{
    	volby_rozhrani
    	prefix prefix/delka{
    		volby_prefixu
    	};
    	pripadne dalsi prefixy
    };
    
    Mezi volby rozhraní lze zahrnout tyto parametry:
  • AdvSendAdvert - Má se do daného rozhraní posílat ohlášení směrovače? volby: on | off
  • AdvManagedFlag - Má se vedle bezstavové použít také stavová automatická konfigurace?
  • AdvOtherCofigFlag - Má se stavová konfigurace použít pro zbývající prvky konfigurace (tedy jiné než adresy)?
  • AdvDefaultLifetime - Doba životnosti oznámení o implicitním směrovači. Udává se v sekundách.
  • AdvHomeAgentFlag - Je směrovač ochoten vykonávat roli domácího agenta?
  • AdvHomeAgentInfo - Má do ohlášení směrovače přidávat volbu s informacemi o domácím agentovi?
  • HomeAgentPreferenece - Udává preferenci domácího agenta


    Konfigurace

    BSD
    Implementace IPv6 je zde asi nejlepší. Projekt věnující se tomuto systému se nazýva
    Kame

    Linux
    Přestože jádro Linuxu obsahuje podporu IPv6, vznikl projek USAGI, který chce dosáhnout kvalit BSD systému. Vyvíjí se v Japonsku a programátoři spolupracují s vývojovým týmem Kame.
    Upravené jádro s USAGI je možno stáhnout na www.linux-ipv6.org
    Pro vlastní konfiguraci je potřeba mít v jádře podporu IPv6 přeloženou alespoň jako modul. Zda nám IPv6 běží zjistíme jednoduše příkazem ifconfig. Pokud se nám ve výpisu neobjevuje nikde něco jako inet6-addr, můžeme zkusit přidat modul ipv6.o.
    Pro konfiguraci lze odkázat na Linux IPv6 HOWTO nebo na stránkách Petera Bieringera
    Zda máte nakonfigurovanou IPv6 adresu a jakou zjistíte příkazem
    # /sbin/ip -6 addr show dev

    Přidávání IPv6 adresy
    # /sbin/ip -6 addr add / dev 
    
    
    Zobrazení IPv6 sousedů
    # ip -6 neigh show [dev ]
    
    
    Přidání souseda do tabulky sousedů
    # ip -6 neigh add  lladdr  dev
    
    
    Vymazání souseda z tabulky
    # ip -6 neigh del  lladdr  dev
    
    
    Zobrazení existujících IPv6-in-IPv4 tunelů
    # /sbin/ip -6 tunnel show
    
    

    Odkazy

  • Linux IPv6-HOWTO
  • www.6bone.net
  • USAGI Project - UniverSAl playGround for Ipv6
  • KAME Project
  • Jak zprovoznit IPv6 pod NetBSD
  • Seznam vlastníku pTLA
  • IPv6 DNS Examples
  • RADVD Introduction
  • Linux IPv6 Router Advertisement Daemon (radvd)
  • www.zebra.org