Přelez, přeskoč a podlez NAT

Petr Krčmář 20. 6. 2006

Hlavním problémem IPv4 sítích je malý adresní prostor, který nedovoluje každému počítači přidělit jeho vlastní veřejnou IP adresu. To přináší problém v případě, že chcete propojit dva počítače, které jsou za překladačem adres (NAT). I tady ovšem existuje snadné řešení.

Většina poskytovatelů připojení pro domácnosti veřejné IP adresy automaticky nepřiděluje. Někdy stačí požádat, jindy je potřeba si připlatit. Jsou ovšem i takoví poskytovatelé, kteří vás odmítnou s tím, že veřejné IP adresy prostě nemají.

Ano, na běžné surfování, vybírání pošty a Jabber samozřejmě veřejnou nepotřebujete a NAT vám poslouží velmi dobře. Co když ale potřebujete nějak jednoduše přenášet soubory, opravit kamarádovi na dálku nastavení jeho počítače, případně si chcete zahrát nějaké hry?

Existuje pochopitelně možnost využít jiný stroj, který veřejnou IP má a sestavit přes něj třeba VPN. Ne každý ovšem má podobné zázemí k dispozici a pokud nepracujete jako admin, těžko něco takového seženete. Existuje ovšem jednodušší řešení. Jmenuje se nat-traverse.

nat-traverse

Název nat-traverse se skládá ze slov NAT a traverse. NAT je zkratka pro Network Address Translation, což znamená překlad síťových adres. Traverse je anglické slovo, které znamená překročit, zkřížit a přetnout. Z toho plyne, že nat-traverse je program pro překročení NAT.

Instalace

Je možné, že nat-traverse najdete v repozitářích své oblíbené distribuce. Pokud tomu tak není, nemusíte zoufat. Jedná se o jednoduchý perlový skript, který využívá jen základních modulů a není jej potřeba nijak kompilovat ani složitě instalovat.

Stačí tedy do systému nainstalovat Perl (5.6.1 a vyšší) a pak ze stránky projektu stáhnout jeden soubor se skriptem. To je celá instalace.

Jak to funguje?

Princip, kterým program sestavuje spojení na NAT je poměrně jednoduchý, popíšeme si jej postupně v několika krocích. Nejprve schéma naší sítě:

PC1 ---- NAT1 ------ internet ------ NAT2 ---- PC2

Našim cílem je tedy vytvořit stabilní spojení mezi PC1 a PC2, které jsou za překladači adres NAT1 a NAT2, nad kterými nemáme žádnou kontrolu. Pokud bychom ji měli, bylo by snadné nastavit třeba port forwarding. My ovšem předpokládáme, že NAT1 a NAT2 jsou v rukou našich providerů.

Program je potřeba pustit na obou počítačích a zadat mu adresu NATu na druhé straně. Kromě toho je potřeba mu předat čísla místního a vzdáleného UDP portu. Vše totiž probíhá na UDP.

root@pc1# nat-traverse 4000:ip_nat2:4001

root@pc2# nat-traverse 4001:ip_nat1:4000

Místo ip_nat1 a ip_nat2 samozřejmě doplníme adresy protějších NATů, aby program věděl, kam musí směřovat svou komunikaci.

Celý postup je tedy následující:

  1. PC1 odešle náhodná data v podobě UDP paketu na NAT2. Ten samozřejmě ví, že žádná komunikace neprobíhá, a tak pakety zahodí.
  2. PC2 pošle náhodná data na NAT1. Ten si ovšem myslí, že se jedná o odpověď na první pakety, protože přicházejí od NAT2. Proto je NAT1 doručí až k PC1.
  3. PC1 opět pošle paket na NAT2. Teď si i NAT2 myslí, že se jedná o odpověď na paket z druhého kroku a tak data předá k PC2.

A je hotovo, oba NATy se domnívají, že jde o regulérní komunikaci s druhou stranou. Podle NAT1 komunikuje PC1 se strojem NAT2 a naopak. V tuto chvíli tedy existuje UDP most mezi PC1 a PC2. Informace z něj jsou k dispozici na standardním vstupu/výstupu net-traverse. Můžeme jej tedy použít třeba k jednoduchému přímému chatu. To by nám mohlo stačit k posílání jednoduchých dat, ale my bychom samozřejmě měli raději plnohodnotné spojení.

Spojení s pomocí pppd

nat-traverse umožňuje s pomocí parametru --cmd="příkaz" spustit po stabilizaci spojení libovolný příkaz, který pak může využít standardního vstupu/výstupu k posílání dat na druhou stranu.

My potřebujeme něco, co nám přes jeden jednoduchý komunikační kanál sestaví kompletní TCP/IP spojení. Pro tyto účely je přímo napsán démon pppd, vždyť přes telefonní linku můžeme také posílat data jako přes nat-traverse a ony nám ze sériového portu na druhé straně ve stejném pořadí vypadávají.

Proto zavoláme program na obou stranách s novými parametry:

root@pc1# nat-traverse --cmd="pppd updetach noauth passive notty ipparam vpn 10.0.0.1:10.0.0.2" 4000:ip_nat2:4001

root@pc2# nat-traverse --cmd="pppd nodetach notty noauth" 4001:ip_nat1:4000

pppd se bude chovat dle očekávání a vytvoří nám nové spojení ppp0 s námi zvolenými IP adresami. V tu chvíli už se jedná o plné TCP/IP, přes které můžeme normálně bez omezení komunikovat třeba se SSH serverem na druhé straně nebo prostě jak je libo.

Závěr

V době, kdy se IPv6 příliš neprosazuje, je net-traverse jedním z nejjednodušších způsobů, jak propojit dva počítače za „neproniknutelnou” hradbou neochotného providera. Výborně se přes něj paří třeba BZflag.

Anketa

Máte u domácího providera veřejnou IP?

Vitalia.cz: Děti jsou sportem opotřebované

Děti jsou sportem opotřebované

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

120na80.cz: Vyzrajte na návaly a pocení v přechodu

Vyzrajte na návaly a pocení v přechodu

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

Podnikatel.cz: Eshopy s dopravou zdarma. Zválcují ostatní?

Eshopy s dopravou zdarma. Zválcují ostatní?

Lupa.cz: Babiš: nevím o návodu, jak obejít blokování webů

Babiš: nevím o návodu, jak obejít blokování webů

Vitalia.cz: Dnešní patolog o mrtvolu téměř nezavadí

Dnešní patolog o mrtvolu téměř nezavadí

Lupa.cz: Válka e-shopů. Alza končí s Heurekou

Válka e-shopů. Alza končí s Heurekou

Podnikatel.cz: Rošáda v živnostech. Týká se vás?

Rošáda v živnostech. Týká se vás?

DigiZone.cz: Konec geoblokace online médií?

Konec geoblokace online médií?

Lupa.cz: Zaplatíme ti, když ti seženeme práci

Zaplatíme ti, když ti seženeme práci

Vitalia.cz: Sója a rakovina

Sója a rakovina

DigiZone.cz: UPC umí televizi sedm dní nazpět

UPC umí televizi sedm dní nazpět

Vitalia.cz: SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

SÚKL: vakcíny jsou bezpečné a s autismem nesouvisí

Vitalia.cz: Muži kouří 24 cigaret denně, ženy o dost míň

Muži kouří 24 cigaret denně, ženy o dost míň

DigiZone.cz: Mafra varuje před stíháním za pomluvu

Mafra varuje před stíháním za pomluvu

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

Podnikatel.cz: Proměny stavebnice Seva. Znáte ji?

Proměny stavebnice Seva. Znáte ji?

Vitalia.cz: Martin Kasa o byznysu s léky

Martin Kasa o byznysu s léky

DigiZone.cz: Živí mrtví budou na AMC koncem srpna

Živí mrtví budou na AMC koncem srpna