IPv6
Wstęp
Aktualnie jednym z istotnych problemów Internetu jest brak wolnych adresów
IP. Problem ten jest częściowo rozwiązywany poprzez stosowanie translacji
adresów (NAT). Globalnym rozwiązaniem tego problemu jest aktualnie rozwijana
nowa wersja protokołu internetowego - IPv6 (znanego również z jako IPng - IP
Next Generation). IPv6 poza rozwiązaniem problemu braku adresów wprowadza
wiele udogodnień i ulepszeń. Na dzień dzisiejszy dostępnych jest kilkanaście implementacji
IPv6 (są to implementacje m.in. dla Linuxa, *BSD/KAME, Solarisa
oraz Windows 9x/NT).
Porównanie IPv6 kontra IPv4
Adresy IPv6 składają się z 128 bitów (dla porównana adresy IPv4 składają
się e tylko z 32 bitów). Łatwo jest sprawdzić, że liczba wszystkich adresów IPv6
to liczba 39 cyfrowa (dla IPv4 tylko 10 cyfrowa)! Przykładowy adres IPv6 wygląda
tak: 3ffe:902:12::/48 (adres sieci). Domyślnie nie podane bity są równe „0”
(np. „::” == „:0000:”). Nasz przykładowy adres podany z wykorzystaniem wszystkich
bitów wyglądał będzie tak: 3ffe:0902:0012:0000:0000:0000:0000:0000/48. „/48”
To długość prefiksu 1 w bitach. Taka notacja zgodna jest ze specyfikacją CIDR i dotyczy
również z IPv4 (RFC1518 [1], RFC1519 [2], RFC1812 [3]).
W adresach IPv6 zasięg (scope) adresu definiowany jest przez początkowe bity adresu
i np. adresy rozpoczynające się od fe80: to adresy „link-local” - zasięg „local”.
Poza zasięgiem local istnieją także: host, site, global.
Tutaj warto jedynie wspomnieć, [1], 0000:0000 że adresy z zasięgiem local są widoczne
wyłącznie w obrębie sieci, do których podpięliśmy naszego Linuxa oraz do serwerów z
którymi nasz Linux ma połączenie (czy to bezpośrednie czy przy pomocy tunelu).
Istotną zaletą IPv6 jest autokonfiguracja (RFC2462 [11]). Osty IPv6 wykorzystują
między innymi protokół Neighbor Discovery (ND) pozwalający im znaleźć sąsiadujące
routery i inne hosty. Dzięki ND serwery mogą śledzić, które routery lub serwery są aktywne
i osiągalne, a następnie modyfikować swe tablice routingu itp. Ponadto serwery
IPv6 próbują same skonfigurować swe interfejsy.
Istnieją dwie metody takiej konfiguracji:
-stateless - nie wymaga żadnego konfigurowania hosta i wymaga minimalnej konfiguracji
e routerów. Metoda ta pozwala hostom na wygenerowanie własnego adresu
na podstawie lokalnie dostępnych informacji i informacji rozgłaszanych przez routery. Routery w tym przypadku rozgłaszają tylko prefiks sieci. Otrzymany od
routera prefiks jest następnie uwzględniany podczas generowania adresów lokalnych
interfejsów. Jeśli router z jakiegoś powodu nie rozgłasza odpowiednich informacji,
host moÿ ze wygenerować automatycznie tylko adresy link-local co pozwala
na ograniczoną komunikację wyznaczoną zasięgiem (scope) local.
-stateful - hosty uzyskują wszelkie potrzebne informacje z serwera, który zawiera
odpowiednią bazę danych. Metoda ta wykorzystuje DHCPv6.
Warto zaznaczyć, że hosty mogą wykorzystywać równocześnie obie metody do autokonfiguracji.
Mechanizm obsługi IPv6 pozwala także na tworzenie dynamicznych tuneli dla
pakietów IPv6 w istniejącej infrastrukturze IPv4 pod warunkiem, że adres źródłowy i do-celowy
pakietu to adres kompatybilny z IPv4. Wyróżniamy dwa rodzaje adresów IPv6
kompatybilnych z adresami IPv4:
-standardowe - adresy tego typu mają następujący format:
80 bitów 16 bitów 32 bity
0000..............................0000 0000 adres IPv4
-tylko IPv4 (opisujące hosty które nie wspierają IPv6) 3
80 bitów 16 bitów 32 bity
0000..............................0000 FFFF adres IPv4
Szczegóły opisane zostały w RFC1884 [4].
Do pozostałych zalet IPv6 należy zaliczyć także zmianę formatu nagłówka pakietów
na nowy, pozwalający bez większych problemów dodawać w przyszłości nowe opcje bez
poważnych zmian w samym nagłówku. IPv6 umożliwia także na wysyłanie datagramów
zwanych jumbogramami o wielkości większej niż 65535 bajtów.
By móc wykorzystać IPv6 w obrębie dzisiejszego Internetu wykorzystującego nadal
protokół IPv4 stosuje się SIT (Simple Internet Transition) do tunelowania pakietów IPv6
wewnątrz pakietów IPv4.
Istnieje ogólnoświatowa, wirtualna sieć bazująca na protokole IPv6. Jest to sieć 6BONE.
Wirtualna dlatego, że bazuje nie na własnych, oddzielnych łączach ale wykorzystuje istniejące łącza Internetu. Niemalże wszystkie połączenia pomiędzy węzłami sieci to tunele SIT o których była mowa.
Struktura sieci składa się z głównych węzłów - pTLA (pseudo Top Level Aggregator),
węzłów podrzędnych - pNLA (pseudo Next Level Aggregator) oraz podpiętych do nich
pozostałych hostów (leaf sites). W Polsce jedynym na dzień dzisiejszy pTLA jest ICM
(Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego w Warszawie),
Czego potrzeba do używania IPv6?
Przede wszystkim potrzebujemy jądra Linuxa najlepiej w najnowszej wersji stabilnej
z serii 2.2 lub 2.3. Jądro należy
skompilować z aktywnymi następującymi opcjami:
[*] Prompt for development and/or incomplete code/drivers
[*] Kernel/User netlink socket
[*] IPv6: enable EUI-64 token format
[*] IPv6: disable provider based addresse
Oczywiście powyższe opcje można zarówno wkompilować w jądro jak i pozostawić
w postaci ładowalnych modułów.
Kolejną rzeczą, potrzebną do kompilacji programów wykorzystujących IPv6 jest biblioteka
z nowymi funkcjami opisanymi m.in. w RFC2553[12]. Właściciele glibc 2.1.1
(i nowszych) nie będą mieli żadnych problemów, gdyż ich biblioteka zawiera wszystkie
potrzebne funkcje. Posiadacze biblioteki libc5 mogą skorzystać z „protezy” jaką jest
biblioteka libinet6 zawarta w pakiecie inet6-apps.
Do konfiguracji IPv6 możemy wykorzystać jednen z dwóch pakietów oprogramowania
- net-tools
- iproute2
.
Kompilacja iproute2 w środowisku wykorzystującym bibliotekę glibc przebiega stosunkowo
bezboleśnie. W wyniku kompilacji otrzymujemy dwa programy - „ip” oraz „tc”.
Pierwszy służy do konfiguracji sieci IPv4/IPv6, natomiast drugim możemy kontrolować
algorytmy kolejkowania pakietów (w tym także IPv6), ale to już temat na inną pracę.
Warto wspomnieć!
Podobnie jak w IPv4 interfejsy sieciowe (np. eth0) mogą mieć przypisanych wiele
adresów IPv6. Przeglądając adresy na interfejsie ethernetowym (ip addr show eth0) zauważymy zapewne adres, o którym była już mowa - link-local. Adresy te dla interfejsów
ethernet generowane są automatycznie na podstawie identyfikatora interfejsu np. adresu
MAC karty sieciowej. Narzędzie „iproute2” w przeciwieństwie do „ifconfig” pozwala na
oglądanie wszystkich adresów na danym interfejsie. Jedną z interesujących możliwości
jest dodawanie kilku adresów IPv4/IPv6 do jednego interfejsu bez stosowania aliasów
(oczywiście iproute2 pozwala na stosowanie aliasów jednak w rzeczywistości rzadko się
tą opcję stosuje).