IPv6 - Internet Protokol verze 6

Michal Heppler (xheppler@fi.muni.cz)

Proč?

Na tuto otázku mám hned několik odpovědí, proč je IPv4 nedostačující. Nejsilnější argument je asi podpora pro mobilní zařízení. Jejich množství rychle roste a s tím i potřeba nějakého rozumného řešení (každý chce mobil s přístupem k internetu a nechce pokaždé přenastavovat síť na svém notebooku když si sedne do parku na lavičku...). Kličky v podobě NAT apod. jsou v praxi těžko použitelné.

A jak to vypadá?

Adresní prostor se ,,trošku'' rozšířil na 128 bitů. To znamená že teoreticky připadá na každého člověka na přelidněné Zemi 3.4 x 10 na 28 adres pro notebooky, kapesní počítače, mobily, kalkulačky, televize, rádia, mikrovlnky či ledničky. V praxi ale pro běžné použití získá ,,jen'' 64-bitový adresní prostor (1.8x10^19, no nic moc...).

Adresní prostor byl dále rozdělen do tří kategorií:
Unicast (idividuální): jedno rozhraní nějakého zařízení.
Multicast (skupinové): adresy skupin nějakých zařízení. Paket se rozešle všem členům skupiny. Používáno pro různé videokonference a tak, ale i místo broadcastů, které již tak nejsou potřeba.
Anycast (výběrové): Paket je určen pro skupinu jako v Multicast, ale bude doručen jen na jedno (nejbližší). Klient pošle požadavek serverům a jeden se jej ujme...

Jednotlivé kategorie se rozlišují pomocí různých prefixů:
0000 0000 Většinou nepoioazeno...
0000 0001 Rezervováno.
001 Běžné IP adresy pro uživatele, identifikují celosvětově a jednoznačně rozhraní
1111 1111 (FF) Multicast adresy...
1111 1110 10 (FEB) Lokální linkové adresy, jednoznačné jen v rámci fyzické sítě
1111 1110 11 (FEC) Místní lokální adresy, jednoznačné jen pro danou instituci

Kvůli trochu delším adresám byl zaveden nový způsob zápisu. IPv6 adresy zapisujeme v 16-kové soustavě, čteoice cifer oddělujeme dvojtečkou.
Např: FED1:1234:ABDC:0000:0000:0045:6789:EF01
Nuly na začátku každé čtveřice můžeme vypustit: FED1:1234:ABCD:0:0:45:6789:EF01, Po sobě jdoucí nulové skupiny lze nahradit dvojicí dvojteček: FED1:1234:ABCD::45:6789:EF01, ale dvě dvojtečky můžeme zapsat pouze jednou.
A na konec, za lomítko přidáme délku adresního prefixu.
No, ještě že máme DNS.

Globální adresy

jsou asi tou pro uživatele nejzajímavější částí, protože identifikují jednotlivá zařízení. Díky délce je směrování paketů docela složitá záležitost, tak aby se směrovačům ulehčilo, je kladen od začátku na pořádek.

Adresy jsou přidělovány systematicky tak, aby všichni zákazníci jednoho poskytovatele měli stejný prefix. To výrazně usnadní směrování. Proto jsou taky ip adresy strukturovány hierarchicky:

+---16 bitů----+---16 bitů----+---16 bitů----+---16 bitů----+--------64 bitů--------+
|    prefix    | poskytovatel |   zákazník   |    podsíť    |       rozhraní        |
+--------------+--------------+--------------+--------------+-----------------------+

Část nazvaná rozhraní se vyplní při autmatickém získání adresy. Co se tam dosadí? Nějaké jednoznačné číslo. Nejlépe vygenerované z MAC adresy rozhraní. Tomuto generování se říká EUI-64 a pracuje tak, že se k 48 bitům MAC adresy přidá doprostřed číslo fffe. IPv6 ještě navíc modifikuje hodnotu předposledního bitu v prvním bajtu. Nulu na jedničku:

00:04:76:47:8e:81 -> 0 2 04:76 ff:fe 47:8e81
Změny jsou omezerovány...

Hlavička

Hlavička stejně jako vše ostatní prodělala mnoho změn. Hlavně je poměrně krátká (pouhých 40B, avšak 32B zabírají adresy odesílatele a příjemce). Ve zbytku je jen to nejdůležitější (počet hopů - neco jako TTL) a pokud potřebujeme přibalit další informace, tak musíme sáhnout po rozšiřojících hlavičkách. Každá hlavička (základní i rozšiřující) obsahuje položku další hlavička, která říká, co dále následuje.

Hlavičky musí být řazeny podle zajímavosti pro směrovače, tak aby jim to co nejvíce usnadnilo práci.

Rozšiřující hlavičky jsou tyto: Volby pro všechny - informace, které by mohly zajímat směrovač; Směrování - adresy, kterými musí paket projít; Fragmentace - co s rozbitým paketem (fragmentovat může ale jenom odesílatel); Šifrování - obsah je šifrován, co je potřeba k rozšifrování; Autentizace - pro ověření pravosti obsahu a totožnosti odesílatele; Volby pro cíl - informace pro příjemce paketu; Mobilní - potřeba pro komunikaci s přenosným zařízením.

Detailní popis hlavičky poenechám odkazům dole.

Automatická kofigurace

IPv6 je narženo s ohledem na uživatele tak, aby nemuseli v podstatě nic konfigurovat (pěkná poedstava...). Takovému uživateli se hned nabízí dvě varianty automatické konfigurace: stavová a bezstavová.

Stavová konfigurace není nic nového. Jedná se v podstatě o DHCP verze 6.

Bezstavová konfigurace je na principu objevování sousedů a nepotřebuje tedy nic jako server. Každý směrovač zde vysílá v pravidelných intervalech tzv. ohlášení směrovače s základníma informacema o síti (prefix sítě či zda je default GW). To je sice pěkné, ale jak se z toho mám dozvědět něco o místních DNS serverech? Alespoň to nahrazuje stávající ARP.

Bezpečnost

Implementace zabezpečení je u IPv6 povinná. To je jistě výhoda. Kdyby ji jen programátoři nedkládali na později... Většinou máme tedy prostě smůlu.

Existují dva mechanizmy, použijeme je pomocí rozšiřujících hlaviček. Je to šifrování a ověření odesílatele.

Základem pro bezpečnost je datová struktura bezpečnostních politik, soubor pravidel říkající, který paket musí být podroben jakou bezpečnostní prověrkou. Existují to základní pravidla: zahodit, prověřit, pustit bez prověření. Taková pravidla potom např. říkají, že vše od stroje A prověřit a zbytek zahodit...

Cestujeme

Podpora mobilních zařízení existuje. A je prostá. Každé zařízení má svoji domácí síť a tedy i domácí IP adresu. Ta je zanesena v DNS a na ni přicházejí spojení. Pokud je stroj zrovna na cestách, je zastoupen svým domácím agentem (nějakým směrovačem v domácí síti). Tento domácí agent převezme roli naší cestující kalkulačky a odpovídá na vše za ni a data pošle na kalkulačku, která průběžně informuje, kde se zrovna nachází.

DNS jen krátce

Bez DNS se moderní internet už prostě neobejde. Kolik si teď pamatujete IP adres? Tak si představte, že je čtyřikrát delší a navíc v 16-kové soustavě...

Dopředné dotazy

Pro tento převod slouží záznamy typu AAAA (podle IPv4 A, ale adresa je 4x delší, tak i více A-ček)
jméno AAAA IPv6adresa

Zpětné dotazy

prodělali jen nepatrnou změnu. V podstatě jsou stejné jako IPv4. K adrese 2001:718:1c01:1:204:76ff:fe47:8e81 by vypadal takhle:
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.1.7.0.1.0.0.2.ipv6.arpa
Ona instituce by potom měla reverzní doménu 1.0.c.1.8.1.7.0.1.0.0.2.ipv6.arpa (48 bitů) a záznam v DNS pro stroj jim patřící:
1.8.e.8.7.4.e.f.f.f.6.7.4.0.2.0.1.0.0.0 PTR pocitac.v.instituci.

A jak tedy na to?

Pro začátek si postavíme nativní IPv6 síť. Pro ni potřebujeme podporu do jádra a pár programů jako ip z balíku iproute2, potom balík radvd, který obsahuje démona pro automatické konfigurace. Dále bych doporučil Linuxáoům patch USAGI, neboť implementace IPv6 je zatím nekompletní a tento patch situaci vylepšuje.

Jádro

Před použitím a pokusy o rozjíždění je třeba mít podporu v jádře. Tu zapnete volbou CONFIG_IPV6 (ve 2.4 řadě je to networking options -> the ipv6 protocol) a zkompilujete. Samozřejmě nabootujete a už se můžete kochat IPv6 adresami ve výpisu z ifconfig.

Statická adresa

Nyní nám již nic nebrání v nastavení statické ipadresy pro rozhraní na serveru. To se provede pomocí příkazu ip s parametry.

ip addr add 7a5e:14:ad9e::5a/prefix dev sitovka

Automatická adresa

Ale co stanice? Tam je lepší nechat nastavování na autokonfiguraci. S tou nám výrazně pomůže program radvd, který rozesílá patřičná oznámení o síti po síti. jeho konfigurace je poměrně jednoduchá, provádí se souborem /etc/radvd.conf.

Zde je jeden opsaný příklad:
# Posíláme do vnitřní sítě
interface eth1
{
        # Povolíme odesílání
        AdvSendAdvert on;

        # Nastavíme prefix
        prefix 3ffe:ffff:1234::/64
        {
                # Platnost adresy bude 1 hodina
                AdvValidLifetime 3600;
        };
};

Další volby jsou v manuálové stránce a pro ladění existuje program radvdump.

Na stanicích není samozřejmě nutné nic nastavovat.

Tunel až na Bahamy

Podpora ze strany poskutovatelů a správců sítě zatím není moc růžová. Málokde můžeme vybudovat pořídnou IPv6 síť. Proto je nutné si tu a tam pomoc malým tunýlkem mezi dvěma IPv6 stroji přes IPv4 síť.

Na začátku tunelu se IPv6 paket zabalí do svého staršího bráchy, protáhne se až na druhý konec, kde se zase vybalí a nechá putovat tak jak byl. Cesta se zabalenému paketu zdá dlouhá jako jeden HOP.

Pro vytvoření tunelu nám slouží již dříve použitý program ip:

ip tunnel add bahamy mode sit local 12.34.56.78 remote 87.65.43.21 ttl 64
Tunel se jmenuje bahany a je z našeho PC pod stolem 12.34.56.78 až na druhou stranu, stroj 87.65.54.32.21. Nyni jej ještě aktivujeme.
ip link set bahamy up
A už můžeme testovat.

Dále je potřeba mít globální IPv6 adresu a nastavit si routování a firewall. Zde musím upozornit, že pakety IPv6 zabalené do IPv4 běhají na portu 41. Bylo by tedy záhodno si jej povolit. Pro nastavení firewallu pro IPv6 slouží program ip6tables, který má stejné použití jako verze pro starší protokol.

Jak si nastavit routování nechám jen v odkazech dole.

Odkazy

Projekt 6bone - experimentální IPv6 síť
Pěkné stránky o protokolu...
Návod jak rozjet tunely nad IPv4 a podobně... Vhodně polopatisticky napsané