Teredo: IPv6 kdekoli

Chcete experimentovat s IPv6, ale váš poskytovatel připojení nebo síť ho nepodporuje? Řešením je Teredo, které projde skoro všude včetně IPv4 NATu. Efektivní ale příliš není.

Stejně jako ostatní protokoly pro průchod NATem se opírá o Teredo server s veřejnou IPv4 adresou. Když si Teredo klient chce obstarat IPv6 adresu, pošle na adresu serveru (kterou má ve své konfiguraci, zpravidla se jedná o teredo.ipv6­.microsoft.com nebo teredo.remlab­.net) standardní zprávu pro automatickou konfiguraci – výzvu směrovači (router solicitation). Jelikož však nemá IPv6 konektivitu, zabalí ji do UDP a odešle protokolem IPv4.

Zpráva projde NATem, který změní odesilatelovu IPv4 adresu a port, a dorazí k serveru. Ten pošle zpět opět standardní ohlášení směrovače (router advertisement) s prefixem sítě, jehož počátečních 32 bitů má pevnou hodnotu 2001:0000 a druhá polovina obsahuje IPv4 adresu serveru. Všichni klienti obsluhovaní jedním Teredo serverem mají IPv6 adresy ve stejné „podsíti“. K ohlášení server přibalí volbu s IPv4 adresou a číslem portu z příchozího datagramu, tedy hodnotami upravenými po průchodu NATem.

Technologickým garantem seriálu Pohněme s IPv6 je CZ.NIC.

Logo cz nic

Z těchto informací si klient sestaví IPv6 adresu. Její první polovinu tvoří prefix podsítě získaný z ohlášení. Druhou, která má v IPv6 význam identifikátoru rozhraní, složí z následujících hodnot: příznaky (16 bitů), číslo UDP portu (16 bitů), IPv4 adresa NATu (32 bitů). Číslo portu a adresa NATu jsou invertovány, aby je iniciativní NAT nevyhledal v obsahu datagramů a nepřemapoval.

Z takto sestavené adresy se kterýkoli stroj v Internetu podporující Teredo dozví vše potřebné pro komunikaci s jejím vlastníkem:

  • IPv4 adresu a port v NATu, pokud chce s dotyčným komunikovat přímo.
  • IPv4 adresu jeho Teredo serveru pro nepřímou komunikaci.

Postupem času se objevilo několik variant NATu, které různou měrou usilují o zabezpečení komunikaci strojů z místní sítě:

  • Trychtýřový NAT (cone NAT) přidělí lokálnímu stroji veřejnou adresu a port, které používá pro mapování veškeré jeho komunikace. Dovnitř propustí vše. Pro Teredo je ideální. Kdokoli může svůj IPv6 datagram zabalit do UDP a po IPv4 přímo poslat na adresu a port, která si vyzvedl z příjemcovy Teredo adresy.

  • Omezený NAT (restristed NAT) také přidělí klientovi jednu adresu a port pro veškerou komunikaci, ale dovnitř propustí jen pakety přicházející z adres a portů, na které daný klient nedávno odesílal data. Pro průchod omezeným NATem má Teredo speciální proceduru, kdy si oba účastníci před vlastní komunikací vymění několik prázdných zpráv (tzv. bublin, bubbles). Zahajující stroj pošle jednu přímo druhému stroji (aby mu otevřel cestu ve svém NATu) a druhou přes Teredo server. Ten má v omezeném NATu cílového stroje otevřený kanál, jím předaná bublina tedy projde (zatímco přímo zaslaná bude nejspíš zahozena) a oslovený se dozví, kdo s ním chce komunikovat. Odpoví bublinou zaslanou iniciátorovi komunikace, aby mu otevřel svůj NAT. Další pakety už pak procházejí přímo mezi oběma klienty, bez další účasti serveru.

  • Symetrický NAT přiděluje klientovi různé adresy a porty pro různé komunikační toky. Pro Teredo je neprůchodný – jestliže zjistí jeho přítomnost, ukončí své snažení a IPv6 adresu klientovi nepřidělí.

Přímá komunikace dvou Teredo klientů tedy nepředstavuje vážnější problém. Poněkud komplikovanější je styk mezi Teredo klientem a nativním IPv6 světem. Prochází přes zprostředkovatele (Teredo relay), což je stroj připojený k IPv4 i IPv6, podporující Teredo a ochotný předávat datagramy z jednoho světa do druhého. Do IPv6 sítě standardními směrovacími algoritmy ohlašuje, že je k němu připojena síť 2001::/32 (což je pevně daný prefix pro Teredo) a datagramy směřující do ní balí do UDP a po IPv4 odesílá standardním Teredo postupem.

Obráceně to bohužel nelze udělat tak jednoduše, Teredo klient se musí dozvědět adresu zprostředkovatele jinak. Provede to tak, že pošle IPv6 ping (ICMPv6 echo) na svou vlastní Teredo adresu přes svůj Teredo server, čili zabalený do IPv4 UDP. Server vybalí IPv6 paket a odešle nativní IPv6 sítí, kde se díky směrování dostane k nejbližšímu zprostředkovateli. Ten ping doručí pomocí Teredo zpět klientovi, který se z odesilatele obalujících IPv4 hlaviček dozví adresu zprostředkovatele. Jemu pak bude odesílat tunelované IPv6 datagramy směřující do IPv6 Internetu.

Tady je zároveň zakopán nejošklivější kostlivec celého mechanismu. Z popsaného postupu je jasné, že byl nalezen zprostředkovatel ležící co nejblíže Teredo serveru, nikoli klientovi. Důsledkem je zoufalá neefektivita při odesílání paketů ve směru od Teredo klienta do nativního IPv6. Desetinásobné přepravní zpoždění není žádnou výjimkou, spíše pravidlem.

Teredo je definováno v poměrně obsáhlém RFC 4380. Nedávno vyšla jeho modifikace v podobě RFC 5991, která se snaží zlepšit zabezpečení klienta. Původní Teredo adresa je předvídatelná a potenciální útočník ji může poměrně snadno uhodnout. Upravená specifikace proto požaduje, aby 12 z příznakových bitů obsahovalo náhodné hodnoty. Kromě toho opouští příznak trychtýřového NATu v adrese, který sice zvyšuje efektivitu komunikace, ale zároveň napovídá útočníkům, že pro daný cíl nebude NAT klást větší překážky. Podle nových pravidel se bude s každým Teredo klientem zacházet, jako by byl za omezeným NATem.

Příjemnou vlastností Tereda je jeho snadná dostupnost. Ve Windows je k dispozici od verze XP, ve Windows Vista či 7 se aktivuje automaticky, takže možná máte doma IPv6 spojení a ani o něm nevíte. Zkuste se pomocí ipconfig /all podívat na stav svých síťových rozhraní. Pravděpodobně mezi nimi najdete i Teredo. Pro Linux, BSD a MacOS X lze snadno nainstalovat Miredo.

KL_NOMINACE

Vysoká prostupnost v kombinaci s automatickou aktivací v nových verzích Windows způsobuje vrásky zejména správcům firemních sítí. Tunelovací mechanismus se může provrtat jejich bezpečnostními mechanismy a umožnit místním počítačům IPv6 komunikaci, která obchází místní zabezpečení. Chcete-li tomu zabránit, dá se na koncových Windows stanicích vypnout příkazem netsh interface teredo type=disabled. Jednodušší a jistější ale bude zakázat na firewallu odesílání datagramů na UDP port 3544, který slouží ke komunikaci s Teredo servery. Místní stroje pak nedostanou podklady pro vytvoření své adresy a nemohou mechanismus používat.

Nejste-li za symetrickým NATem nebo prvkem, který je cíleně potlačuje, Teredo vás připojí do IPv6 světa. Komunikace ovšem bude zoufale pomalá, rozhodně z ní nedělejte závěry ohledně výkonu IPv6 jako takového. Teredo je vhodné pouze na oťukávání a experimenty nebo jako východisko z nouze, pokud momentálně nemáte k dispozici nic lepšího. Máte-li s IPv6 vážnější úmysly, určitě si připojení zajistěte jiným způsobem.

19 názorů Vstoupit do diskuse
poslední názor přidán 30. 12. 2010 15:55