"""
(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:
<prefix length="48">2001:05c1:8f6a:0000:0000:0000:0000:0000</prefix>
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/