Technologie 6to4 byla definována v RFC 3056 jako jeden z automatických mechanismů spojování IPv6 ostrůvků přes IPv4 sí?. 6to4 používá celý IPv4 internet jako jednu spojovací sí?.
6to4 používá pro své adresování IPv6 adres z rozsahu 2002::/16 a zbytek IPv6 adresy se pak vytváří z přidělené IPv4 adresy.
6to4 rozlišuje tři základní druhy uzlů zapojených do tohoto mechanismu:
Každý IPv6 ostrůvek dostane svůj IPv6 prefix sestavený následovně: 2002:WWXX:YYZZ::/48, kde WWXX:YYZZ jsou čtyři bajty přidělené IPv4 adresy. Prefix /48 je standardizovaný prefix přidělovaný koncovým zákazníkům v IPv6. To umožňuje mít ve vnitřní síti až 65535 IPv6 podsítí, a tedy dostatečnou kapacitu pro adresaci všech vnitřních počítačů. Tam je možné použít standardní mechanismy pro přidělování IPv6 adres, včetně adresy směrovače. Tj. použijeme buď statickou konfiguraci, bezestavovou automatickou konfiguraci SLAAC nebo DHCPv6.
Pokud přidělujeme 6to4 adresu jedinému počítači (6to4 host), pak je možné adresu konstruovat libovolným způsobem odpovídajícím danému prefixu. Např. 2002:WWXX:YYZZ::1. Operační systémy z rodiny Microsoft Windows konstruují adresy jako 2002:WWXX:YYZZ::WWXX:YYZZ.
IPv6 adresy máme tedy přiděleny, co nám zbývá, je vyřešit směrování mezi jednotlivými počítači. To je překvapivě jednoduché. Máme tři možnosti podle toho, kde se koncový počítač nachází:
Pro poslední variantu zbývá vyřešit pouze dvě drobnosti. Tou první je, jak zjistit IPv4 adresu 6to4 relaye. K tomu máme tři možnosti:
Druhou překážku představuje cesta z IPv6 internetu zpět k 6to4 relayi. Zpáteční cesta je zajištěna tak, že každá 6to4 relay oznamuje do IPv6 internetu, že se za ním nachází sí? 2002::/16. Zpáteční paket do 6to4 ostrůvku si pak vybere nejbližší 6to4 relay automaticky. Tento způsob řešení může mimo jiné způsobit asymetrickou cestu, kdy odesílající 6to4 relay bude jiná než 6to4 relay přijímající zpáteční paket.
Mechanismus 6to4 je tedy relativně jednoduché řešení, které by vždy fungovalo nebýt NAT na straně poskytovatele připojení. Pokud totiž nemá 6to4 router/uzel veřejnou IPv4 adresu, není možné zkonstruovat 6to4 IPv6 adresu tak, aby se zpáteční paket vrátil k původnímu odesilateli. Tento problém řeší až následující protokol.
V dnešní době je Internet kvůli nedostatku IPv4 adres zaplevelen různými druhy NATu, které za jednou IPv4 adresou schovávají celé velké sítě. Internet byl přitom původně založen na principu přímé konektivity mezi koncovými uzly, čemuž NAT úspěšně brání. Většina dříve popsaných přechodových mechanismů nebude na počítačích za NATem fungovat (nebo pouze za zvláštních podmínek).
Aby bylo možné používat IPv6 i v takové situaci (ve které se nachází velká část domácích uživatelů, minimálně v ČR), byl vyvinut protokol Teredo, který si s NATem dokáže většinou poradit.
Před tím, než se pustíme do popisu fungování samotného Teredo mechanismu, musíme se trochu seznámit s fungováním technologie NAT.
NAT (Network Address Translation) byla původně technologie pro přepisování IPv4 adres v IPv4 paketech. Sloužila hlavně jako dočasné řešení při přečíslování sítě, aby se adresy nemusely měnit na všech počítačích vnitřní sítě hned, ale mohla se využít nějaká dočasná doba, kdy počítače fungovaly v nové síti i se starými adresami. NAT byl provizorní řešení, protože některé protokoly kvůli tomu nefungovaly (FTP). Překlad byl nestavový, a kvůli tomu jej bylo možné provádět vždy pouze v poměru 1:1.
Později vyvstala potřeba překládat adresy ve větším poměru než 1:1, aby se dosáhlo ušetření adresového prostoru. Pro tyto účely byl NAT rozšířen i o použití hlaviček čtvrté vrstvy (tj. např. UDP a TCP). Tímto vznikla čtveřice [src_IP, src_port, dst_IP, dst_port], a díky přemapování zdrojového portu bylo možné detekovat, ke kterému odchozímu paketu patří vracející se pakety. Tento princip se správně nazývá NAPT (Network Address and Port Translation), nicméně dnes se poměrně běžně zaměňuje za NAT, a NAT je takto v novém významu i vnímán. Pro tento způsob NATu je nutné udržovat stavovou tabulku překladů, což může v některých případech (málo výkonný hardware, příliš provozu) způsobovat problémy.
Použití informací z vyšších vrstev hlaviček paketů v NATu představuje pro standardní IPv6 tunelovací mechanismy problém, protože NAT obvykle pracuje pouze s protokoly TCP a UDP, jiným protokolům většina NAT směrovačů nerozumí. Ostatní IPv6 přechodové mechanismy totiž nepoužívají TCP ani UDP a pro zapouzdření IPv6 paketu do IPv4 paketu používají protokol číslo 41, ve kterém není nic, co by se dalo označit za číslo portu.
Teredo tedy zapouzdřuje IPv6 paket do UDP paketu, který snadněji projde NATem.
Pro přesnější členění různých druhů NATu rozlišujeme následující typy (podle RFC 3489):
Teredo rozlišuje tři součásti nutné ke správnému fungování:
IPv6 adresa Teredo klienta vypadá následovně:
Teredo prefix: aby bylo možné rozeznat, že se jedná o protokol Teredo, je pro tento protokol vyhrazen prefix 2001:0000::/32.
Teredo server IPv4 adresa: adresa Teredo serveru, který spolupracoval na vytvoření Teredo adresy na klientovi.
Příznaky: náhodná data sloužící jako ochrana proti některým druhům útoků.
Modifikovaný externí port: je upravené číslo externího portu, na který se mapuje vnitřní IPv4 adresa. Tento port se systém dozví až po první komunikaci s Teredo serverem, protože mezitím prošel IPv4 paket NATem, který původní vnitřní port změnil.
Modifikovaná externí adresa: upravená externí IPv4 adresa, na kterou se mapuje vnitřní IPv4 adresa. Tuto adresu se klient dozví až po první komunikaci s Teredo serverem.
Jak si Teredo klient zjistí svoji IPv6 Teredo adresu? Celkem překvapivě jednoduše pomocí téměř standardního IPv6 ohlášení směrovače. Klient vytvoří IPv6 paket obsahující zprávu Router Solicitation, zabalí ji do UDP IPv4 paketu s cílovou adresou Teredo serveru. Tento paket projde přes NAT, dorazí na Teredo server, a ten odpoví upravenou RA zprávou, která v sobě obsahuje informaci o externí adrese a portu klienta za NATem. Klient pak tyto informace vezme a vytvoří si z nich podle výše uvedeného návodu svoji vlastní IPv6 Teredo adresu.
Tímto postupem si Teredo klient vytvořil také patřičný záznam v NAT tabulkách, takže je možné, aby Teredo server komunikoval s Teredo klientem (už může posílat pakety dovnitř, což se nám bude za chvíli hodit).
Mechanismus Teredo používá techniku, které se říká "NAT punching" - proděravění NATu. Komunikace mezi Teredo klientem A a Teredo klientem B vypadá potom následovně:
Komunikace mezi Teredo klientem A a IPv6 only klientem C probíhá odlišně:
O NATu se často říká, že je jistá forma bezpečnosti, protože na počítače není možné navazovat spojení z vnější sítě. Jak jsme si předvedli v případě mechanismu Teredo, není to pravda. Komunikace dokonce může probíhat mezi dvěma uzly, které oba jsou za NATem.
Obecně všechny přechodové mechanismy mohou představovat jisté bezpečnostní riziko, protože se často tvoří samy automaticky, bez nutnosti zásahu administrátora. Firewally nejsou většinou na takovou tunelovanou komunikaci připraveny a může se stát, že propustí pakety, které by v IPv4 zahodily.
O nebezpečnosti tohoto mechanismu hovoří už samotný název. Původně se totiž tento mechanismus jmenoval Shipworm, nicméně byl přejmenován na Teredo, protože worm (červ) nemá v počítačových sítích zrovna dobré konotace. Autoři vtipně přejmenovali mechanismus na Teredo, což je latinský název pro anglický shipworm, v češtině sášeň lodní (drobný mlž dělající díry do dřevěných lodí). Je vidět, že i autoři suchých technických specifikací mají smysl pro humor.
[1] | Toredo overview. http://www.microsoft.com/technet/network/ipv6/teredo.mspx.
... zpět do textu |