IPv6

Leoš Kunc, xkunc2@fi.muni.cz


Obsah


Úvod

IPv6 vzniklo jako reakce na nedostatky IPv4. Oproti IPv4 přináší mnohá vylepšení.


Adresy IPv6

[rfc2373]

Formát adres

Dostupný adresový prostor byl rozšířen z 32 na 128 bitů. S tím se také změnily konvence zápisu adres. Adresy se v zápisu rozdělují po dvou oktetech oddělených dvojtečkou. Vlastní oktety jsou zapisovány hexadecimálně.

př.: FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

Pro další zjednodušení jsou zaváděny další konvence: vedoucí nuly ve dvojicích oktetů je možné vypustit

př.: FEDC:BA98:7654:0010:00DC:0008:7654:0010 lze zapsat FEDC:BA98:7654:10:DC:8:7654:10

dvojici prázdných oktetů lze zapsat pouze jednou nulou

př.: FEDC:BA98:7654:0000:00DC:0000:7654:0000 lze zapsat FEDC:BA98:7654:00:DC:0:7654:0

posloupnost po sobě jdoucích dvojic oktetů obsahujících pouze nuly je možné vyjádřit dvojitou dvojtečkou. Tuto konvenci lze, z důvodů jednoznačnosti použít v adrese pouze jednou.

př.: FEDC:BA98:7654:0000:0000:0000:7654:0000 lze zapsat FEDC:BA98:7654::7654:0

U adres je možné určit délku prefixu pomocí lomítka za adresou následovaném počtem bitů prefixu.

př.: FEDC:BA98:7654:0000:0000:0000:7654:0000/16 vyjadřuje adresový prefix délky 16 bitů.

Typy adres jsou rozlišeny podle prefixu následovně:

Reserved 0000 0000
Unassigned 0000 0001
Reserved for NSAP Allocation 0000 001
Reserved for IPX Allocation 0000 010
Unassigned 0000 011
Unassigned 0000 1
Unassigned 0001
Aggregatable Global Unicast Addresses 001
Unassigned 010
Unassigned 011
Unassigned 100
Unassigned 101
Unassigned 110
Unassigned 1110
Unassigned 1111 0
Unassigned 1111 10
Unassigned 1111 110
Unassigned 1111 1110 0
Link-Local Unicast Addresses 1111 1110 10
Site-Local Unicast Addresses 1111 1110 11
Multicast Addresses 1111 1111

Jak je z výše uvedeného patrné, většina adresového prostoru není zatím přidělena a je považována za rezervu, která bude použita podle toho, jakým způsobem se budou zvyšovat požadavky na přidělování adres z jednotlivých skupin.

Typy adres

IPv6 zavádí několik druhů adres:

Unicast

Identifikátory zařízení (Interface Identifiers)

Používají se k identifikaci zařízení. V rámci spojení musí být jednoznačné. Identifikátor má délku 64 bitů. Pokud zařízení pro něž je Identifikátor tvořen má MAC adresu, použije se většinou tato adresa, která se doplní vložením dvoubajtového vzorku mezi část MAC adresy, která identifikuje výrobce zařízení a zbylou část. V případě, že zařízení nemá MAC adresu, může být použita MAC adresa jiného zařízení stejného uzlu. V Identifikátoru existují ještě dva bity se zvláštním určením. Prvním je sedmý bit zleva, který když je nastaven na 0 určuje pouze lokální platnost Identifikátoru v rámci spojení, v opačném případě je identifikátor platný globálně. Následující bit, osmý v pořadí zleva, určuje, zda je Identifikátor indivituální, nebo skupinový.

Lokální Identifikátory se mohou používat např. pro spojní přes seriový link.

Nespecifikovaná adresa

je speciálním případem unicastové adresy. Jde o adresu se samými nulami 0:0:0:0:0:0:0:0 (jinak ::). Může být uvedena jako adresa uzlu, který nezná svou adresu, např. uzlu který se při inicializaci snaží dotazem do sítě svou adresu zjistit. Tato adresa nesmí být nikdy použita jako cílová adresa, ani nesmí být požita v Routovací hlavičce.

Loopback

Loopback má hodnotu ::1 tj. samé nuly ukončené jedničkou. Nesmí být přidělen žádnému fyzickému zařízení.

IPv6 adresy se zapouzdřenými adresami IPv4

Pro zpětnou kompatibilitu jsou adresy IPv4 mapovány do adres IPv6. Mapovány jsou dvěma způsoby. V prvním prípadě jde o mapování adres uzlů, které mají zároveň také adresy IPv6, ve druhém se jedná o uzly pouze s přidělenou IPv4. V prvním případě je IPv4 adresa mapována na spodních 32 bitů IPv6 adresy, ve druhém jsou před tuto adresu přidány dva octety naplněné jedničkami.

např.:

0:0:0:0:0:0:c0a8:0001 je adresa počítače s IPv6 adresou, ktežto 0:0:0:0:0:ffff:c0a8:0002 je adresa počítače bez IPv6 adresy.

Aggregatable Global Unicast Addresses

je typ adresy označující daný uzel jednoznačně v globálním měřítku. Nejvyšší tři bity jsou vždy 001. Spodních 64 bitů je vyhrazeno pro Identifikátor zařízení, vyšších 16 bitů pro adresu podsítě a zbylé bity jsou určeny pro adresaci od providera nebo exchangera. Z těchto 45 bitů je nejvyšších 13 určeno pro top-level adresaci, následujících osm je zatím reservováno a zbylých 24 bitů slouží pro next-level adresaci.

Local-Use IPv6 Unicast Addresses

Obsahuje dva typy adres - link-local a site-local.

Link-Local

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ě.

Site-Local

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ě.

Anycast Addresses

Adresy typu Anycast jsou oproti IPv4 novým typem adres. Paket s cílovou Anycast adresou bude doručen na právě jednu z množiny adres a to na tu nejbližší. Anycast adresy jsou zatím povoleny pouze pro routery a nesmí být použity jako zdrojové adresy. Anycast adresy jsou obsaženy v souboru adres vyhrazeném pro Unicast adresy a od těchto adres nejsou syntakticky rozlišitelné.

Existuje ještě jedna anycast adresa, která je předvolena pro každé spojení na síti. Tato adresa je tvořena prefixem shodným s unicastovou adresou spojení doplněnou nulami v místech Identifikátoru zařízení. Adresa slouží aplikacím vně sítě, které požadují spojení na jeden z routerů příslušného spojení.

Multicast Addresses

Multicastové adresy slouží k doručení paketu k více uzlům. Každý uzel může přináležet k libovolnému počtu multicastových skupin. První oktet adresy je naplněn jedničkami. Poté následují čtyři bity příznaků, z nichž je zatím použit jen čtvrtý, který označuje v případě že je nastaven na 0, že se jedná o trvale přiřazenou "well-known" adresu, v případě 1, že jde o adresu nepřiřazenou trvale "transient". Well-known adresy jsou přiřazovány globální autoritou a platí ve všech sítích. Transient adresy se definují lokálně a platí pouze v definujícím segmentu. Další čtveřice bitů určuje rozsah platnosti adresy.

Zatím jsou přiřazeny nasledující hodnoty (hexa):

0 reserved
1 node-local scope - platnost v rámci uzlu
2 link-local scope - v rámci spojení
5 site-local scope - v rámci podsítě
8 organization-local scope - v rámci organizace
E global scope - globálně platné
F reserved

Zbylých 121 bitů identifikuje vlastní skupinu.

Multicastové adresy se nesmí objevit jako zdrojové adresy ani v ruotovacích hlavičkách. Některé multicast adresy jsou rezervovány, jiné mají zvláštní význam.

FF01:0:0:0:0:0:0:1 - všechny IPv6 uzly uzlu (nodes)
FF02:0:0:0:0:0:0:1 - všechny uzly spojení (nodes)
FF01:0:0:0:0:0:0:2 - všechny routery uzlu (routers)
FF02:0:0:0:0:0:0:2 - všechny routery spojení (routers)
FF05:0:0:0:0:0:0:2 - všechny routery podsítě (routers)
FF02:0:0:0:0:1:FFXX:XXXX - speciální adresa, která je používána v případě, že není známe MAC adresa uzlu. (solicited-node)

V současné době se pro identifikaci skupiny používá pouze spodních 32 bitů.

Minimální požadavky na rozeznávání adres:

Uzel musí rozeznávat:
vlastní Link-local adsesy pro všechna rozhraní
přiřazenou unicast adresu
loopback
nodes multicast adresy
solicited-nodes adresy všech unicast a anycast adres které má přiřazeny
multicast adresy všech skupin do kterých patří

router musí rozeznávat všechny adresy jao uzel a navíc:
anycast adresy podsítí (subnet-router)
všechny další anycast adresy se které mu byly nakonfigurovány
všechny routers multicast adresy
multicast adresy všech skupin do kterých patří

Hlavičky

[rfc2460]

U hlaviček IPv6 došlo k určitému zjednodušení vypuštěním některých polí oproti IPv4. Toto zjednodušení bylo provedeno z důvodů rychlejšího zpracování hlaviček při směrování. Dalším markantním vylepšení je zavedení rozšiřujících hlaviček, které umožňují větší možnosti volby a budoucí rozšiřitelnost o další potřebné hlavičky bez nutnosti změny návrhu.

Hlavička má nyní jednotnou délku 40 bajtů s následujícím rozdělením:
Verse 4bity - hodnota vždy 6
třída(traffic class) 8bitů - označuje třídu služby jako Type of Service u IPv4 typ toku(flow label) 20bitů - měl by rozlišovat požadavky na přenost paketu (např. real-time), zatím nepříliš jasné použití
délka paketu 16bitů - v oktetech
další hlavička(next header) 8bitů - typ následující hlavičky
hop limit 8bitů - jako TTL u IPv6
zdrojová adresa - 128bitů
cílová adresa - 128bitů

Rozšiřovací hlavičky

Za hlavní hlavičku je možné řadit další tzv. rozšiřovací hlavičky. Tyto hlavičky by měly být řazeny v doporučeném pořadí. Každá rozšiřovací hlavička obsahuje na svém začátku typ hlavičky následující a svou délku v osmioktetech. Na uzel, který paket jsou kladená přísná pravidla na způsob zpracování paketu. Každý uzel, který není v hlavičce uveden jako cílový nesmí číst žádnou další hlavičku, až na jedinou výjimku, kterou je Hip-by-Hop Options hlavička. Uzly které jsou v dané hlavičce uvedeny jako cílové musí číst a zpracovávat všechny následující hlavičky a to vždy v pořadí, ve kterém jsou uvedeny.

Nejzákladnější typy rozšiřovacích hlaviček

Routing Header
je v ní uchována cesta, kterou má paket projít ke konečnému cílovému uzlu. Seznam nesmí být použit pro cestu paketu od cíle ke zdroji.
Fragment header
pakety nesmí být děleny v routeru jako u IPv4, ale pouze v zdrojovém uzlu. Tento typ hlavičky podává informace o skutečnosti, že se jedná o fragment a je nositelem potřebných údajů o fragmentu (offset, koncovost). Fragmenty nesmí být menší než 1280 bajtů, doporučena je velikost přes 1500 bajtů. IPv6 dává k dispozici prostředky ke zjištění maximální MTU a lince, po které bude pakety posílat.
Hop-by-Hop Options
Destination Options Header
Authentication header
Encapsulating Security Payload header

Pseudohlavičky


Multihoming

V IPv6 může mít jedno zařízení více adres a může mít také adresy od více providerů. V tomto případě se však mění jen adresa providera a zbytek adresy (pod 48bitem), zůstává nezměněn.


Exchangers

Exchangers slouží pro adresaci více providerů bez potřeby změny adresy. Místo toho stačí uzlu znát adresu exchangera.


Renumbering

Adresy IPv6 mohou mít tzv. lifetime, dobu po kterou jsou platné a po této době mohou být změněny. Router v intervalech vysílá informace o adresách (prefixech), podle kterých mohou uzly své adresy upravit. Změna může být také vyvolána např. přenosem zařízení do dosahu jiného providera.


Tunneling

Tunneling slouží k přenosu paketů IPv6 přes IPv4. Routery na obou stranách tunelu mají IPv6 i IPv4 adresy. Router odesílající pakety tyto pakety zabalí do paketů s cílovou adresou druhého routeru. Cílový router po obdržení IPv6 pakety vybalí.


Autoconfiguration

IPv6 umožňuje aby systém mohl nakonfigurovat zařízení automaticky. Existují dva přístupy:

Statefull

Konfigurace pomocí DHCP. Existuje někdo, koho se dá dotázat na adresu a ten adresu přidělí.

Stateless

Systém sám odvodí adresu pro zařízení např. z MAC adresy.


Security

[rfc2401]

Tzv. IPsec. Implementace je povinná, ale např. u Linuxu hodně pokulhává [USAGI]. Jde o ochranu paketu přímo na úrovni IP.


6Bone

www.6bone.net

Jde o experimentální páteřní síť nad IPv6.


IPv6 a Linux

Linux+IPv6-HOWTO
Linux+IPv6-HOWTO2

Instalace

Nejdříve je třeba zajistit podporu IPv6 v kernelu. Toho lze dosáhnou buď zakompilováním podpory přimo do kernelu, nebo použitím modulu ipv6. Pokud je již podpora zavedena, musí existovat '/proc/net/if_inet6'. Vzhledem k tomu, že podpora ipv6 originálního jádra je historicky poměrně slabá, je dobré použít USAGI patch který doplňuje nekteré další funkce. Ještě je třeba se ujistit, zda IPv6 podporují potřebné nástroje ifconfig,ping6 a route.

Konfigurace

Host

Nyní můžeme přistoupit ke konfiguraci. Základní konfigurace se provádí v souboru /etc/sysconfig/network.

NETWORKING_IPv6=yes
IPV6_AUTOCONF=no #vypíná autokonfiguraci - statická konfigurace
IPV6_AUTOTUNNEL=no
IPV6_TUNNELMODE=IP

Poté nakonfigurujeme příslušné rozhraní. Do souboru /etc/sysconfig/network-scripts/ifcfg-eth0 přidáme:

IPV6INIT=yes
IPV6ADDR=3ffe:2e01:1:5::2/64

Ještě potřebujeme nakonfigurovat směrování. Do souboru /etc/sysconfig/static/routes-ipv6 vložíme řádky:

# IPv6 network to route IPv6 gateway address
eth0 ::0/0 3ffe:2e01:1:5::1
eth0 3ffe:2e01:1:5::0/64

Router

Upravíme základní konfigurační soubor /etc/sysconfig/network

NETWORKING_IPv6=yes
IPV6FORWARDING=yes
IPV6_AUTOCONF=no
IPV6_ROUTER=yes
IPV6_AUTOTUNNEL=no
IPV6_TUNNELMODE=IP

Následně upravíme konfigurační soubory rozhraní /etc/sysconfig/network-scripts/ifcfg-eth0

IPV6INIT=yes
IP6TO4INIT=no
IPV6_ROUTER=yes
IPV6_AUTOCONF=no

a /etc/sysconfig/network-scripts/ifcfg-eth1

IPV6INIT=yes
IPV6ADDR=3ffe:2e01:1:5::1/64
IPV6_ROUTER=yes

Tunnel

/etc/sysconfig/network-scripts/ifcfg-sit0

DEVICE="sit0"
...
IPV6INIT=no
IPV6FORWARDING=yes

/etc/sysconfig/network-scripts/ifcfg-sit1

DEVICE="sit1"
...
IPV6INIT=no
IPV6TUNNELIPV4=129.254.254.86
IPV6TUNNELIPV4LOCAL=129.254.164.13
IPV6ADDR=3ffe:2e00:e:fff6:2/127

/etc/sysconfig/static/routes-ipv6

# IPv6 network to route IPv6 gateway address
eth0 3ffe:2e01:1:5::0/64
sit1 ::0/0 3ffe:2e00:e:fff6::1
sit1 3ffe::0/16
sit1 2000::0/3

IPv6 a FreeBSD

www.kame.net
www.freebsd.org

Ve freeBSD a ostatních systémech je použita KAME implementace IPv6. Tato je přímo součástí distribuce.

Instalace

Pokud v jádře není podpora IPv6, je tuto třeba dodat přidáním řádku "options inet6" v konfiguračním souboru a jádro překompilovat.

Konfigurace

Host

Ve hlavním konfiguračním souboru /etc/rc.conf přidáme řádky:

ipv6_enabled=yes
ipv6_network_interface="xl0 lo0"
ipv6_ifconfig_xl0="3ffe:2e01:1:3::2 prefixlen 64"
ipv6_gateway_enable=no

Existují dva způsoby autokonfigurace. Můžeme buď nenastavovat pro rozhraní žádnou adresu, potom se provede autokonfigurace rozhraní uvedených v ipv6_network_interface, nebo pro některá rozhraní omezit autokonfiguraci zadáním prefixu ipv6_prefix_xl0="3ffe:2e02:1" a nechat automaticky dokonfigurovat pouze zbytek adresy.

Router

/etc/rc.conf

ipv6_enabled=yes
ipv6_network_interface="xl0 xl1 lo0"
ipv6_prefix_xl0="3ffe:2e02:1:3"
ipv6_ifconfig_xl1="3ffe:2e01:1:3::1 prefixlen 64"
ipv6_gateway_enable=yes
rtadvd_enable=yes
gif_interface=gif0
ipv6_firewall_enable=no

/etc/rc

/sbin/route add -inet6 default 3ffe:2e01:1:3::1 #default gateway

Tunnel

/etc/rc

/usr/sbin/gifconfig gif0 129.254.165.59 129.254.254.86
/sbin/ifconfig gif0 inet6 3ffe:2e00:e:fff5::2 3ffe:2e00:e:fff5::1 prefixlen 64
/sbin/route add -inet6 default 3ffe:2e00:e:fff5::1

IPv6 a BIND

BIND podporuje IPv6 ve verzích 4.9.5, 8.1.x a 9.x Ve verzích nižších něž 9 je podporován nový příkaz AAAA, který v podstatě plní funkci A v IPv4. U zpětného mapování se používá PTR. Ve verzi Bind9 existují dva další příkazy A6 a DNAME. DNAME je obdobou CNAME u IPv4. A6 je podobný na AAAA, umožňuje však přiřazení podle prefixů, čímž umožňuje renumbering.