""" (0 0) ---oOO---(_)--------- | IPv6 i Neostrada | | w Linuksie | --------------OOo---- |__|__| || || oOO OOo Poniższy artykuł ma na celu przedstawienie - krok po kroku - w jaki sposób zestawić i skonfigurować tunel IPv6 na dynamicznym adresie IPv4 na przykładzie usługi Neostrada TP. Czym w ogóle jest IPv6? Jest to protokół komunikacyjny, zwany też protokołem nowej generacji (IPng), który powstał w głównej mierze z powodu kończącej się ilości adresów IPv4. Protokół IPv6 jest protokołem 128-bitowym, co pozwala na zaadresowanie 2^128 = 3,4x10^38 węzłów, w przeciwieństwie do 32-bitowego IPv4, który może zaadresować "tylko" 2^32 = 4,3x10^9 węzłów. Co nam będzie potrzebne: 1. Tunel IPv6 2. Domena A (DDNS), informująca tunnel brokera, o adresie IPv4, który będzie obsługiwał adresy IPv6 3. Domena NS (lub AAAA), potrzebna do revDNS 4. Zainstalowany w systemie serwer DNS, np. BIND Zakładam, że system jest już odpowiednio przygotowany i odpowiednie opcje dotyczące obsługi IPv6 są wkompilowane w jądro. Zaczniemy od najprostszej rzeczy, czyli zdobycia domeny na nasz dynamiczny adres IP. Dwa najpopularniejsze serwisy świadczące tego typu usługi to No-IP.com (http://www.no-ip.com/) oraz DynDNS (http://www.dyndns.com/). Rejestrujemy się na przykład na pierwszym z nich, konfigurujemy wybraną domenę i ściągamy program, który co minutę będzie sprawdzał aktualność naszego adresu i w razie potrzeby wysyłał dane z nowym adresem IP. W artykule przyjmiemy, że została założona domena serwer.no-ip.org. Kolejnym krokiem jest domena typu NS (lub AAAA, jeśli znamy już zakres adresów przydzielony przez tunnel brokera, ale o tym później). Darmową domenę typu NS możemy założyć serwisie FreeDNS (http://freedns.afraid.org/). Oczywiście rejestrujemy się na stronie, następnie po zalogowaniu wybieramy z listy domen nazwę, która nas interesuje, niech będzie to mooo.com, wybieramy typ domeny: NS, wpisujemy nazwę subdomeny, np. serwer6, a w polu adresu podajemy nazwę wcześniej zarejestrowanej domeny DDNS, czyli w naszym przypadku serwer.no-ip.org. Tym oto sposobem staliśmy się posiadaczem subdomeny serwer6.mooo.com, która została wydelegowana na nasz serwer nazw. Jeśli chodzi o konfigurację BIND-a, będę opierał się na standardowej instalacji tego serwera w dystrybucji Slackware. Główny plik konfiguracyjny to /etc/named.conf, pliki stref znajdują się w katalogu /var/named. Na początek edytujemy plik konfiguracyjny, dopisując na jego końcu: zone "serwer6.mooo.com" IN { type master; file "serwer6.mooo.com"; allow-update { none; }; allow-transfer { none; }; notify yes; }; Następnie tworzymy plik /var/named/serwer6.mooo.com i uzupełniamy go: $TTL 120 $ORIGIN serwer6.mooo.com. @ IN SOA serwer6.mooo.com. hostmaster.serwer6.mooo.com. ( 2007092701 ; serial 3600 ; refresh 1800 ; retry 1209600 ; expire 86400 ) ; minimum @ IN NS serwer.no-ip.org. @ IN A 83.30.36.225 // twój aktualny adres IP To na razie wstępna konfiguracja, po zrestartowaniu BIND-a sprawdźmy polecenie: $ host -t A serwer6.mooo.com serwer6.mooo.com has address 83.30.36.225 Komunikat podobny do powyższego oznacza, że na razie wszystko działa. Czas na skonfigurowanie najważniejszego elementu, czyli tunelu IPv6. Jest kilku tunnel brokerów, którzy oferują darmowe tunele IPv6, najczęściej z prefiksami /48 lub /64, czyli odpowiednio 80- lub 64-bitową przestrzenią adresową dla użytkownika. Polecam założenie tunelu na stronie www.go6.net. Wystarczy wypełnić krótki formularz rejestracyjny i pobrać ze strony program Gateway6 Client. Ściągamy także program ipv6calc (ftp://ftp.bieringer.de/pub/linux/IPv6/ipv6calc/ipv6calc-0.71.0.tar.gz), który posłuży do obliczenia revDNS dla naszych adresów. Rozpakowujemy klienta Gateway6 i wchodzimy do katalogu tspc-advanced, w którym z poziomu roota wykonujemy polecenie: # make install target=linux installdir=/usr/local/gw6c Edytujemy plik /usr/local/gw6c/bin/gw6c.conf. Najistotniejsze wpisy to: userid=nazwa_uzytkownika # zarejestrowana nazwa użytkownika passwd=haslo # i hasło na www.go6.net server=broker.freenet6.net auth_method=any host_type=router prefixlen=48 if_prefix=ppp0 # interfejs WAN dns_server=serwer.no-ip.org log_console=3 # dzięki temu wpisowi uzyskamy # informację o otrzymanym prefiksie Resztę wpisów możemy pozostawić bez zmian. Uruchamiamy gw6c. Powinien pojawić się nowy interfejs sieciowy - sit1, a wśród logów, które pojawią się na ekranie powinna być linijka podobna do tej: 2001:05c1:8f6a:0000:0000:0000:0000:0000 To właśnie informacja o adresach, których właśnie staliśmy się posiadaczami. 2001:05c1:8f6a::/48 oznacza adresy z przedziału 2001:05c1:8f6a:0000:0000:0000:0000:0000 - 2001:05c1:8f6a:ffff:ffff:ffff:ffff:ffff, czyli ponad 1,2x10^24 adresów. Wystarczy na jakiś czas... Teraz musimy przypisać sobie kilka adresów do interfejsu sieciowego, aby były widoczne z zewnątrz. Najwygodniej jest to zrobić poleceniem ip z pakietu iproute2. # ip a a 2001:5c1:8f6a::1 dev sit1 # ip a a 2001:5c1:8f6a::2 dev sit1 # ip a a 2001:5c1:8f6a::3 dev sit1 Na razie wystarczy. Musimy teraz obliczyć nasz revDNS, który będzie potrzebny w dalszej konfiguracji BIND-a. Ściągniętego ipv6calc'a kompilujemy, nie ma potrzeby go instalować, można go uruchomić bezpośrednio z katalogu: $ ./ipv6calc -r 2001:5c1:8f6a::/48 No input type specified, try autodetection...found type: ipv6addr a.6.f.8.1.c.5.0.1.0.0.2.ip6.int. Uzyskaliśmy potrzebny nam adres, oczywiście można go było obliczyć ręcznie, ale łatwiej zrobić to programem. Dodam jeszcze, że od 1 czerwca 2006 nie ma już domeny ip6.int., zastąpiła ją ip6.arpa., więc poprawny adres to a.6.f.8.1.c.5.0.1.0.0.2.ip6.arpa. Wracamy do konfiguracji BIND-a. Ponownie edytujemy /etc/named.conf, dopisując konfigurację dla nowej strefy: zone "a.6.f.8.1.c.5.0.1.0.0.2.ip6.arpa" IN { type master; file "revdns.ipv6"; }; Edytujemy także /var/named/serwer6.mooo.com, dopisując do niego poniższe linijki. Najlepiej dopisać je przed wcześniej dopisanym rekordem A (lokalizacja rekordu A na końcu pliku znacznie ułatwi późniejsze jego edytowanie za pomocą skryptu aktualizującego adres IPv4). Oczywiście można zrezygnować z rekordu A, ja zamierzam jedynie zademonstrować w jaki sposób może to działać. @ IN AAAA 2001:5c1:8f6a::1 root IN AAAA 2001:5c1:8f6a::2 mail IN AAAA 2001:5c1:8f6a::3 Tworzymy nowy plik strefy /var/named/revdns.ipv6, a w nim: $TTL 120 $ORIGIN a.6.f.8.1.c.5.0.1.0.0.2.ip6.arpa. @ IN SOA serwer6.mooo.com. hostmaster.serwer6.mooo.com. ( 2007092701 ; serial 3600 ; refresh 1800 ; retry 1209600 ; expire 86400 ) ; minimum @ IN NS serwer.no-ip.org. 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR serwer6.mooo.com. 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR root.serwer6.mooo.com. 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR mail.serwer6.mooo.com. Restartujemy BIND-a. Możemy dodać oczywiście jeszcze inne wpisy, po dodaniu dodatkowych adresów do interfejsu, chociażby coś takiego: 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN A 83.30.36.225 W ten sposób uzyskujemy w pełni funkcjonalną domenę 4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.a.6.f.8.1.c.5.0.1.0.0.2.ip6.arpa. Jeśli na serwerze działa Apache to adres ten śmiało możemy wpisać do przeglądarki. Sprawdzamy oczywiście czy wszystko działa: $ host serwer6.mooo.com serwer6.mooo.com has address 83.30.36.225 serwer6.mooo.com has IPv6 address 2001:5c1:8f6a::1 $ host 2001:5c1:8f6a::1 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.a.6.f.8.1.c.5.0.1.0.0.2.ip6.arpa domain name pointer serwer6.mooo.com. Wpis podobny do powyższego oznacza, że wszystko jest w porządku. Podsumowując: stworzyliśmy trzy różne domeny, z których każda posiada własny adres IPv6 oraz revDNS. Podam jeszcze przykład bardzo prostego skryptu do aktualizacji adresu IPv4 w pliku strefy. Żeby skrypt działał właściwie wpis dotyczący rekordu A musi znajdować się na końcu pliku. #!/bin/sh MYIP=`/sbin/ifconfig ppp0 | grep "inet addr\:" | \ awk '{ print (substr($2,6)) }'` ZONE=/var/named/serwer6.mooo.com BACKUP=/var/named/serwer6.mooo.com.bak cat $ZONE > $BACKUP sed -e '$d' $BACKUP > $ZONE echo $'@\t\tIN\tA\t'$MYIP >> $ZONE killall -HUP named Do wyjaśnienia pozostała jeszcze kwestia, dlaczego zamiast domeny NS możemy użyć samego rekordu AAAA. Myślę, że teraz jest to oczywiste. Załóżmy, że mamy znajomego, który posiada domenę sklep.pl, w której wykorzystywany jest jedynie rekord A. AAAA jest nieużywany, więc możemy poprosić znajomego, żeby dopisał rekord AAAA wskazujący na nasz adres IPv6, np. 2001:5c1:8f6a::5. U siebie tworzymy odpowiedni wpis w pliku strefy revdns.ipv6 i w ten sposób mamy kolejną domenę dostępną razem z revDNS. Obecnie do najpopularniejszych zastosowań tuneli IPv6 należy dostęp do sieci IRC, a to dzięki możliwości praktycznie nieograniczonego tworzenia domen odwrotnych, popularnie zwanych vhostami. Ponadto dzięki tunelowi IPv6 istnieje możliwość postawienia tzw. sesji na IRC-u. Nawet po zresetowaniu się modemu Neostrady i zmiany adresu IPv4, tunel IPv6 po ponownym zestawieniu może pracować bez przerwy i utraty fizycznego połączenia. Zachęcam do eksperymentowania z IPv6. Przedstawione tutaj informacje to jedynie niewielka część ogromnych możliwości tego protokołu. -- 30.09.2007 Copyright 2007 Damian Pasternok http://www.pasternok.org/