IPv6

Tomáš Kotrla, xkotrla(at)fi.muni.cz


Obsah


IPv6

Potřebu protokolu IPv6 primárně vyvolal strach z nedostatku IPv4 adres. Čas ukázal, že adresy ještě nějakou tu dobu vydrží, takže bylo dost času na specifikaci protokolu. Při vývoji se kladl důraz na tři vlastnosti:


Adresy

Adresa v IPv6 je 128 bitová. Zapisuje se ve tvaru X:X:X:X:X:X:X:X, kde X je šestnáctkovým zápisem 16 bitů. Když se v adrese vyskytuje dlouhá posloupnost nul, může se nahradit ::, kvůli jednoznačnosti však pouze na jednom místě. Lze kombinovat zápis IPv6 a IPv4, výsledkem je adresa tvaru X:X:X:X:X:X:D.D.D.D, kde D.D.D.D je adresa v IPv4.

EUI-64 token formát adresy se používá při autokonfiguraci. Začátek adresy tvoří maska sítě (její adresu musí stanice znát), konec se pak vezme z MAC adresy tímto způsobem: doprostřed MAC adresy vložíme FFFE, negujeme 7. bit zleva. Tím dostaneme posledních 64 bitů adresy.

Adresy se dělí na:

Typy adres jsou:

DNS záznamy se zapisují stejně, používá se typ AAAA. Reverzní zóna v pseudodoméně ip6.arpa. a ip6.int..

erigona     AAAA        fec0:0:0:0:0:0:0:1
Pro 8.2.0.0.0.0.0.0.0.0.0.0.0.c.e.f.ip6.arpa
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0		PTR   speo-alpha.lab.fi.muni.cz.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0		PTR   speo-beta.lab.fi.muni.cz.

Neighbor discovery protokol

Jedná se o protokol k zjištění konfigurace sítě a dostupnosti sousedů.

Posílá se pět typů packetů:

RADVD (Router ADVertisement Daemon) je implementací uvedéného protokolu. Musí běžet na každém směrovači, přijímá od stanic RS a odpovídá jim svým RA. Konfiguračním souborem je /etc/radvd.conf

interface eth0 {
        AdvSendAdvert on;
        MinRtrAdvInterval 3;
        MaxRtrAdvInterval 10;
        prefix 3ffe:ffff:0100:f101::/64 {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr on;
        };
};

Konfigurace

Jádro linuxu musí být kompilováno s podporou IPv6. Poznáme to z existence souboru /proc/net/if_inet6.

Přidělené adresy:
# /sbin/ip -6 addr show dev eth0
nebo
# /sbin/ifconfig eth0 |grep "inet6 addr:"

Přidávání IPv6 adresy:
# /sbin/ip -6 addr add fec0:0:0:28::1/64 dev eth0
nebo
# /sbin/ifconfig eth0 inet6 add fec0:0:0:28::1/64

Mazání IPv6 adresy:
# /sbin/ip -6 addr del fec0:0:0:28::1/64 dev eth0
nebo
# /sbin/ifconfig eth0 inet6 del fec0:0:0:28::1/64

Zobrazení IPv6 sousedů:
# ip -6 neigh show dev eth0

Přidání souseda:
# ip -6 neigh add fec0::1 lladdr 02:01:02:03:04:05 dev eth0

Vymazání souseda:
# ip -6 neigh del fec0::1 lladdr 02:01:02:03:04:05 dev eth0


Tunely a 6bone

6bone je virtuální síť nad IPv6. Vznikla v roce 1996 pro potřeby testování ve větší síti. Na začátku spojovala jen tří body, G6 ve Francii, UNI-C v Dánsku a WIDE v Japonsku. Postupně se rozrůstá, jak přibývají lokální sítě nad IPv6. Mezi sebou jsou propojeny klasickým IPv4, říká se tomu tunelovaní nad IPv4. V součastnosti je v síti 6bone 60 států. Další informace lze nalézt na
6bone Home Page.
Výpis tunelů:
# /sbin/ip -6 tunnel show
nebo
# /sbin/route -A inet6 | grep "\Wsit0\W*$

Kompatibilní aplikace

Pro psaní kompatibilních aplikací musíme správně použít funkci

int getaddrinfo(const char *node, const char *service,
                       const struct addrinfo *hints,
                       struct addrinfo **res);

struct addrinfo {
           int     ai_flags;
           int     ai_family;
           int     ai_socktype;
           int     ai_protocol;
           size_t  ai_addrlen;
           struct sockaddr *ai_addr;
           char   *ai_canonname;
           struct addrinfo *ai_next;
       };
a ai_family nastavit na nespecifikovanou hodnotu (PF_UNSPEC).


Odkazy