Obecnie jednym z poważniejszych problemów sieci Internet są coraz szybciej kurczące się zasoby wolnych adresów IP. Problem ten częściowo jest rozwiązywany przez stosowanie translacji adresów (ang. NAT). Globalne rozwiązanie tego problemu stanowi wciąż rozwijana następna wersja protokołu IP czyli IPv6 (występująca również pod nazwą IP Next Generation). IPv6 oprócz rozwiązywanie problemu wyczerpania adresów dokonuje wielu ulepszeń i udogodnień. Obecnie dostępnych jest kilkanaście implementacji protokołu IPv6 (m.in. dla Linuxa, Solarisa oraz systemów Windows 9x/NT).

IPv6 kontra IPv4

Adresy IPv6 złożone są z 128 bitów (w odróżnieniu od adresów IPv4 składających się z 32 bitów). Oznacza to, że liczba wszystkich adresów typu IPv6 jest liczbą składającą się z 39 cyfr, podczas gdy ilość adresów IPv4 jest tylko liczbą 10 cyfrową. Przykładowy adres typu IPv6 może wyglądać następująco: 3fde:602:13::/48. Domyślnie nie podaje się bitów zerowych (zapis "::" jest równy ":0000:"). Podany wyżej adres zaprezentowany z użyciem wszystkich bitów będzie wyglądał tak: 3fde:0602:0013:0000:0000:0000:0000:0000/48. Końcówka "/48" jest długością prefiksu 1 w bitach. Notacja taka jest zgodna ze specyfikacją CIDR i również dotyczy IPv4. W przypadku adresów IPv6 zasięg (ang. scope) adresu określają początkowe bity w adresie, więc adresy, które rozpoczynają się od ciągu fe80: to adresy typu "link-local" o zasięgu lokalnym (ang. local). Oprócz zasięgu local istnieją również: global, site oraz host. Warto nadmienić, że adresy o zasięgu lokalnym widoczne są jedynie w obrębie sieci, do której podpięta jest dana maszyna. Ważną zaletą protokołu IPv6 jest jego autokonfiguracja. Komputery pracujące z wykorzystaniem protokołu IPv6 stosują protokół ND (ang. Neighbor Discovery), który pozwala odnaleźć im sąsiadujące routery oraz inne komputery. ND umożliwia serwerom śledzenie aktywnych i osiągalnych routerów i serwerów i na tej podstawie modyfikowanie swych tablic routingu. Dodatkowo serwery IPv6 same próbują konfigurować swoje interfejsy. Używane są dwie metody takiej konfiguracji:

  • metoda stateless - nie jest tu wymagane żadne konfigurowanie maszyny, wymagana jest jedynie minimalna konfiguracja routerów. Ten sposób umożliwia komputerom generować własne adresy na podstawie informacji dostępnych lokalnie oraz rozgłaszanych przez routery. W tym przypadku routery rozgłaszają tylko prefiks sieci. Prefiks otrzymany z routera uwzględniany jest następnie przy generowaniu adresów lokalnych interfejsów. Jeżeli router z jakiejś przyczyny nie rozgłasza właściwych informacji, komputer jest w stanie wygenerować w sposób automatyczny tylko adresy typu link-local, co umożliwia ograniczoną komunikację, którą wyznacza zasięg typu local
  • metoda stateful - wszelkie niezbędne informacje, komputery uzyskują z serwera zawierającego właściwą bazę danych. W metodzie tej wykorzystywany jest protokół DHCPv6.

Komputery mogą równocześnie korzystać z obu dostępnych metod autokonfiguracji.

IPv6 pozwala również na budowanie dynamicznych tuneli przeznaczonych dla pakietów typu IPv6 w istniejącej już infrastrukturze IPv4. Warunkiem takiej operacji jest to, że adres źródłowy oraz docelowy pakietu muszą być kompatybilne z IPv4.

Kolejną zaletą IPv6 jest zmiana formatu nagłówka pakietów na nowy, umożliwiający bez problemów dokładać w przyszłości nowe elementy, bez powodowania znaczących zmian w nagłówku. Protokół IPv6 pozwala również wysyłać datagramy zwane jumbogramami przekraczające wielkość 65535 bajtów. Aby móc korzystać z IPv6 w Internecie, gdzie nadal wykorzystuje się protokół IPv4 używa się techniki SIT (ang. Simple Internet Transition), która służy do tunelowania pakietów typu IPv6 we wnętrzu pakietów IPv4.

Istnieje ogólnoświatowa, sieć wirtualna, która bazuje na protokole IPv6. Tą siecią jest 6BONE. Sieć ta jest wirtualna, ponieważ nie posiada własnych, oddzielnych łącz, lecz bazuje na istniejących łączach internetowych. Praktycznie wszystkie połączenia występujące między węzłami to wspomniane tunele SIT.

Na strukturę sieci składają się:

  • węzły główne - pTLA (ang. pseudo Top Level Aggregator)
  • węzły podrzędne - pNLA (ang. pseudo Next Level Aggregator)
  • pozostałe hosty (ang. leaf sites).

Przykładem sieci pTLA w Polsce jest ICM (Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego w Warszawie).

Do używania protokołu IPv6 w systemie Linux potrzebne jest przede wszystkim jądro w stabilnej wersji z serii 2.2 bądź 2.3. Jądro musi być skompilowane z zaznaczonymi następującymi opcjami:

  • [*] Prompt for development and/or incomplete code/drivers
  • [*] Kernel/User netlink socket
  • [M] IP: tunneling
  • [M] The IPv6 protocol (EXPERIMENTAL)
  • [*] IPv6: enable EUI-64 token format
  • [*] IPv6: disable provider based address

Powyższe opcje mogą zostać zarówno wkompilowane w jądro lub ładowane w postaci modułów. Następną rzeczą, niezbędną do kompilacji oprogramowania wykorzystującego IPv6 jest biblioteka posiadająca nowe funkcje opisane w dokumencie RFC2553[12]. Posiadacze biblioteki glibc w wersji 2.1.1 oraz nowszej nie powinni mieć żadnych problemów, ponieważ biblioteka ta zawiera wszelkie niezbędne funkcje. Użytkownicy biblioteki libc5 mają możliwość skorzystania z nakładki jaką stanowi biblioteka libinet6 z pakietu inet6-apps.

Do skonfigurowania IPv6 można wykorzystać jeden z dwóch dostępnych pakietów oprogramowania: net-tools oraz iproute2.

Kompilacja pakietu iproute2 w systemie, który wykorzystuje bibliotekę glibc przebiega przez większych problemów. Jako wynik przeprowadzonej kompilacji otrzymamy dwa programy: "ip" oraz "tc". Narzędzie "ip" wykorzystywane jest do konfigurowania sieci IPv4/IPv6, "tc" natomiast pozwala na kontrolę algorytmów kolejkujących pakiety (również IPv6).

Podobnie jak ma to miejsce w przypadku IPv4 do interfejsów sieciowych (np. eth1) może być przypisanych kilka adresów IPv6. Podczas przeglądania adresów na interfejsie ethernetowym (ip addr show eth0) można zauważyć adresy typu link-local. Dla interfejsów ethernetowych adresy te generowane są w sposób automatyczny w oparciu o identyfikator interfejsu (np. numeru MAC karty sieciowej). Program "iproute2" w odróżnieniu od "ifconfig" pozwala oglądać wszystkie adresy na określonym interfejsie. Dość ciekawą możliwością jest dodawanie wielu adresów IPv4/IPv6 do pojedynczego interfejsu bez używania aliasów.