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:
- Kad jednotliv stanici mete zakzat zpracovvn
advertisement nastavenm:
/sbin/sysctl -w net.ipv6.conf.all.accept_ra=0
Pokud chcete omezit pjem RA jen na konkrtnm rozhran, nahrate all jeho jmnem, nap. eth0.
- Kad stanice si me kdykoliv vydat zasln RA tm, e do st odele Router solicitation message, tedy vzvu routeru, aby poslal patin daje. Obvykle kernel tuto zprvu pole po aktivovn novho interface (teba pi bootu), nebo po zavedeni modulu ipv6.o. Kdyby to neudlal, musel by ekat leckdy i nkolik minut bez adresy a do chvle, ne router v pravidelnm intervalu odele sv oznmen.
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 ]