IP verze 6 je protokol síťové vrstvy podle ISO/OSI, která má za úkol adresování a směrování v síti. IPv6 vznikl jako následník verze 4, důvodem k tomu byla snaha předejít vyčerpání adresního prostoru a začlenit do protokolu podporu nových služeb. IPv6 přináší větší adresový prostor, možnost autokonfigurace, více adres na jednom rozhraní, bezpečnostní mechanismy síťové komunikace a podporu mobility.
Předpovědi vyčerpání IPv4 adres se objevily již v roce 1990, odhadovaný termín vyčerpání adres se od té doby několikrát odložil (například díky zavedení CIDR). Návrhy na vznik nového protokolu se datují rokem 1993, první specifikace byla uveřejněna v roce 1995 (RFC 1883). Následoval provoz experimentálních sítí (6bone). Od roku 2000 můžeme mluvit o podpoře IPv6 v produkčním prostředí.
Linux získal podporu IPv6 v jádře vývojové verze 2.1.8 v roce 1996, od roku 2000 podporují IPv6 BSD systémy (projekt KAME) a Sun Solaris.
Adresy v IPv6 mají velikost 128b a zapisují se jako 8 čtveřic hexadecimálních čísel oddělených dvojtečkou. Je možné vynechat nuly zleva či čtveřici nul zkrátit na jednu. Navazující čtveřice nul je možné zkrátit na ::, ale vždy nejvýše jednou v jedné adrese. Příkladem zápisu IPv6 adresy je adresa fc00:0:0:0:0:0:90:0, kterou můžeme zkráceně zapsat jako fc00::90:0.
V URL se IPv6 adresa uvádí v hranatých závorkách, aby bylo možné rozlišit adresu a port, např. https://[fc00:0:0:0:0:0:1234:1234]:443/.
Síťové prefixy se uvádí ve stejné notaci jako CIDR, tedy např. fe80::/10. IPv6 nezná síťové třídy jako IPv4.
IP adresu je možné přidělit na základě fyzické adresy rozhraní. V ethernetu se použije MAC adresa, do které se vkládá fffe za identifikátor společnosti Sedmý nejvyšší bit pak udává, zda je adresa lokální či globální.
Protože je možné MAC adresu změnit (viz man ifconfig), definuje RFC 4941 způsob náhodného generování identifikátorů rozhraní platných jen po omezenou dobu.
V IPv6 máme několik možností doručování paketů:
Přehled vybraných adres a adresových rozsahů:
Lokální linkové adresy jsou přístupné pouze v místní síti (lince), využívají identifikátor rozhraní podle EUI-64 a jsou přístupné vždy. Unikátní lokální adresy mají podobný význam jako lokální linkové adreyy - určují rozhraní v rámci sítě dané organizace, která může rozdělena na několik podsítí. Globální individuální adresy, celosvětově jedinečné tvoří zbytek adresního prostoru a jsou přidělovány podobně jako v IPv4 (poskytovatel dostane přidělen prefix, který dále rozděluje mezi své klienty).
V linuxu nastavíme IPv6 adresu nástrojem ip z balíku iproute.
Přidání adresy:
ip -6 addr add 2001:db8::10/64 dev eth0
Nastavení výchozí brány:
ip -6 route add default via 2001:db8::1/64
IPv6 nabízí možnost autokonfigurace, to znamená, že zařízení jsou schopná odvodit svou vlastní adresu. Routery posílají v síti tzv. ohlášení směrovače, tím každé zařízení na lince získá informace o své výchozí bráně. Autokonfigurace se dělí na stavovou a bezstavovou. Stavová je podobná DHCP a definuje ji protokol DHCPv6. V bezstavové autokonfiguraci si zařízení vytvoří svou adresu kombinací prefixu (zná od routeru) a svého lokálního identifikátoru.
Autokonfiguraci IPv6 zajišťuje radvd (Router Advertisement Daemon). Démon posílá do sítě tzv. ohlášení směrovače. Konfiguraci provedeme úpravou souboru /etc/radvd.conf, k odchytávání výzev směrovače můžeme použít program radvdump.
Ukázka nastavení:
interface eth0 { AdvSendAdvert on; prefix 2001:db8:0:1::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; };
IPv6 adresy se v DNS v dopředných zónách uvádí v záznamech AAAA. Reverzní vyhledávání probíhá pod ip6.arpa, v záznamu je obráceno pořadí šestnáctkových číslic celé adresy a každé z nich reprezentuje subdoménu.
Schéma DNS záznamů definuje RFC 3596
Nastavení tunelu je možné více způsoby. První příklad ukazuje použití ifconfig:
ifconfig sit0 up ifconfig sit0 inet6 tunnel ::216.66.80.30 ifconfig sit1 up ifconfig sit1 inet6 add 2001:470:1f0a:155c::2/64 route -A inet6 add ::/0 dev sit1
(Převzato z http://www.root.cz/clanky/navod-jak-jednoduse-a-rychle-na-ipv6/)
Druhý příklad ukazuje nastavení pomocí příkazu ip. Zde je nutné nastavit TTL (defaultně 0).
ip tunnel add sit1 mode sit ttl <ttldefault> remote <ipv4addressofforeigntunnel1> local <ipv4addresslocal> ip link set dev sit1 up ip -6 route add <prefixtoroute1> dev sit1 metric 1
(Převzato z http://tldp.org/HOWTO/Linux+IPv6-HOWTO/conf-ipv6-in-ipv4-point-to-point-tunnels.html)
Při vývoji aplikací pracujících s IPv6 se hodí funkce getaddrinfo.