IPv6 krok za krokem - 2

Michal Ludvig <michal@logix.cz> (c) 2003

Z minulho dlu vte, jak vypad IPv6 adresa a k emu je ve svt IPv6 dobr tunel. Pokud jste splnili zadn domcho kolu, jste te nejsp registrovan u nkterho tunnel brokera a mon u jste podle instrukc na jeho strnkch rozchodili zlkadn IPv6 provoz. Dnes se ble podvme na konfiguraci tunel, routovn, firewall a dal zleitosti relnho provozu.

Konfigurace tunel

Tunely mete konfigurovat bu "postaru" pomoc pkaz ifconfig a route, nebo pjdete s dobou a pouijete vceelov program ip z balku iproute2. My samozejm pjdeme s dobou, take n prvn pkaz bude

/sbin/ip tunnel add tunylek mode sit local 91.92.93.94 remote 44.55.66.77 ttl 64
/sbin/ip
To je jasn, to je nzev programu.
tunnel
Taky jasn, budeme se zabvat tunelem.
add tunylek
Chceme pidat nov tunel a pojmenujeme ho tunylek.
mode sit
Chceme vyrobit tunel pro IPv6-over-IPv4 provoz, take zvolme typ sit. Dal mon volby (ipip, gre) se pouvaj pro jin typy tunel a nesouvis s IPv6, take ns nezajmaj.
local 91.92.93.94 a remote 44.55.66.77
Veejn IPv4 adresy mstnho a vzdlenho konce tunelu.
ttl 64
Tahle volba je zajmavj, ne se na prvn pohled zd. Pokud bychom j neuvedli, bylo by to stejn, jako kdybychom zadali ttl inherit, co by znamenalo, e vnj (IPv4) paket zdd TTL (Time To Live, ivotnost) vnitnho IPv6 paketu. Kupkladu traceroute6 nejdve pole IPv6 paket s TTL=1. Zabalen IPv4 paket tuto hodnotu zdd a bude mt tak TTL=1, co ovem znamen, e se nedostane dl, ne k nejblimu IPv4 routeru. Tam jeho ivotnost vypr a bude zahozen. Jene my chceme, aby nm traceroute6 na prvn dce ukzal e paket dorazil na brnu tunnel brokera, take musme zajistit, aby i IPv6 provoz s TTL=1 doel teba pes pl IPv4 internetu a na druh konec tunelu. No a k tomu nm poslou volba ttl 64, dky n budou mt vechny vnj pakety nastaveno TTL=64 bez ohledu na TTL paketu vnitnho a tud se vdy dostanou a na msto uren. Jet jednou zdrazuji, e tunel se z hlediska IPv6 paket chov jako jeden "hop" a naprosto ns nezajm pes kolik IPv4 router zabalen paket cestou ve skutenosti projde.

Take mme nakonfigurovan tunel. Zatm je shozen (down), abychom ho mohli pouvat, musme ho zaktivovat:

/sbin/ip link set tunylek up

Nyn by ji tunylek ml bt funkn. Meme ho vyzkouet:

# ping6 -I tunylek fe80::44.55.66.77
PING fe80::44.55.66.77(fe80::2c37:424d) from ::1 tunylek: 56 data bytes
64 bytes from fe80::2c37:424d: icmp_seq=1 ttl=64 time=0.063 ms
64 bytes from fe80::2c37:424d: icmp_seq=2 ttl=64 time=0.090 ms
^C

Protoe linkov IPv6 adresy obou konc tunelu jsou v Linuxu odvozeny od pslunch IPv4 adres, meme je s vhodou zapisovat jako fe80::44.55.66.77 a fe80::91.92.93.94, co je stejn jako kdybychom "sprvnji" psali fe80::2c37:424d resp. fe80::5b5c:5d5e, ale bez nutnosti konverze dekadickch sel na hexadecimln.
Mimochodem pokud vm ve uveden ping nebude chodit, me bt chyba bu v konfiguraci vaeho tunelu, v nastaven firewallu, nebo v tom, e druh strana nepouv Linux, take vzdlen linkov adresa me bt tvoena jinm zpsobem. Nevad, tte dl, teba se to asem vye :-)

Jestlie chceme spojen s celm IPv6 svtem, tak se celkem hod nastavit routovn:

/sbin/ip route add 2000::/3 dev tunylek

Mon se ptte, pro pidvme cestu pouze pro 2000::/3 a ne pro ::/0 nebo pro "default" nebo tak nco. Inu je to proto, e pestunylek budeme poslat pouze pakety smujc na globln adresy (viz prvn dl).
Taky se mon ptte, kde je zapsna adresa routeru na druhm konci tunelu. Jednodue eeno: nen poteba. Pokud kernel v, e tunel je dvoubodov spojen (point to point link) tak je jasn, e druh konec je zrove onm danm routerem. A bude poteba odeslat paket, kter vyhovuje pedchozmu routovacmu pravidlu, kernel ho zabal do IPv4 oblky a odele na adresu 44.55.66.77, kde ho tam sedc router vybal a zpracuje nebo pole dl. Je tedy vidt, e jeho IPv6 adresu nepotebujeme. Pokud chcete vdt vc, doporuuji RFC 2491.

Ne budeme moci zat komunikovat se svtem, musme si jet nastavit vlastn globln adresu, aby druh strana vdla, kam m poslat odpovdi. eknme, e jste od tunnel brokera dostali cel prefix 3ffe:ffff:1234::/48 a vaemu potai chcete dt 3ffe:ffff:1234::1. Na lokln rovni se obvykle pouvaj subnety s prefixem 64bit, take ken pkaz je:

/sbin/ip addr add 3ffe:ffff:1234::1/64 dev tunylek

Nyn byste mli bt schopni pingat a traceroutovat po celm IPv6 internetu (pkazy ping6 a traceroute6). Pokud vm toto bude fungovat, mete z Mozilly, kter je standardn IPv6-enabled, vyzkouet njak weby (teba http://www.ipv6.logix.cz, nebo http://www.kame.net), na kterch rovnou poznte, zda jste pipojeni pes IPv6 nebo pes IPv4 (pedem si vak vypnte ppadnou proxy). Pokud vm vechno chod, mte nakonfigurovanho IPv6 klienta, gratuluji :-)

Mimochodem, jestlie pouvte SuSE Linux verze 8.1 a ni, budete muset explicitn povolit peklad domnovch jmen na IPv6 adresy v souboru /etc/nsswitch.conf zmnou volby dns na dns6 v dcch hosts a networks. Pokud to neudlte, bude resolver vracet vdy pouze IPv4 adresy.

Firewall

Pro penos IPv4 paket obsahujcch zabalen IPv6 data se pouv IPv4 protokol slo 41, v /etc/protocols pekvapiv oznaen jako ipv6. Pokud na svm potai pouvte paketov filtr, co je celkem rozumn, muste tomuto protokolu uvolnit cestu:

/sbin/iptables -I INPUT -p ipv6 -j ACCEPT

Tm povolte provoz samotnho tunelu, take IPv4 paket se dostane a do kernelu a tam z nj bude vybalen originln IPv6 paket. Protoe dbte na bezpenost a vte, e zl hoi se mohou vyskytovat i na 6bone, je celkem rozumn nastavit filtrovn pchozho IPv6 provozu. Jednoduch pklad me vypadat teba takto:

/sbin/ip6tables -F INPUT
/sbin/ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/ip6tables -A INPUT -p tcp -j LOG
/sbin/ip6tables -A INPUT -p tcp -j DROP

Samozejm je to jen ukzka. Konkrtn pravida si jist kad odlad podle svch poteb. Doporuuji nkde ke konci nechat logovn zahazovanch paket, abyste vdli o co pichzte a mohli se rozhodnout, zda by nebylo lep nco z toho pece jenom akceptovat.

Lokln s

Jeden pota tedy mme pipojen. Nyn pedpokldejme, e do IPv6 Internetu chceme pipojit celou s. V tom ppad musme tunel nakonfigurovat na routeru, avak globln adresu nenastavovat na interface tunylek, nbr na n vnitn interface (eknme, e je to eth1). Nebojte se, e byste pak nemohli komunikovat pmo z routeru - vbr odchoz adresy v Linuxu probh tak, e se kernel nejprve podv, jestli rozhran, pes kter bude paket odchzet (v naem ppad tunylek) m piazenu adresu odpovdajcho typu (v naem ppad globln). Pokud m, pouije ji. V naem ppad nem, take se podv, jestli nkter z ostatnch interfac nem vhodnou adresu. Pokud ano, pouije tu. V naem ppad tedy pro odchoz pakety bude pouita globln adresa z eth1.

Dle na routeru budete muset povolit forwardovn IPv6 paket:

/sbin/sysctl -w net.ipv6.conf.all.forwarding=1

a ppadn nastavit firewall podle vaich bezpenostnch poadavk.

Autokonfigurace

Router mme nakonfigurovn, ale co stanice? Meme jednu po druh obejt a na kad nastavit ve run:

/sbin/ip addr add 3ffe:ffff:1234::abcd/64 dev eth0
/sbin/ip route add 2000::/3 via 3ffe:ffff:1234::1

Ale to nen takov legrace. Lep je vyut bezestavov autokonfigurace adres (Stateless address autoconfiguration) popsan v RFC 2462, kter nm me uetit spoustu prce. Princip je takov, e router jednou za as (obvykle po destkch vtein) pole vem stanicm zprvu: "Ahoj, j jsem router a mm linkovou adresu fe80::200:ff:fe00:1. Tahle s pouv prefix 3ffe:ffff:1234::/64. Rate si nasvatit sv adresy." Zprv se uen k Router advertisement message (RA) - oznmen routeru.

Stanice, kter tuhle zprvu zachyt, vezme svou ethernetovou adresu, teba 00:01:02:03:04:05 a oznmen prefix a slo z nich svou globln adresu 3ffe:ffff:1234:0:201:2ff:fe03:506.
Pro dan MAC adrese odpovd zrovna tato IPv6 adresa se dozvte v RFC 2464 (Transmission of IPv6 Packets over Ethernet Networks) a RFC 2373 (IPv6 Addressing Architecture - kapitola "2.5.1 Interface Identifiers").
Dle si pjemce poznamen linkovou adresu routeru a nastav si j jako vchoz brnu pro vechny pakety, pro kter nebude znt lep cestu.

Je to jednoduch a elegantn een, kter vak nen zcela dokonal. Jednak k nov vytvoen adrese nebude existovat dopedn ani reverzn DNS zznam, ale protoe tmto zpsobem budeme vtinou konfigurovat klientsk stanice a nikoliv servery, nemuselo by nm to tolik vadit. Dal problm je, e oznmen routeru narozdl od DHCP odpovdi neobsahuje informaci o DNS serverech. Sice existuj zpsoby, jak tuto zleitost vyeit, ale prozatm jsou vesms ve stdiu vah. Ale pedpokldejme, e stanice jsou u nakonfigurovny pro IPv4 provoz a tud maj i povdom o DNS serverech pstupnch pes IPv4 protokol. Nic nm nebrn tyto servery vyut i pro peklad IPv6 adres.

Pr poznmek k tomuto tmatu:

radvd

V Linuxu najdete program radvd (Router ADVertisement Daemon), kter pro posln oznmen pouijeme. Konfiguran soubor /etc/radvd.conf me vypadat teba takhle:

# Poslme do vnitn st
interface eth1
{
	# Povolme odesln
	AdvSendAdvert on;
	
	# Nastavme prefix
	prefix 3ffe:ffff:1234::/64 
	{
		# Platnost adresy bude 1 hodina
		AdvValidLifetime 3600;
	};
};

Voleb samozejm existuje mnohem vc a manulov strnka je vechny podrobn popisuje.
Nyn sta spustit program radvd a vechny potae v lokln sti by se mly nakonfigurovat. Pokud chcete vidt, jak informace jim router posl, spuste na nkterm z nich program radvdump, kter kad oznmen routeru pehledn vype.

A je to. Vae s by nyn mla mt funkn IPv6 konektivitu. V dalm dle se dostaneme ke konfiguraci DNS a nkterch aplikac. Do t doby mete smle experimentovat s tm, co jsme zatm dokzali.


IPv6 krok za krokem: [ 1 ] [ 2 ] [ 3 ]
[ Vechny lnky ] [ Domc strnka ]