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?

Našli jste v článku chybu?
Vitalia.cz: Tohle je Břicháč Tom, co zhubnul 27 kg

Tohle je Břicháč Tom, co zhubnul 27 kg

120na80.cz: Bonbon si schovejte na přistání

Bonbon si schovejte na přistání

DigiZone.cz: Sat novinky: Tec Time TV vysílá i v HD

Sat novinky: Tec Time TV vysílá i v HD

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?

Měšec.cz: Nový sazebník mBank radost nedělá

Nový sazebník mBank radost nedělá

Měšec.cz: Dodavatele energií porovnáte snáz

Dodavatele energií porovnáte snáz

Lupa.cz: Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Vodafone umí volání přes Wi-Fi. Z ciziny jako v ČR

Podnikatel.cz: Kanceláře jako kóje? Špatný vtip

Kanceláře jako kóje? Špatný vtip

Podnikatel.cz: Český zákazník nakupuje v čínských e-shopech

Český zákazník nakupuje v čínských e-shopech

Lupa.cz: IT scéna po brexitu: přijde exodus vývojářů?

IT scéna po brexitu: přijde exodus vývojářů?

120na80.cz: Nyní středně velké riziko

Nyní středně velké riziko

Podnikatel.cz: Nereaguje na výzvu ČOIky, zaplatí milion

Nereaguje na výzvu ČOIky, zaplatí milion

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Podnikatel.cz: Fotogalerie: Jesenka už má skoro 50 let

Fotogalerie: Jesenka už má skoro 50 let

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

DigiZone.cz: Přechod na DVB-T2? Kolem miliardy...

Přechod na DVB-T2? Kolem miliardy...

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

Lupa.cz: Japonská invaze. Proč SoftBank kupuje ARM?

Japonská invaze. Proč SoftBank kupuje ARM?

DigiZone.cz: Markíza HD a Dajto? U Digi TV asi minulost

Markíza HD a Dajto? U Digi TV asi minulost

Podnikatel.cz: Místa, kde hází podnikání klacky pod nohy

Místa, kde hází podnikání klacky pod nohy