IPv6

Břetislav Vomočil, breta@mail.muni.cz

Obsah

Úvod

IPv6 je zkratkou pro Internet Protocol version 6 a je následníkem stále ještě používaného stejnojmenného protokolu ve verzi 4 (IPv4). Podobně jako IPv4 spadá do třetí, síťové, vrsvy referenčního modelu ISO/OSI.

Hlavní rysy

Mezi hlavní vlastnosti, které motivovaly vývoj nového prokolu namísto úpravy IPv4, patří:

Historie protokolu

Vlastnosti protokolou

IPv6 paket

          .       8b      .       8b      .       8b      .       8b      .
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      0b  | Verze | Třída provozu |             Značka toku               |   32b
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     33b  |           Délka dat           | Dal. hlavička |     Dosah     |   64b
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     65b  |                                                               |   96b
          +                                                               +
     97b  |                                                               |  128b
          +                      Zdrojová adresa                          +
    129b  |                                                               |  160b
          +                                                               +
    161b  |                                                               |  192b
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    193b  |                                                               |  224b
          +                                                               +
    225b  |                                                               |  256b
          +                       Cílová adresa                           +
    257b  |                                                               |  288b
          +                                                               +
    289b  |                                                               |  320b
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    321b  |                                                               |  ...
          +           Doplňkové hlavičky / Data nesená paketem            +
    ...   |                                                               |  ...
		

Význam jednotlivých částí:

Rozdíly oproti IPv4

Adresní prostor

Formát adresy

Jak už bylo zmíněno na obrázku paketu, tak zdrojová/cílová adresa má velikost 128b a zapisuje se ve formátu 8 skupin čtveřic hexadecimálních znaků oddělených dvojtečkou, např. 0123:0000:0000:0000:efcd:0000:0000:3210

Jelikož se v adresách často objevuje nula, je zdavedeno několik způsobů, jak adresu zkrátit/zjednodušit:

Spolu s adresou se ještě uvádí délka prefixu od začátku adresy ve tvaru: adresa/delka_prefixu. Tento mechanismus je známý již z IPv4 pod pojmem CIDR (Classless Inter-Domain Routing) a spočívá v tom, že adresy ve stejné síti mají stejný prefix. Délkou prefixu stanovíme velikost dané sítě (tj. maximální počet adres spadající do této sítě, které lze přidělit jednotlivým rozhraním).

Druhy adres

Každé síťové rozhraní počítače či jiné IP-kompatibilní zařízení může mít přidělenu adresu (příp. více adres), která je jedna z následujících typů:

Oproti verzi 4 tedy přibyl nový druh adresy (anycast), zatímco byly odstraněny všesměrové adresy (broadcast).

EUI-64 formát

Jedná se o mechanizmus přidělení IP adresy, kde lokální část adresy se odvozuje z fyzické adresy rozhraní. Pro sítě na bázi ethernetu se použije MAC adresa, do jejíž prostředku je vloženo fffe a její 7. nejvyšší bit udává, jestli se jedná o adresu lokální (1) či globální (tj. celosvětově jednoznačnou) (0). IPv6 však používá modifikovanou podobu tohoto standardu, kde je opačný význam bitu 0 a 1 a tedy platí, že 0 = adresa lokální, 1 = adresa globální. Příklad vytvoření lokální adresy pro počítač s MAC adresou 00:1f:31:97:7a:fe:

  1. MAC: 00:1f:31:97:7a:fe == 00000000 00011111 00110001 10010111 01111010 11111110
  2. za 3. oktet se vloží fffe a 7. nejvyšší bit MAC adresy se nastaví na 0: 00000000 00011111 00110001 11111111 11111110 10010111 01111010 11111110 == 001f:31ff:fe97:7afe
  3. použije se prefix dle typu adresy - pro lokální linkovou adresu by to byl fe80::/10: fe80::001f:31ff:fe97:7afe
Nevýhoda tohoto mechanismu spočívá v tom, že se spoléhá na to, že každá MAC adresa je celosvětově jedinečná. Změnit MAC adresu však není až takový problém (viz man ifconfig)... Proto se v RFC 4941 objevil způsob, jak tomuto alespoň částečně zabránit a to pomocí náhodného generování identifikátorů rozhraní, které jsou platné pouze určitou omezenou dobu a poté se změní. To ovšem znamená, že obě strany musí začít s navazováním spojení v době, kdy se "nic nemění", aby spojení mohlo být v pořádku ustaveno.

Zvolil se tedy kompromis, kdy rozhraní/zařízení má adres více - jednu založenou na své MAC adrese používanou primárně pro ustanovení spojení (která je i uvedena v DNS databázi) a dále adresu s náhodně generovanými id. rozhraním pro následnou vlastní komunikaci (která už v DNS uvedená není).

Používané adresy

Lokální linkové adresy (link local; RFC 1918)

Jedná se o adresy, které jsou jednoznačné pouze v rámci lokální sítě (tj. linky), neboli jednoho segmentu spravovaného směrovačem. Jedná se o stejný mechanismus, jako jsou adresy 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 v IPv4, které jsou směrovači "podporovány" pouze uvnitř daného segmentu. Mimo něj už není tato adresa platná a pro spojení s takovýmto rozhraním je nutné provádět např. překlad adres mezi vnější veřejnou a vnitřní neveřejnou sítí. Díky tomu, že konstrukce takovéto adresy nevyžaduje žádnou další znalost lokální infrastruktury, je pro rozhraní k dispozici takováto adresa vždy.

Tyto adresy jsou ve tvaru:

	          .  10 b .           54b             .                       64b                     .
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	          | fe80  |          0...0            |                 id. rozhraní                  |
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			

Unikátní lokální adresy (unique local, ULA; RFC 4193)

Význam těchto adres je podobný jako u lokálních linkových adres, tj. jednoznačnost jen v dané lokální síti. Pokud bychom uvažovali, že každá síť může být pouze na jedné lince, tuto skupinu adres bychom vůbec nepotřebovali. V opačném případě, kdy síť jedné organizace je rozdělena na několik podsítí, které mezi sebou mají vzdálenost několika směrovačů, už nelze lokální linkové adresy použít.

Tyto adresy jsou ve tvaru:

	          .  7b .1b .            40b            .    16b      .             64b               .
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	          | fc  |1/0|     náhodně generované    | id. podsítě |       id. rozhraní            |
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			

Skupinové (multicast) adresy (RFC)

Pomocí adres tohoto typu lze specifikovat pouze určitou skupinu rozhraní, které mají do dané sítě patřit. Nejčastěji se toto používá v souvislosti s distribucí audio/vizuálního obsahu (např. videokonference), kdy každé rozhraní, které chce daný mediální obsah přijímat, se přihlásí do této skupiny, rozhraní dostane přidělenou adresu skupiny, na které daný obsah přijímá.

Tyto adresy jsou ve tvaru:

	          .   8b  .   4b  .   4b  .                       112b                                .
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	          | ff00  | volby | dosah |                      id. skupiny                          |
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			

Výběrové (anycast) adresy (RFC 4786)

Výběrové adresy jsou novinkou v IPv6. Myšlenka spočívá ve vytváření skupin rozhraní, podobně jako u multicastu, kde však stačí doručit daný obsah libovolnému rozhraní z této skupiny. Tento koncept lze s výhodou uplatnit v případě, kdy chceme zajistit větší dostupnost určité rozsáhlejší služby - pro její obsluhu nastavíme několik spolupracujících serverů v různých geografických destinacích. Když se uživatel snaží kontaktovat danou službu, tak jeho data jsou převzata nejbližším (z geografického pohledu) serverem a tím lze zmenšit latenci při přenosu dat. Typickým praktickým příkladem jsou kořenové servery jmenné služby DNS, které by tohoto konceptu mohli lépe využít k rozkládání zátěže (tj. že jeden root server ve skutečnosti není jediný server, ale je tvořen privátní sítí dílčích serverů, které jsou však uživateli skryty pod jednou adresou).

Výběrové adresy nemají specifikovaný speciální prefix a spadají do části globálních individuálních adres a ze samotné adresy nelze říci, jestli je výběrovou či nikoliv. Toto se odvíjí až od samotné konfigurace směrování. Platí, že všechny uzly jedné výběrové sítě mají určitou část (tj. prefix) své adresy stejnou. V jednotlivých směrovačích (resp. jejich tabulkách) je pak nutné pro tento prefix nastavit cestu (adresu) k nejbližšímu uzlu této sítě.

Nevýhodou tohoto mechanismu jsou stavové protokoly - z důvodu dynamického směrování, které se přizpůsobuje aktuálnímu stavu sítě, se může stát, že série datagramů odeslaná v jeden okamžik nedorazí pohromadě jednomu uzlu výběrové sítě, ale po částech ji dostane více uzlů této sítě. Možným řešením je službu rozdělit na části ustavovací (kde se ustaví spojení s některým z uzlů bezstavovým protokolem) a vlastní přenos informací (kde se již používá stavový protokol a komunikace se provádí s již kontaktovaným uzlem).

Globální individuální adresy

Jedná se o adresy, které jsou celosvětově jednoznačné. Zatím byly definovány pouze adresy s prefixem 001 (viz RFC 3587). Princip přidělování těchto adresy je podobný jako v případě IPv4, tj. že poskytovatel internetového spojení dostane přidělen určitý prefix, který dále rozděluje mezi své klienty.

Tyto adresy jsou ve tvaru:

	          .  3b .           45b             .    16b      .              64b                  .
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
	          | 001 | Globální směrovací prefix | id. podsítě |         id. rozhraní              |
	          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
			

IPv4 ve světě IPv6

IPv4-mapované adresy

Prvních 80b takovéto adresy je pouze skupina nul, následuje 16b jedniček a poté IPv4 adresa. Např. aisa.fi.muni.cz:

  1. aisa.fi.muni.cz (IPv4): 147.251.48.1 == 10010011.11111011.00110000.00000001
  2. aisa.fi.muni.cz (IPv6): 0000 ... 0000:1111 1111 1111 1111:1001 0011 1111 1011:0011 0000 0000 0001 = ::ffff:93fb:3001
  3. abychom se vyhli přepočítávní adres mezi jednotlivými systémy, je možné použít také zápis: ::ffff:147.251.48.1

projekt 6bone

Síť vzniklá roku 1996 pro potřeby testování IPv6. Jednalo se o virtuální síť, která propojovala (formou tunelů nad IPv4) jednotlivé dílčí IPv6 sítě různých organizací zapojených do projektu. Hlavním cílem bylo simulovat opravdovou IPv6 a získání praktických zkušeností. Adresy vyhrazené pro tuto síť měly prefix 3ffe::/16 a přidělování adres podléhalo přesným procedurám. Počátek konce tohoto projektu byl po roce 2000, kdy se začaly přidělovat adresy ve skutečné IPv6 síti a jednotlivé organizace začaly mít zájem participovat ve skutečném IPv6 namísto toho "virtuálního". Oficiální konec tohoto projektu je datován na 6.6.2006 a spolu s jeho koncem se vrátil i používaný prefix 3ffe::/16 do běžného používání.

Autokonfigurace

Hlavní myšlenka autokonfigurace spočívá v tom, aby si po připojení do sítě bylo schopné rozhraní samo odvodit vlastní adresu a další potřebné informace.

Nasloucháním na dané lince rozhraní získá adresu implicitního směrovače (brány), jeho životnost a adresu sítě. To vše díky tomu, že každý router v síti po náhodné době vysílá tzv. ohlášení směrovače (router advertisement). Vlastní adresu zjišťuje následovně: nejprve si vytvoří lokální linkovou adresu a zjišťuje, jestli ji již někdo nepoužívá (v případě, že ne, si ji přivlastní) a z dalšího ohlášení směrovače (případně se sám ozve tzv. výzvou směrovači (router solicitation)) vyčte jaký druh (stavová/bezstavová) konfigurace se v dané síti používá. Další dění na síti se odvíjí od typu autokonfigurace:

Konfigurace v Linuxu (Debian)

Pokud je IPv6 běžícím jádrem podporováno, měl by existovat soubor /proc/net/if_inet6. V případě problémů lze zkusit odstranit a přidat modul ipv6 (pokud má jádro IPv6 zkompilované jako modul) a podívat se do informačních výpisu jádra pomocí dmesg. Pro otestování, zdali je rozhraní do okolní sítě připojené prostřednictvím IPv6, lze použít stránku www.kame.net.

Příkazy pro administraci

Při konfiguraci se nejčastěji využívají následující příkazy:

Autokonfigurace pomocí radvd

radvd (Router Advertisement Daemon) je démon, který posílá do lokální sítě tzv. ohlášení směrovače (router advertisement).

Konfigurace může vypadat následovně:

	interface eth0 {
        AdvSendAdvert on;
       	prefix 5f15:9100:c2dd:1400:8000::0/80
		{
       		AdvOnLink on;
           	AdvAutonomous on;
        };
	};

-- převzato z: http://www.linuxhq.com/IPv6/radvd.html
		
Tato jednoduchá konfigurace říká, že se má posílat ohlášení směrovače na rozhraní eth0; prefix sítě je schodný s tím, co je za konf. parametrem prefix; prefix může být použitý pro automatickou konfiguraci (AdvAutonomous) a všechna rozhraní, která mají takovýto prefix jsou dosažitelná přes rozhraní, ze kterého přišlo ohlášení směrovače. Více na www.linuxhq.com/IPv6/radvd.html.

Tunelování nad IPv4

Je doporučováno pro vytváření tunelů používat příkaz ip, který má pro práci s tunely první argument: tunnel. Vytvoření tunelu spolu s nastavením směrování může vypadat např. takto:

/sbin/ip tunnel add sit1 mode sit ttl  remote  local 
/sbin/ip link set dev sit1 up
/sbin/ip -6 route add  dev sit1 metric 1

- převzato z http://tldp.org/HOWTO/Linux+IPv6-HOWTO/conf-ipv6-in-ipv4-point-to-point-tunnels.html
	

Rušit tunel lze naopak takto:

/sbin/ip -6 route del  dev sit1
/sbin/ip link set sit1 down
/sbin/ip tunnel del sit1

- převzato z http://tldp.org/HOWTO/Linux+IPv6-HOWTO/conf-ipv6-in-ipv4-point-to-point-tunnels.html
	

Literatura