[Company Logo Image]  

Home ] Up ] News ] Szukaj ] Index ] NetMapa ] Ankieta ] Sprawy GroszNetu ] Forum ] FAQ ] Download ]

IPv6 i Linux

 

 

Home
Up

Email

IPv6 i Linux

Strona zosta│a ostatnio znacznie uaktualniona, w szczeg≤lno£ci je£li chodzi o spos≤b konfiguracji tuneli za pomoc╣ iproute. W nied│ugim czasie mam tak┐e nadziejΩ opisaµ konfiguracjΩ BGP4+. Nale┐y podkre£liµ, ┐e nie jest to HOWTO dla ka┐dego - trochΩ wiadomo£ci trzeba ju┐ mieµ. Je£li nie wiesz nic o IPv6, to zajrzyj najpierw na stronΩ Petera Bieringera.

Spis tre£ci

Kernel

Obs│uga IPv6 jest dostΩpna w Linuxach nowszych ni┐ 2.1.8. W moim przypadku u┐ywam IPv6 od wersji 2.1.87, po obecne 2.1.128.

Podczas konfiguracji kernela nale┐y w│╣czyµ nastΩpuj╣ce opcje:

Sekcja Opcja Ustawienie
Code maturity level options Prompt for development and/or incomplete code/drivers Yes
Networking options IP: tunneling Yes
Networking options The IPv6 protocol (EXPERIMENTAL) Yes
Networking options IPv6: enable EUI-64 token format Yes
Networking options IPv6: disable provided based addresses Yes

Wszystkie opcje wkompilowa│em do kernela na sta│e. Niekt≤re z nich nie chcia│y dzia│aµ jako modu│y, w szczeg≤lno£ci tunneling.

Oprogramowanie

W tej sekcji zasz│y najbardziej znacz╣ce zmiany od poprzedniej wersji tego tekstu, gdzie opiera│em siΩ g│ownie na net-tools. Obecnie wsp≤lnymi si│ami polskiego 6bone uda│o sie opracowaµ now╣ technikΩ stawiania tuneli IPv6, IMHO znacznie lepsz╣ od poprzedniej. Przypomnijmy, ┐e stara metoda polega│a na konfigurowaniu tuneli za pomoc╣ "ifconfig sit0 tunnel aaa.bbb.ccc.ddd" i wymaga│a jedynie zainstalowani w miarΩ nowego pakietu net-tools.

W nowej metodzie wszystkie operacje na tunelach i tablicy routingu wykonujemy za pomoc╣ programu iproute Aleksieja N. Kuƒniecowa (ANK). Podsumowuj╣c, nale┐y zainstalowaµ:

 

Instalowanie glibc-2.1 (obecnie w wersjach pre - 2.0.103 itp) nie jest chyba konieczne. Co wiΩcej inet6-apps w wersjach wcze£niejszych ni┐ 0.34 nie kompiluje siΩ pod glibc bez poprawek, a iproute wymaga patcha by skompilowaµ siΩ pod glibc. Niemniej wiΩkszo£c polskich Linux≤w z IPv6 chodzi pod glibc-2.0.xx.

Je£li chodzi o RedHata, to dziΩki ekipie PLD wszystkie w/w pakiety w│╣cznie z glibc s╣ dostΩpne jako RPMy. Mo┐na je znaleƒµ pod adresem ftp://magellan.shadow.eu.org/pub/PLD-devel/ lub na mirrorach.

 

net-tools

Pakiet net-tools zawiera programy ifconfig, route itp. uzupe│nione o obs│ugΩ IPv6 oraz tuneli. Najnowsz╣ wersjΩ mo┐na £ci╣gn╣µ z ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/. Je£li kompilujesz net-tools ze ƒr≤de│, to w│╣cz nastΩpuj╣ce opcje dotycz╣ce IPv6:

 

INET6 (IPv6) protocol family (HAVE_AFINET6) [y]
IPIP Tunnel support (HAVE_HWTUNNEL) [y]
SIT (IPv6-in-IPv4) support (HAVE_HWSIT) [y]

inet6-apps

Pakiet inet6-apps zawiera bibliotekΩ wykorzystywan╣ przez inne programy IPv6 oraz podstawowe narzΩdzia, klienty i demony IPv6: ping, traceroute, inetd itp. Najnowsz╣ wersjΩ mo┐na £ci╣gn╣µ z ftp://ftp.inner.net/pub/ipv6/,

Je£li kompilujesz inet6-apps ze ƒr≤de│, w pliku GNUmakefile.config ustaw nastΩpuj╣ce opcje:

 

OS=Linux
HAVE_POSIX1G_TYPES=0
LIBCAPI=1
INET6=1
LOCAL=1
NETSEC=0
NETSEC_EMULATE=0
RESOLVER=1
LIBRESOLV=-lresolv
LIBCRYPT=-lcrypt
HOSTTABLE=1
OFFSETPORT=0
FASTCTO=10
DESTDIR=/usr/inet6
DEBUG=0

Przygotowanie systemu pod IPv6

 

/etc/hosts

Do pliku /etc/hosts nale┐y dodaµ:

 

::1             ipv6-localhost ipv6-loopback
fe00::0         ipv6-localnet
ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts

/etc/protocols

Do pliku /etc/protocols nale┐y dodaµ:

 

ipv6    	41      IPv6            # Internet Protocol, version 6
icmpv6  	58      ICMPV6          # Internet Control Message Protocol version 6
ipv6-route      43      IPv6-Route      # Routing Header for IPv6
ipv6-frag       44      IPv6-Frag       # Fragment Header for IPv6
ipv6-crypt      50      IPv6-Crypt      # Encryption Header for IPv6
ipv6-auth       51      IPv6-Auth       # Authentication Header for IPv6
ipv6-nonxt      59      IPv6-NoNxt      # No Next Header for IPv6
ipv6-opts       60      IPv6-Opts       # Destination Options for IPv6

Konfiguracja interfejs≤w

Przed zrobieniem czegokolwiek z tej sekcji nale┐y skontaktowaµ siΩ z Rafa│em Maszkowskim <rzm@icm.edu.pl> i poprosiµ go o przydzielenie odpowiedniej puli adres≤w IPv6 oraz postawienie tunelu. Tunel mo┐na postawiµ r≤wnie┐ do kogokolwiek innego podpiΩtego do 6BONE, wystarczy napisaµ na listΩ 6bone-pl.

Maj╣c ju┐ pulΩ adres≤w mo┐na ostatecznie przyst╣piµ do konfigurowania tunelu. Poni┐szy plik rezyduje u mnie jako /etc/rc.d/init.d/inet6 i jest podlinkowany do katalogu /etc/rc.d/rc3.d/. Nie jest to w pe│ni zgodne z filozofi╣ RedHata, ale tak jest IMHO pro£ciej.

Adres mojego routera IPv6 to 3ffe:902:3::2/48, nale┐y go zast╣piµ w│asnym. Routing defaultowy nale┐y r≤wnie┐ uzyskaµ od Rafa│a, chocia┐ pewnie bΩdzie taki sam.

 

#!/bin/sh
case "$1" in
        start)

        echo "Configuring IPv6..."
        # konfiguracja kernela - forwarding pakiet≤w IPv4 i IPv6
        echo 1 >/proc/sys/net/ipv6/conf/all/forwarding

        ip addr add 3ffe:902:3::2/48 dev eth0	# [1]

		# 193.219.28.246 = 6bone-gw.6bone.pl
		# 195.116.211.11 = druid.ceti.com.pl
		ip tunnel add icm mode sit remote 193.219.28.246 local 195.116.211.11 ttl 64	# [3]
		ip link set icm up	# [4]
		ip route add 3f00::/8 via fe80::193.219.28.246 dev icm	# [5]

        ;;

        stop)
		ip link set icm down	
        ;;
esac

 

Kilka s│≤w komentarza

Powy┐sza konfiguracja robi nastΩpuj╣ce rzeczy:
  • dodaje adres IPv6 hosta do interfejsu eth0, co powinno r≤wnocze£nie spowodowaµ pojawienie siΩ routingu na sieµ lokaln╣ (linijka 1)
  • tworzy tunel SIT (IPv6 tunelowane w IPv4) miΩdzy dwoma hostami: 6bone-gw.6bone.pl (remote) oraz druid.ceti.com.pl (local). Interfejs tunelu otrzymuje nazwΩ icm (linijka 3)
  • podnosi interfejs icm. W tym przypadku iproute robi dok│adnie to samo co "ifconfig icm up" (linijka 4)
  • dodaje routing domy£lny IPv6 na interfejs tunelu tunelu (linijka 5)

Wyja£nienia tak┐e wymaga kierowania routingu przez adres fe80::193.219.28.246", Jest to adres typu link-local dodawany automatycznie do interfejsu tunelu podczas jego tworzenia. Jak widaµ, zawiera on przedrostek fe80 oraz adres IPv4 drugiego ko±ca tunelu.

Adresy link-local bardzo upraszczaj╣ konfiguracjΩ tuneli. W stosowanej przez nas poprzednio metodzie ka┐demu ko±cowi tunelu nale┐a│o przydzieliµ "prawdziwy" adres IPv6 z prefiksem /126 i na niego ustawiaµ routing.

Je£li chodzi o zamykanie tuneli, to w obecnej wersji IPv6 w kernelu nie jest zalecane usuwanie ich za pomoc╣ "ip tunnel del". Wed│ug wyja£nie± ANK kasowanie interfejs≤w nie jest jeszcze dopracowane i nie nale┐y z niego korzystaµ.

Testy

Po uruchomieniu powy┐szego skryptu adresy interfejs≤w oraz routing powinien byµ poprawnie skonfigurowany pod k╣tem IPv6. Wyniki dzia│ania nastΩpuj╣cych polece± powinny zawieraµ adresy IPv6:

Adresy interfejsu g│≤wnego

 

[root@druid /root]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast
    link/ETHER 00:80:c8:79:a4:46 brd ff:ff:ff:ff:ff:ff
    inet 195.116.211.11/26 brd 195.116.211.255 scope global eth0
    inet6 fe80::280:c8ff:fe79:a446/10 scope link 
    inet6 3ffe:902:3::2/48 scope global 

Routing

 

[root@druid /root]# ip route list table main6
local ::1 via :: dev lo  metric 0  mtu 3924 rtt 300
local 3ffe:902:3::2 via :: dev lo  metric 0  mtu 3924 rtt 300
3ffe:902:3::/48 dev eth0  proto kernel  metric 256  mtu 1500 rtt 300
local fe80::c374:d30b via :: dev lo  metric 0  mtu 3924 rtt 300
local fe80::280:c8ff:fe79:a446 via :: dev lo  metric 0  mtu 3924 rtt 300
fe80::/10 dev eth0  proto kernel  metric 256  mtu 1500 rtt 300
fe80::/8 dev icm  proto kernel  metric 256  mtu 1500 rtt 300
ff00::/8 dev eth0  proto kernel  metric 256  mtu 1500 rtt 300
ff00::/8 dev icm  proto kernel  metric 256  mtu 1480 rtt 300
unreachable default dev lo  metric -1  error -101

Adresy interfejsu tunelu

 

[root@druid /root]# ip addr show icm
7: icm@NONE: <POINTOPOINT,NOARP,UP> mtu 1480 qdisc noqueue
    link/SIT c3:74:d3:0b brd c1:db:1c:f6
    inet6 fe80::c374:d30b/128 scope link 

Ping

Je£li tunel z drugiej strony jest ju┐ skonfigurowany, to powinien r≤wnie┐ dzia│aµ ping na adresy IPv6:

 

[root@druid /root]# ping 3ffe:902::1
PING 3ffe:902::1 (3ffe:902::1): 56 data bytes
64 bytes from 3ffe:902::1: icmp_seq=1 ttl=64 time=129.354 ms
64 bytes from 3ffe:902::1: icmp_seq=5 ttl=64 time=274.319 ms
64 bytes from 3ffe:902::1: icmp_seq=6 ttl=64 time=365.049 ms
64 bytes from 3ffe:902::1: icmp_seq=7 ttl=64 time=293.874 ms
64 bytes from 3ffe:902::1: icmp_seq=8 ttl=64 time=291.153 ms
64 bytes from 3ffe:902::1: icmp_seq=9 ttl=64 time=127.219 ms

--- 3ffe:902::1 ping statistics ---
10 packets transmitted, 6 packets received, 40% packet loss
round-trip min/avg/max = 127.219/246.828/365.049 ms

 

Resolver

Je£li zainstalowany w systemie resolver obs│uguje IPv6 (glibc-2.0.92 i nowsze), to mo┐na tak┐e u┐ywaµ nazw kanonicznych, np. "6bone-gw.6bone.pl", kt≤re powinno siΩ rozwi╣zaµ na adres 3ffe:902::1. Nale┐y zauwa┐yµ, ┐e hosty mog╣ mieµ r≤wnocze£nie adres IPv4 oraz IPv6:

 

[root@druid /root]# host -t a 6bone-gw.6bone.pl
6bone-gw.6bone.pl has address 193.219.28.246
[root@druid /root]# host -t aaaa 6bone-gw.6bone.pl
6bone-gw.6bone.pl IPv6 address 3ffe:902::1

DNS

Adresy IPv6 s╣ przechowywane w rekordach AAAA (w odr≤┐nieniu od rekord≤w A dla IPv4). S╣ one obs│ugiwane przez BIND 4.9.7 oraz 8.1.2. Dla potrzeb IPv6 warto stworzyµ w swojej domenie poddomenΩ ipv6 (np. ipv6.ceti.com.pl) i w niej dodawaµ adresy maszyn pod│╣czonych do 6BONE. Poni┐sze przyk│ady dotycz╣ BIND 8.1.2, przyk│ady dla wersji 4.9.7 mo┐na znaleƒµ na stronie http://www.visc.vt.edu/ipv6/doc/dns.html.

 

domena ipv6

Wpis w /etc/named.conf:

 

zone "ipv6.ceti.com.pl" {
        type master;
        file "ipv6.hosts";
};

Plik ipv6.hosts:

 

@               IN      SOA     tau.ceti.com.pl.  hostmaster.tau.ceti.com.pl.  (
                                1998040301
                                21600
                                7200
                                1209600
                                172800 )

                IN      NS      tau.ceti.com.pl.
                IN      NS      zatoka.icm.edu.pl.
                IN      MX      10 tau.ceti.com.pl.
                IN      MX      20 alfa.ceti.com.pl.
                IN      MX      30 pipeta.chemia.pk.edu.pl.

druid           IN      AAAA    3ffe:902:3::2
inny_host	IN	AAAA	3ffe:902:3::3
inny_host	IN	AAAA	3ffe:902:3::4

 

domena odwrotna

Do mapowania adres≤w IPv6 na nazwy kanoniczne s│u┐y domena IP6.INT, w kt≤rej adres jest zapisywany od ko±ca, cyferka po cyferce. DelegacjΩ domen w IP6.INT prowadzi wΩze│ od kt≤rego otrzymujemy podsieµ, w naszym przypadku Rafa│ Maszkowski <rzm@icm.edu.pl>. Przyk│adowo, dla sieci 3ffe:0902:0003::/48 delegowana jest domena 3.0.0.0.2.0.9.0.e.f.f.3.ip6.int. Dla znajduj╣cego siΩ w tej sieci hosta 3ffe:902:3::2 nale┐y stworzyµ rekord:

 

2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR druid.ipv6.ceti.com.pl.

Jak mo┐na siΩ domy£liµ, po po│╣czeniu │a±cucha cyfr odpowiadaj╣cego adresowi hosta z │a±cuchem odpowiadaj╣cym adresowi delegowanej sieci ca│o£µ powinna mieµ d│ugo£µ 32 cyferek. Przyk│adowe pliki dla BIND 8.1.1 znajduj╣ siΩ poni┐ej:

Wpis w /etc/named.conf:

// 3ffe:902:3::2
zone "3.0.0.0.2.0.9.0.e.f.f.3.ip6.int" {
        type master;
        file "3ffe:902:3";
};

Plik /var/named/3ffe:902:3:

 

@               IN      SOA     tau.ceti.com.pl. hostmaster.tau.ceti.com.pl. (
                                1998040601 ; YYYYMMDDxx
                                86400
                                7200
                                1209600
                                21600 )

                IN      NS      tau.ceti.com.pl.
                IN      NS      zatoka.icm.edu.pl.
;                       hosty w domenie 3.0.0.0.2.0.9.0.e.f.f.3.ip6.int
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     zatoka.ipv6.icm.edu.pl.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0         IN      PTR     druid.ipv6.ceti.com.pl.

Po skonfigurowaniu DNSu i odwrotnego DNSu programy powinny prawid│owo rozwi╣zywaµ zar≤wno nazwy host≤w w domenie ipv6. oraz adresy w domenie odwrotnej:

 

[root@druid /root]# /usr/inet6/bin/traceroute druid.ipv6.ceti.com.pl
traceroute to druid.ipv6.ceti.com.pl (3ffe:902:3::2), 30 hops max, 60 byte packets
 1  druid.ipv6.ceti.com.pl (3ffe:902:3::2)  0.424 ms *  0.277 ms
[root@druid /root]# /usr/inet6/bin/traceroute 3ffe:902:3::2
traceroute to 3ffe:902:3::2 (3ffe:902:3::2), 30 hops max, 60 byte packets
 1  druid.ipv6.ceti.com.pl (3ffe:902:3::2)  0.441 ms *  0.305 ms

Zasoby

 

WWW

Pierwsze dwie strony s╣ czΩsciowo nieaktualne (szczeg≤lnie w sekcjach dotycz╣cych uzyskiwania adres≤w IPv6), ale zawieraj╣ wiele przydatnych informacji na temat oprogramowania IPv6 pod Linuxa.

 

Listy dyskusyjne

 

6bone-pl@sunsite.icm.edu.pl
zapisy na petidomo@sunsite.icm.edu.pl, z tekstem subscribe 6bone-pl w tre£ci listu
netdev@nuclecu.unam.mx
zapisy na majordomo@nuclecu.unam.mx, z tekstem subscribe netdev w tre£ci listu
6bone@isi.edu
zapisy na majordomo@zephyr.isi.edu, z tekstem subscribe 6bone w tre£ci listu

 

PodziΩkowania

 

  • Artur Frysiak
  • Maciej Grzeszczuk
  • Rafa│ Maszkowski
  • Sergiusz Paw│owicz
  • Grzegorz Stanis│awski
  • Wojciech îlusarczyk
Oraz pozostali uczestnicy 6bone w Polsce i za granic╣.

 


Pawe│ Krawczyk <kravietz@ceti.com.pl>

 




 

 

Wyślij E-mail MMalinow@bigfoot.com z pytaniami lub komentarzem.
Copyright ⌐ 2000 GroszNet Osiedlowa Sieµ Komputerowa
Ostatnia modyfikacja: March 01, 2000