Router IPv6 w Gentoo
1.
Przygotowania
Podstawowa konfiguracja jądra
Wszystkie wersje jądra z serii 2.6 dostępne w Gentoo wspierają połączenia IPv6.
Nowa poprawka USAGI IPv6 jest zintegrowana z jądrem Linuksa począwszy od wersji
2.6.0.
Listing 1.1: Instalowanie jądra |
# emerge gentoo-sources
|
Teraz jesteśmy gotowi, aby włączyć odpowiednie opcje w konfiguracji jądra.
Listing 1.2: Konfigurowanie jądra Linuksa |
# cd /usr/src/linux
# make menuconfig
|
Uwaga:
Zakładając, że dowiązanie symboliczne /usr/src/linux wskazuje na
źródła, z których będziemy korzystać).
|
Listing 1.3: Opcje 'make menuconfig' |
Device Drivers --->
Networking support --->
Networking options --->
<*> The IPv6 protocol (EXPERIMENTAL)
[*] Network device support
<*> Universal TUN/TAP device driver support
|
Testowanie wsparcia dla IPv6
Po ustawieniu rekomendowanych opcji, należy przekompilować jądro i uruchomić
ponownie system.
Jeżeli nie posiadamy jeszcze zainstalowanego iproute2 zalecamy zrobić to
teraz. Iproute2 jest najwygodniejszym konfiguratorem sieci opartej o ip.
Bardzo dobra alternatywa dla ifconfig, route, iptunnel i
innych...
Listing 1.4: Instalowanie iproute2 |
# emerge sys-apps/iproute2
|
Ostrzeżenie:
Używanie narzędzia ifconfig w przypadku, kiedy posiadamy tunel zbudowany z wielu
urządzeń może być bardzo niewygodne. Będziemy zmuszeni do usuwania tunelu w
odwrotnej kolejności. Znaczy to, że połączenia stworzone najpóźniej muszą zostać
usunięte w pierwszej kolejności. Należy zwrócić na to uwagę!
|
Jeżeli IPv6 działa poprawnie, to interfejs pętli zwrotnej (ang. loopback device)
powinien pokazać adres IPv6.
Listing 1.5: Sprawdzenie interfejsu urządzenia zapętlającego (ang. loopback device) |
# ip -6 addr show lo
1: lo: <LOOPBACK,UP> mtu 16436
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
|
Zanim przejdziemy dalej należy upewnić się, że dodaliśmy flagę ipv6 do
zmiennej USE w pliku make.conf. Dzięki temu, pakiety instalowane
później będą posiadały wsparcie dla IPv6.
2.
Konfigurowanie tunelu
Konfiguracja podstawowa
Większość dostawców internetu nie oferuje natywnych połączeń IPv6. Aby ominąć te
ograniczenie, można skorzystać z tzw. "pośredników tunelowych" oferujących
darmowe tunele IPv6. Dzięki temu możemy tunelować wszystkie swoje połączenia
IPv6 do sieci IPv4.
Poniżej przedstawiamy dwie przykładowe konfiguracje tuneli korzystających z
Hurricane Electric (analogiczne do Sixxs) oraz Freenet6.
Hurricane Electric
Hurricane Electric (zwane dalej HE) oferuje darmowe tunele IPv6 oraz przydziela
maskę /64 na nasze adresy. Umożliwia również konfigurację odwrotnego DNS.
Rejestracja tunelu HE jest bardzo prosta, wystarczy wypełnić formularz
znajdujący się pod tym adresem: http://www.tunnelbroker.net/.
Uwaga:
Rejestracja wymaga podania informacji takich jak: Twój adres i telefon.
|
Ostrzeżenie:
Aktywacja tunelu HE trwa 24 godziny.
|
Jeżeli tunel został zatwierdzony i przydzielono nam maskę /64, możemy przejść
do konfiguracji systemu. HE dostarcza wzór konfiguracji opartej o narzędzia
ifconfig i iproute. Następne dwa przykłady zakładają, że posiadamy właśnie taką
konfigurację:
| Lokalny adres IPv4 (eth0) |
68.36.91.195 |
| Adres IPv4 HE |
64.71.128.82 |
| Adres lokalnego tunelu IPv6 |
2001:470:1F00:FFFF::189 |
| Blok IPv6 |
2001:470:1F00:296::/64 |
Używając narzędzia iproute2 i komendy ip, wykonujemy poniższe polecenia:
Listing 2.1: Konfiguracja tunelu IPv6 |
# ip tunnel add sixbone mode sit remote 64.71.128.82 local 68.36.91.195 ttl 64 dev eth0
# ip link set sixbone mtu 1280
# ip link set sixbone up
# ip addr add 2001:470:1F00:FFFF::189 dev sixbone
# ip route add 2000::/3 dev sixbone
|
Freenet6
Freenet6 jest alternatywnym darmowym
pośrednikiem tuneli. Podczas opcjonalnego procesu rejestracji wymagane jest
jedynie podanie nazwy użytkownika oraz prawidłowego adresu e-mail.
Funkcjonowanie tunelu odbywa się na zasadzie klient/serwer. Klient nosi nazwę
freenet6 i jest dostępny w portage. Aby go zainstalować wystarczy wpisać:
Listing 2.2: Instalacja klienta Freenet6 |
# emerge freenet6
|
Pozostało nam tylko wyedytowanie pliku /etc/freenet6/gw6c.conf w
celu dokończenia instalacji. Jest to wymagane jedynie dla połączeń z
autoryzacją. Musimy zmienić pola userid i passwd na te, które
dostarczyło nam Freenet6. Poniżej przykładowy plik konfiguracyjny:
Listing 2.3: Przykładowy plik gw6c.conf |
auth_method=any
userid=anonymous
passwd=foobar
template=linux
server=broker.freenet6.net
|
Testowanie połączenia
Teraz tunel jest skonfigurowany i możemy go przetestować. Do tego celu zalecamy
użycie narzędzia ping6. Wystarczy spingować dowolny host z adresem IPv6.
Listing 2.4: Testowanie połączenia |
# emerge iputils
# ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms
--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms
|
Prowadzone są ciągłe prace nad udoskonaleniem wsparcie IPv6 dla sieciowych
skryptów init. By dowiedzieć się więcej o postępie prac lub udzielić cennych
wskazówek, należy wysłać e-maila pod adres: latexer@gentoo.org.
3.
Wsparcie IPv6 w aplikacjach
Ponowna instalacja pakietów
Jeżeli przed konfiguracją systemu flaga USE="ipv6" była wyłączona w
pliku /etc/make.conf, należy przeinstalować niektóre pakiety w
celu wkompilowania wsparcia dla IPv6. Aby zdobyć listę wszystkich
zainstalowanych pakietów, których działanie zależy od opcji ipv6 w
zmiennej USE, dodajemy do opcji emerge parametr --newuse
(-N):
Listing 3.1: Lista pakietów do przebudowania |
# emerge -uDNav world
|
Jeśli zmieniło się wiele flag, lista może być naprawdę długa. System powinien
być możliwie aktualny, dlatego warto przebudować wszystkie pakiety z listy w
tym momencie.
Uwaga:
Niektóre pakiety wykrywają wsparcie IPv6 automatycznie bez względu na flagę ipv6
w zmiennej USE. Tak więc nie wszystkie pakiety, które powinny posiadać wsparcie
dla IPv6 będą je miały, jeżeli w jądrze nie będzie wkompilowana obsługa IPv6.
|
Specyficzne pakiety wspierające IPv6
Istnieje parę pakietów, które zostały napisane pod kątem IPv6. Większość z nich
można znaleźć w katalogu /usr/portage/net-misc.
| Pakiet |
Opis |
| net-misc/ipv6calc |
Konwertuje adres IPv6 do formatu skompresowanego |
| net-misc/netcat6 |
Wersja netcat, która wspiera IPv4 i IPv6 |
| dev-perl/Socket6 |
Rozszerzenie IPv6 dla C socket.h.
|
4.
Konfigurowanie DNS
DNS i IPv6
DNS dla przechowywania adresów IPv4 używa rekordów A,a dla IPv6 AAAA. (Wynika to
z tego, że wielkość adresu IPv4 wynosi 2^32, a IPv6 2^128). Dla odwróconego
DNS (ang. reverse DNS) standard INT wypierany jest przez nowy ARPA, ale mimo to
ciągle jest szeroko wspierany. Ten rozdział jest pisany pod kątem ARPA.
Konfiguracja programu BIND
Nowe wersje narzędzia BIND posiadają doskonałe wsparcie dla IPv6. Ten rozdział
zakłada, że posiadamy minimalną wiedzę na temat jego konfiguracji i używania
programu BIND. Jeżeli uruchamiamy program BIND w środowisku chroot, musimy dodać
odpowiedni prefiks do większości ścieżek w tej części.
Na początek musimy dodać odpowiednie wpisy dla obu stref DNS (zwykłej i
odwrotnej (ang. forward and reverse) w pliku /etc/bind/named.conf.
Listing 4.1: Wpisy do named.conf |
options {
[...]
listen-on-v6 { any; }
[...]
};
zone "ipv6-rules.com" IN {
type master;
file "pri/ipv6-rules.com";
};
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa" {
type master;
file "pri/rev-ipv6-rules.com.arpa";
};
|
Teraz musimy stworzyć plik ze strefą i dodać odpowiednie wpisy dla wszystkich
naszych hostów:
Listing 4.2: pri/ipv6-rules.com |
$TTL 2h
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Numer seryjny
28800 ; Odświeżenie
14400 ; Ponowienie
3600000 ; Wygaśnięcie
86400 ) ; Minimum
NS ns1.ipv6-rules.com
IN AAAA 2001:470:1f00:296::1 ; adres dla ipv6-rules.com
host1 IN AAAA 2001:470:1f00:296::2 ; adres dla host1.ipv6-rules.com
host2 IN AAAA 2001:470:1f00:296::3:3 ; adres dla host2.ipv6-rules.com
|
Listing 4.3: pri/rev-ipv6-rules.com.arpa |
$TTL 3d ; Default TTL (Jest to wymagane przez Binda 8, a przez Binda 9 ignorowane)
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Number seryjny (YYYYMMdd)
24h ; Czas odświeżenia
30m ; Czas ponowienia
2d ; Ważność
3d ) ; Domyślne TTL
IN NS ns1.ipv6-rules.com.
;Wpis IPv6 PTR
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN PTR host2.ipv6-rules.com.
|
Konfiguracja DJBDNS
Pod adresem http://www.fefe.de/dns/ są
dostępne łatki do DJBDNS, które pozwalają na tworzenie domen IPv6. Podczas
instalowania DJBDNS z ustawioną flagą ipv6 w zmiennej USE, łaty zostaną
automatycznie zastosowane.
Ostrzeżenie:
Na chwilę obecną nie wszystkie typy rekordów są obsługiwane przez te łaty, jak
np. niektóre rekordy NS i MX.
|
Listing 4.4: Instalowanie djbdns |
# emerge djbdns
|
Po zakończeniu instalacji, djbdns może być skonfigurowane poprzez uruchomienie
tinydns-setup i odpowiedzenie na parę prostych pytań takich jak: gdzie
zainstalować tinydns itp.
Listing 4.5: Ustawianie tinydns |
# tinydns-setup
|
Przypuszczając, że zainstalowaliśmy tinydns w /var/tinydns,
możemy teraz wyedytować /var/tinydns/root/data. Plik ten będzie
zawierał wszystkie niezbędne informacje potrzebne do prawidłowego funkcjonowania
DNS IPv6.
Listing 4.6: Przykładowy plik data |
.ipv6-rules.com:192.168.0.1:a:259200
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.arpa:192.168.0.1:a
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
3www.ipv6-rules.com:200104701f0002960000000000000002:86400
|
Wiersze z prefiksem 6 stworzyłą oba rekordy AAAA i PTR. Te z prefiksem
3 stworzą tylko rekord AAAA. Jednak zamiast edytować plik
data ręcznie, możemy użyć gotowych skryptów add-host6 i
add-alias6 do tworzenia wpisów. Po dokonaniu zmian w pliku
data, wystarczy uruchomić make z
/var/tinydns/root. Stworzony zostanie plik
/var/tinydns/root/data.cfb, którego tinydns będzie używało jako
źródła informacji dla zapytań DNS.
5.
Router IPv6
Konfiguracja routingu
Poniższa konfiguracja jest wymagana w przypadku kiedy zamierzamy uruchomić
router korzystający z ipv6. Musimy włączyć forwardowanie pakietów IPv6. Można
zrobić to na dwa sposoby.
Listing 5.1: Włączenie forwardowania |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
lub
# sysctl -w net.ipv6.conf.all.forwarding=1
|
Ostrzeżenie:
Skrypt init dla radvd włącza (i wyłącza) forwardowanie, przez co następny krok
można pominąć.
|
Aby włączyć forwardowanie przy starcie systemu musimy zmodyfikować plik
/etc/sysctl.conf i dodać poniższy wiersz.
Listing 5.2: Edycja sysctl.conf |
net.ipv6.conf.default.forwarding=1
|
Teraz ruch pakietów powinien przebiegać przez tunel, który stworzyliśmy.
Specyfikacja IPv6 dopuszcza przypisywanie adresów IP na dwa sposoby: "stateful"
i "stateless". Przypisywanie typu "stateless" używa procesu zwanego "Router
Advertisement". Klient otrzymuje adres IP od razu po włączeniu interfejsu
sieciowego. Przypisanie takie nazywane jest "stateless", ponieważ nie tworzone
są rekordy, w których przechowuje się informacje o klientach i ich adresach IP.
Przypisanie typu "stateful" jest używane przez DHCPv6. Nazywa się "stateful",
gdyż pamiętane są informacje o poszczególnych klientach i ich adresach IP.
Konfiguracja typu Stateless
Konfiguracja tego typu jest stosowana przez Router Advertisement Daemon lub
radvd.
Listing 5.3: Konfigurowanie radvd |
# emerge radvd
|
Po zainstalowaniu radvd musimy stworzyć plik /etc/radvd/radvd.conf,
który będzie zawierał informacje dotyczące bloku IP, z którego przypisywane są
adresy IP. Poniżej przedstawiamy przykładowy plik radvd.conf z
prefiksem, który został nam przydzielony przez naszego pośrednika tunelowego.
Listing 5.4: Przykładowy plik radvd.conf |
interface eth1
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
Ostrzeżenie:
Upewniamy się, że interfejs w pierwszym wierszu (w tym przypadku eth1) jest
skierowany do sieci wewnętrznej a nie do dostawcy internetu!
|
Więcej informacji można znaleźć wywołując man radvd.conf. Możemy teraz
uruchomić radvd i ustawić automatyczne uruchamianie podczas startu systemu.
Listing 5.5: Uruchamianie radvd |
# /etc/init.d/radvd start
# rc-update add radvd default
|
Konfiguracja typu Stateful
Jeżeli chcemy używać konfiguracji tego typu, musimy zainstalować i skonfigurować
dhcpv6.
Listing 5.6: Instalowanie dhcpv6 |
# emerge dhcpv6
|
Następnie musimy skonfigurować DHCPv6, edytując /etc/dhcp6s.conf.
Listing 5.7: Przykładowy plik dhcp6s.conf |
prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
link AAA {
allow unicast;
send unicast;
allow rapid-commit;
send server-preference 5;
renew-time 1000;
rebind-time 2400;
prefer-life-time 2000;
valid-life-time 3000;
pool{
range 2001:470:1f00:296::10 to 2001:470:1f00:296::110/64;
prefix 2001:470:1f00:296::/64;
};
};
};
|
Możemy teraz uruchomić dhcp6s i ustawić automatyczne uruchamianie podczas startu
systemu.
Listing 5.8: Uruchamianie dhcp6s |
# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default
|
6.
Klienci IPv6
Korzystanie z radvd
Klienci podłączeni do tego typu routera powinni już uzyskać swoje adresy IPv6
(jeżeli tylko zgłosili żądanie) i mieć możliwość korzystania z sieci.
(Prawdopodobnie również posiadamy juz adres IPv6 dzięki skryptom init net.ethX)
Listing 6.1: Połączenie przez IPv6 |
# ip link set eth0 up
# ip addr show eth0
1: eth0: <BROADCAST,MULTICAST,UP> mtu 1400 qdisc pfifo_fast qlen 1000
link/ether 00:01:03:2f:27:89 brd ff:ff:ff:ff:ff:ff
inet6 2001:470:1f00:296:209:6bff:fe06:b7b4/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::209:6bff:fe06:b7b4/64 scope link
valid_lft forever preferred_lft forever
inet6 ff02::1/128 scope global
valid_lft forever preferred_lft forever
|
Korzystanie z DHCPv6
Jeżeli na routerze jest uruchomiony DHCPv6 każdy klient powinien mieć
zainstalowany pakiet dhcpv6. Poniżej przedstawiamy przykładowy plik
konfiguracyjny klienta /etc/dhcp6c.conf.
Listing 6.2: Przykładowy plik dhcp6c.conf |
interface eth0 {
send rapid-commit;
request domain-name-servers;
iaid 11111;
renew-time 11000;
};
|
7.
Używanie konwersji 6to4
Podstawowe zastosowanie
Konwersja 6to4 może być użyta w przypadku komunikacji z adresem IPv4 przez
połączenie IPv6. Tak więc w sieci opartej o IPv6 można również używać adresów
IPv4 do komunikacji z resztą Świata.
Konfiguracja DNS
Aby uruchomić konwersję 6to4 należy uruchomić proxy DNS, totd, tak aby
zamieniało adresy IPv4 na adresy IPv6. Ta konwersja będzie służyła jedynie do
komunikacji z konwerterem proxy 6to4.
Jeżeli totd jest zamaskowaskowane przez KEYWORD ~x86, należy
wpisać poniższą linijkę do pliku /etc/portage/package.keywords.
(Więcej informacji o tym pliku uzyskasz wpisując 'man portage') oraz Podręczniku
Gentoo.
Listing 7.1: Trwałe odmaskowanie totd w package.keywords |
net-misc/totd ~x86
|
Instalujemy totd:
Listing 7.2: Instalowanie totd |
# emerge totd
|
Następnie musimy ustawić parę podstawowych opcji w pliku
/etc/totd.conf.
Listing 7.3: Przykładowy plik /etc/totd.conf |
forwarder 192.168.0.2 port 53
prefix 3ffe:abcd:1234:9876::
port 5005
pidfile /var/run/totd.pid
stf
|
Uwaga:
Jeżeli port 53 jest już używany przez inny program należy zmienić port
przeznaczony dla totd.
|
Proxy 6to4
ptrtd będzie używane jako proxy 6to4, umożliwiając komunikacje pomiędzy
wewnętrznym hostem IPv6 a zewnętrznym IPv4.
Listing 7.4: Instalowanie ptrtd |
# emerge ptrtd
|
Teraz musimy ustawić w ptrtd, który prefiks (ten który ustawiliśmy w
totd) jest nieprawdziwy i służy do konwersji 6to4. Modyfikujemy
/etc/conf.d/ptrtd i ustawiamy IPV6_PREFIX. Musi być to ten
sam prefix, który ustawiliśmy w totd.
Listing 7.5: Przykładowy plik /etc/ptrtd.conf |
IPV6_PREFIX="3ffe:abcd:1234:9876::"
|
Możemy teraz uruchomić totd i ustawić automatyczne uruchamianie przy starcie
systemu.
Listing 7.6: Uruchamienie totd |
# /etc/init.d/totd start
# rc-update add totd default
|
Konfiguracja i testowanie klienta
Teraz klienci mogą korzystać z dwóch typów adresów IPv4 oraz IPv6 przez
połączenie IPv6. Zakładając, że uzyskali adresy IPv6 od radvd, musimy dodać
odpowiedni wpis do DNS i ustalić domyślny cel dla adresów z fałszywym prefixem
(tym z totd i ptrtd). W pliku /etc/resolv.conf należy dodać adres
komputera, na którym uruchomiony jest totd.
Listing 7.7: Przykładowy plik /etc/resolv.conf |
nameserver 2001:470:1f00:296::1
|
Aby przetestować działanie konwersji 6to4, sprawdzamy domenę, o której wiemy, że
adres jest IPv4.
Listing 7.8: Testowanie przykładowej domeny |
# dig aaaa google.com
;; ANSWER SECTION:
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3364
google.com. 300 IN AAAA 3ffe:abcd:1234:9876::d8ef:3564
|
Teraz ustawiamy domyślny kierunek dla wszystkich adresów z fałszywym prefiksem.
Listing 7.9: Dodanie domyślnego routera |
# ip route add 3ffe:abcd:1234:9876::/64 via 2001:470:1f00:296::1 dev eth0
|
Na koniec użyjemy narzędzia ping6, aby wypingować np. google.com i
zobaczyć czy wszystko działa prawidłowo.
Listing 7.10: Testowanie 6to4 |
# ping6 -c 2 google.com
PING 3ffe:abcd:1234:9876::d8ef:3364(3ffe:abcd:1234:9876::d8ef:3364) 56 data bytes
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=1 ttl=54 time=0.106 ms
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=2 ttl=54 time=0.090 ms
--- 3ffe:abcd:1234:9876::d8ef:3364 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.090/0.098/0.106/0.008 ms
|
Uwaga:
Aktualnie router z zainstalowanym ptrtd zwraca odpowiedź na nasz ping,
lecz to wystarczy aby stwierdzić, że wszystko działa poprawnie.
|
8.
Inne zasoby
Istnieje wiele doskonałych stron związanych z tematyką IPv6. Poniżej
prezentujemy niektóre z nich.
Zapraszamy również na kanał IRC #ipv6 w sieci Freenode. Sieć Freenode obsługuje również
klientów łączących się bezpośrednio przez IPv6 (irc.ipv6.freenode.net).
Materiał udostępniany na podstawie licencji Creative Commons -
Attribution / Share Alike.
|