IPv6

Jan Vojtěch, klasyc@mail.muni.cz

Obsah

Úvod

IPv6 je "nový" protokol určený pro komunikaci v celosvětové síti Internet. Je to nástupce současného protokolu IPv4, který vznikl především jako reakce na rychlé vyčerpání adresního prostoru IPv4. Kromě mnohem většího adresního prostoru poskytuje i další sadu užitečných změn, přesto je však přechod velmi pozvolný, neboť uživatelé nepociťují potřebu měnit současný funkční stav.

Hlavní nevýhodou současného protokolu je malý adresní prostor, který poskytuje "jen" cca 4 miliardy adres. V praxi je však počet použitelných adres nižší, protože se musí přidělovat "chytře", aby se usnadnilo směrování. Navíc na počátcích Internetu se s adresami poměrně plýtvalo, neboť se nepředpokládalo tak masivní rozšíření. Nyní se problém nedostatku adres řeší pomocí NATu, tj. více počítačů sdílí jedinou adresu. Tím ovšem tyto počítače přestávají být globálně adresovatelné, a tak vlastně nejsou připojeny do "plnohodnotného" Internetu. Zavedení IPv6 přinese domácím uživatelům nové možnosti, například zjednodušené sdílení dat, ale také nová bezpečnostní rizika.

Historie

První úvahy o vzniku protokolu se objevily na počátku 90. let minulého století, když se ukázalo, že technologie CIDR nedokáže odvrátit hrozící vyčerpání adresního prostoru v Internetu. Do roku 1996 bylo vydáno několik dokumentů RFC definujících IPv6. Součástí protokolu IPv6 je také protokol ICMPv6, který umožňuje přenášet informace určené pro správu a diagnostiku sítě. Implementace protokolu IPv6 byly testovány v experimentální síti 6bone, která vznikla v roce 1996 za účelem testování nového protokolu. Svého největšího rozmachu dosáhla v roce 2003, kdy v ní bylo zapojeno asi 1000 počítačů z 5O zemí světa. V roce 2004 bylo vydáno rozhodnutí o ukončení její činnosti, ke kterému došlo v polovině roku 2006. Projekt 6bone splnil svou historickou úlohu a díky dostupnosti IPv6 v běžném Internetu již nebyl potřebný.

Pro zajímavost: IPv5 nebyl předchůdcem IPv6, jednalo se o experimentální streamovací protokol, který měl umožňovat přenos zvuk a videa.

Nové vlastnosti protokolu IPv6

Nejdůležitější výhody protokolu IPv6

Protokol podporuje kooperaci s IPv4, není s ním však přímo kompatibilní. Protokolu IPv6 však chybí tzv. killer feature - něco, co by donutilo uživatele přejít na novou verzi. Zatím se má mezi veřejností spíše za to, že výše uvedené výhody nevyváží množství práce spojené s přechodem. Jednou ze snah pro urychlení přechodu byl i pokus o spuštění volně přístupného pornograifckého serveru dostupného pouze na IPv6 adrese, ale praxe ukázala, že IPv4 servery poskytují dostatečně širokou nabídku.

Adresy

Adresa má délku 128 bitů, což je čtyřnásobek délky IPv4 adresy. Počet všech možných adres se pohybuje okolo čísla 10^38, na každý milimetr zemského povrchu připadá cca 667 x 10^15 adres.

Adresy se zapisují v šestnáctkové soustavě, jednotlivé dvojice bajtů (čtveřice šestnáctkových číslic) jsou odděleny dvojtečkou. Adresa se tak skládá celkem z osmi částí. Aby se adresa mohla zkrátit, je povoleno vynechat v každé části počáteční nuly. Pokud je jedna nebo více spojitých skupin nulových, je možné je vynechat a nahradit je dvěma dvojtečkami. Pokud je nulových více částí, které nejsou spojité, je možné vynechat pouze jednu z nich, protože jinak by zápis nebyl jednoznačný.

Otázka do diskuze: když zadáme například do webového prohlížeče zkrácenou IPv6 adresu, jak pozná, jestli je poslední skupina čísel ještě adresa serveru a nebo už označní portu?

Následující zápisy adres jsou ekvivalentní:

ff01:0000:0000:0000:0000:0000:0000:0101
ff01:0:0:0:0:0:0:101
ff01::101

Protokol IPv6 používá beztřídní notaci podobně jako IPv4. Prefix adresy sítě se zapisuje stylem adresa/délka, nevýznamné bity síťové adresy mají hodnotu nula.

Adresy se dělí do několika kategorií:

V seznamu chybí broadcast adresa, kterou obsahovala specifikace IPv4 (vysílání všem zařízením na dané síti). Její roli převzaly obecnější skupinové adresy, jsou definovány standardní skupiny pro některé běžně používané operace. Například adresa ff02::1 zašle data všem uzlům na lince (alternativa broadcastu v IPv4).

V IPv6 jsou definovány následující prefixy adres, které mají speciální význam:

Anycastové adresy nemají svůj vlastní prefix. Jsou zařazeny mezi globální adresy, ale pracuje se s ními odlišně. Důvodem je fakt, že anycastová adresa by měla být pro koncové zařízení transparentní (posílám e-mail na nejbližší SMTP server, nezajímá mě, který to bude).

Hlavička protokolu IPv6

Oproti předchozí verzi IPv4 byly z hlavičky odstraněny nepoužívané položky a získané místo bylo použito pro uložení dlouhých adres. Celková délka hlavičky je přesto přibližně dvojnásobná ve srovnání s IPv4. Výhodou je, že její délka je neměnná, což umožňuje snažší zpracování na síťových prvcích. Následující obrázek převzat z [1].

Hlavička IPv6

Hlavička obsahuje pouze nejnutnější položky, ale umožňuje uložit odkaz (přesněji typ) na rozšiřující hlavičku s dodatečnými informacemi (next header). Síťové prvky mohou tak snadno vyhodnotit, jestli je pro ně rozšiřující hlavička významná a pokud ne, nezdržují se s jejím čtením.

Hlavička dále nese informaci o verzi protokolu, typu služby (pro zajištění QoS), identifikátor toku (aby se související data posílala stejnou cestou a nedocházelo například ke zbytečnému předbíhání paketů), délku nesených dat, hop limit (ekvivalent TTL v IPv4), adresu odesílatele a příjemce.

IPv6 protokol se snaží co nejvíce omezit fragmentaci paketů, proto hlavička již neobsahuje pole s informacemi o fragmentaci. Fragmentovat smí pouze odesílatel a v takovém případě je povinnen připojit další hlavičku s informacemi o fragmentaci.

Objevování sousedů

Jedná se o mechanismus, který plní obdobné funkce jako protokol ARP. Jeho použití je však mnohem univerzálnější. Kromě zjišťování linkových adres umí také hledat směrovače a provádět automatickou konfiguraci zařízení. K jeho funkci postačuje 5 ICMPv6 zpráv:

Zjišťování linkových adres funguje tak, že tazatel vyšle na skupinovou adresu s pevně daným prefixem výzvu sousedovi (neighbour solicitation) a ten mu odpoví paketem neighbour adrertisment, kde mimo jiné uvede i svoji linkovou adresu. Výzva se posílá na IPv6 adresu souseda, jejichž prvních 104 bitů se nahradí prefixem ff02:0:0:0:0:1:ff00::/104.

Pokud je adresa souseda například 2001:db8:1:1:22a:fff:fe32:5ed1, tak se výzva zašle na adresu ff02::1:ff32:5ed1.

Protokol IPv6 si ukládá také informace o dosažitelnosti jednotlivých uzlů na lince. Každému uzlu přiděluje určitý stav podle toho, jak a kdy se s ním podařilo navázat spojení. Snahou je minimalizovat množství akcí potřebných k určení dosažitelnosti souseda, aby se zbytečně nezatěžovala linka. Proto se pro zjišťování dostupnosti mohou využívat i informace z vyšších vrstev.

IPv6 poskytuje také mechanismus bepečného objevování sousedů, který umožňuje zabránit podvržení ohlášení souseda. Secure Neighbour Discovery (SEND) umožňuje zprávy digitálně podepsat a přiložit k nim veřejný klíč příslušného sousedy. Takto si může každý příjemce snadno ověřit, zda ohlášení poslal důvěryhodný uzel. Podobně je možné digitálně podepsat router advertisment, aby se zabránilo podvržení falešného směrovače. V tomto případě musí i sám směrovač vyžadovat certifikované ohlášení od směrovače vyšší úrovně, čímž vzniká certifikační cesta (certification path).

Automatická konfigurace

Novinkou v IPv6 je bezestavová autokonfigurace. Jedná se o velmi jednoduchý mechanismus, který by měl umožnit zapojit zařízení do sítě a bez dalších nastavení jej začít používat. Zařízení po zapojení do sítě zašle výzvu směrovači a ten mu vrátí zpět ohlášení směrovače, v němž jsou uvedeny základní parametry sítě - především její prefix a adresy směrovačů. Následující tabulka ukazuje význam jednotlivých částí IPv6 adresy:

bity481664
významRouting prefixSubnet IDInterface ID
Prvních 64 bitů adresy přiděluje směrovač, který dostal prefix od nadřazeného směrovače tak, aby adresy tvořily jisou hierarchii a maximálně se zjednodušilo směrování. Druhá polovina adresy se používá pro identifikaci konkrétního síťového rozhraní. Spodních 64 bitů se může nastavit ručně nebo vygenerovat jako náhodné číslo. V ethernetu se však nejčastějí používá generování z MAC adresy ve formátu EUI-64.

Základem pro nový identifikátor rozhraní je 48bitová MAC adresa, například 00:1D:BA:06:37:64. Ta se prodlouží na 64 bitů tak, že se doprostřed vloží posloupnostFF:FE. Tím dostáváme adresu ve tvaru 00:1D:BA:FF:FE :06:37:64. Pokud se má jednat o globálně platnou adresu, musí se ještě její sedmý nejvyšší bit nastavit na hodnotu 1. Tím získáváme adresu 02:1D:BA:FF:FE:06:37:64, která se od identifikátoru rozhraní liší už jen způsobem zápisu.

Největším problémem bezestavové konfigurace je fakt, že router advertisment obsahuje jen velmi málo informací. Základním nedostatkem je absence adres DNS serverů, bez kterých je IPv6 jen těžko použitelné. Proto se musí IPv6 sítě doplnit ještě odlehčenou variantou serveru DHCPv6, který se použije jako podpůrný konfigurační nástroj (posílá jen rozšířené informace, ne IP adresu).

IPv6 počítá také se stavovou konfigurací prostřednictvím DHCPv6 tak, jak ji známe dnes. V tomto případě se využije plnohodnotné DHCPv6, které pošle klientovi všechny potřebné údaje. I v tomto případě je však konfigurace IP adresy prostřednictvím DHCPv6 volitelná, záleží na nastavení směrovače, který jej prezentuje v router advertismentu.

Směrování

Základni principy směrování v IPv6 zůstaly ve srovnání s IPv4 prakticky bez jakýchkoliv větších změn. Při konstrukci IPv6 sítě je možné použít některý z následujících protokolů:

DNS

DNS je základem Internetu a s protokolem IPv6 funguje téměř bez jakýchkoliv změn. IPv4 adresa se ke jménu přiděluje prostřednictvím záznam A. Protože IPv6 adresa je čtyřikrát delší než IPv4, bylo v případě IPv6 záznamů také písmeno A čtyřikrát zopakováno a přibyl nový typ záznamu AAAA určený pro IPv6 adresy.

Při tvorbě reverzního záznamu je nutné zápis celé adresy otočit (podobně jako v případě IPv4) a na konec přidat fiktivní doménu ip6.arpa. Otáčet se musí všechny bajty a nesmí být vynechány žádné nuly, jako je tomu u zkráceného zápisu IPv6 adresy.

Například reverzní záznam pro adresu 2001:db8:1c01:1:204:76ff:fe47:8e81 by měl následující podobu: 1.8.e.8.7.4.e.f.f.f.6.7.4.0.2.0.1.0.0.0.1.0.c.1.8.b.d.0.1.0.0.2.ip6.arpa

Bezpečnostní mechanismy

Jendou z výhod IPv6 je fakt, že udává implementaci IPSec jako povinnou. Existují dva typy bezpečnostních mechanismů, oba se realizují přidáním rozšiřující hlavičky do příslušného paketu:

Authentication Header - Slouží především k ověření totožnosti odesílatele a správnosti přenesených dat. Může obsahovat i informace, které zabrání zopakování paketů, pokud by se je podařilo útočníkovi zachytit. Data za hlavičkou však nejsou žádným způsobem šifrována a podpora hlavičky je nepovinná.

Encapsulating Security Payload - Umí podobné věci jako Authentication Header, ale veškerá data za touto hlavičkou jsou šifrována, takže pokud adresát nepodporuje ESP, nemůže si data vůbec přečíst.

Během přenosu dat je možné používat dva režimy:

Při zpracování příchozích dat pracuje IPv6 tak, že projde databázi bezpečnostní politiky (Security Policy Database, SPD) a najde odpovídající pravidlo. Z něj vede odkaz na tzv. bezpečnostní asociaci, která obsahuje konkrétní informace o použitém šifrování, klíčích apod. Na základě SPD se vyhodnotí, jestli se má datagram hned zahodit nebo přijmout, případně přijmout a aplikovat na něj další bezpečnostní mechanismy. Správu bezpečnostních asociací je možné provádět ručně, ale to je velmi těžkopádné, a proto byl pro účel přenosu asociací vyvinut Internet Key Excahnge Protocol (IKEv2).

Podpora mobilních zařízení

Pro mobilní zařízení jsou charakteristické časté změny IP adresy. Pokud zařízení přistupuje k nějaké službě, většinou to nevadí. Problém však nastává ve chvíli, kdy se jiný uzel snaží připojit k mobilnímu zařízení, neboť neví, jakou má zrovna adresu. IPv6 má vestavěný mechanismus, který umožňuje kontaktovat mobilní zařízení, i když není zrovna zapojeno ve své domácí síti.

Princip je následující: mobilní zařízení má svou domácí síť a v ní svou domácí adresu. Pokud jej chce kontaktovat nějaký uzel v síti, používá právě jeho domácí adresu. Dále musí být v domácí síti dostupný domácí agent (home agent), který ví o existenci mobilního zařízení. Pokud se zařízení dostane mimo dosah domácí sítě, kontaktuje svého domácího agenta a sdělí mu svoji aktuální IP adresu. Pokud přijde do jeho domácí sítě požadavek na spojení, zastoupí jej domácí agent a požadavek přepošle na aktuální adresu zařízení. Následně se mobilní zařízení domluví s daným uzlem na přímé cesty bez domácího agenta (optimalizace cesty). Obrázek převzat z [1]:

Podpora mobilních zařízení

Roli domácího agenta hraje jeden ze směrovačů v síti. Konfigurace se provádí automaticky včetně výběru směrovače. Protokol řeší i situaci, kdy během komunikace mobilní zařízení změní svou IP adresu. V tom případě musí mobilní zařízení uvědomit všechny uzly, se kterými v poslední době komunikovalo, včetně implicitního směrovače ze sítě, kterou právě opustilo. Ten se pak stává jeho dalším "domácím agentem", který přepošle žádosti na novou adresu.

Přechodové mechanismy

Protokol IPv6 byl navržen tak, aby mohl spolupracovat se starším IPv4. Proto je možné bez problémů provozovat oba protokoly na jednom síťovém rozhraní (tzv. dvojí zásobník - dual stack). Tím je uzel schopen komunikovat v obou "světech", nicméně jsou tyto světy prakticky oddělené.

Pokud potřebujeme propojit dvě IPv6 sítě přes mezilehlou IPv4 síť (obecně dvě sítě přes síť, která nepodporuje jejich protokol), musíme požít tunelování. Tunely mohou být vytvořené buď expicitně a nebo dynamicky v případě potřeby.

Pokud chce klient s výlučnou podporou IPv4 přistoupit do IPv6 sítě, může použít translátor. Ten funguje tak, že přijímá IPv4 pakety a přkládá je do IPv6. Objevilo se několik projektů s tímto cílem, zatím však nejsou dokonalé. Jedním z nich je například NAT64.

Za zmínku stojí, že státní správa České republiky přijala usnesení, podle něhož má být veškerá státní agenda přístupná od 1.1.2011 přes IPv6.

6to4

6to4 je nejsnažší cestou k IPv6, pokud poskytovatel Internetu tuto službu přímo nepodporuje. Je založeno na tunelování paketů skrz stávající síť. Jako druhý konec tunelu slouží anycastové zrcadlo s IPv4 adresou 192.88.99.1. Pro ČR jsou nejbližší servery v Praze a ve Vídni. Nastavení je velmi jednoduché, nicméně mechanismus vyžaduje veřejnou IPv4 adresu. Každá IPv4 adresa má totiž svůj vlastní prefix v IPv6, který má tvar 2002:xxxx:xxxx/48, kde za x doplníme IPv4 adresu přepsanou do šestnáctkového zápisu.

Samotný tunel se pak vytvoří pomocí 4 jednoduchých příkazů:

ip tunnel add sit0 mode sit remote any
ip link set sit0 up
ip -6 address add 2002:xxxx:xxxx::1/16 dev sit0
ip -6 route add default via ::192.88.99.1 dev sit0

Psaní aplikací kompatibilních s IPv6

Doporučuje se používat funkci getaddrinfo, která vrací vyplněnou strukturu addrinfo (ta v sobě může mít i odkaz na další strukturu addrinfo). Struktura obsahuje informace o L3 adrese (sockaddr) nezávislé na použitém protokolu.

Aplikace bez podpory IPv6 je možné bez problémů provozovat na počítači se dvěma protokolovými zásobníky, případně se využívá "miniaturní NAT", který programu dává fiktivní IPv4 adresu a ihned ji překládá na IPv6.

Konfigurace IPv6

Většina moderních operačních systémů má již vestavěnou podporu IPv6, a proto se klient konfiguruje obdobně jako v případě IPv4. V Linuxu se o IPv6 stará stejnojmenný modul, nastavení síťových parametrů se provádí programem ifconfig nebo obecnějším ip.

Pro správnou funkci směrovače je potřeba nainstalovat démoda radvd, který se stará o rozesílání router advertismentu. Program se konfiguruje prostřednictvím souboru /etc/radvd.conf.

interface eth0 {
  # Zapnutí rozesílání RA, nastavení rozmezí časového intervalu rozesílání RA (v sekundách):
  AdvSendAdvert on;
  MinRtrAdvInterval 3;
  MaxRtrAdvInterval 10;
  # Nastavení konkrétních parametrů pro daný prefix, viz man radvd.conf
  prefix 2001:0db8:0100:f101::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
  };
};

Literatura