Hlavní navigace

Přelez, přeskoč a podlez NAT

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í.

Tweetni to Odměnte autora  Jak to funguje?

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?

       

Petr Krčmář

Petr Krčmář

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Vystudoval elektroniku se zaměřením na počítačové systémy, nyní se zabývá médii, především těmi elektronickými.

Ohodnoťte jako ve škole:
Průměrná známka 2,86
Tweetni to Odměnte autora  Jak to funguje?

Školení: Digitální Public Relations aneb PR sociálního věku

DW - Školení PPC
  • Jak se liší digitální PR oproti klasickému PR
  • Jak tvořit tiskové zprávy, aby těžili z digitálních možností
  • Jak monitorovat a vyhodnocovat vlastní i konkurenční PR
  • Příklady povedených i nepovedených PR komunikací a aktivit.

Detailní informace o školení s Danem Dočekalem »

       

Přehled názorů

hamachi
anonymní uživatel 20. 6. 2006 00:34
Nový
├ 
Re: hamachi
lyon 20. 6. 2006 08:43
Nový
├ 
Re: hamachi
ventYl 20. 6. 2006 10:06
Nový
├ 
Re: hamachi
Harvie 20. 6. 2006 11:27
Nový
│
├ 
Re: hamachi
disorder 20. 6. 2006 16:40
Nový
│
└ 
Re: hamachi
Petr Andrš 20. 6. 2006 17:39
Nový
│
 
├ 
Re: hamachi
Yokotashi 22. 6. 2006 02:24
Nový
│
 
│
└ 
Re: hamachi
Petr Andrš 22. 6. 2006 09:23
Nový
│
 
└ 
Re: hamachi
Alim 27. 6. 2006 19:03
Nový
└ 
Re: hamachi
HLJ 27. 10. 2012 15:00
Nový
... aneb Teredo reloaded
Michal Ludvig 20. 6. 2006 00:35
Nový
└ 
Re: ... aneb Teredo reloaded
Michal Ludvig 20. 6. 2006 00:44
Nový
... aneb Teredo reloaded
Michal Ludvig 20. 6. 2006 00:43
Nový
└ 
Re: ... aneb Teredo reloaded
someone 20. 6. 2006 07:45
Nový
 
└ 
Re: ... aneb Teredo reloaded
Hujerus III. 25. 6. 2006 17:22
Nový
Drobne upresnenie
Ondrej Mikle 20. 6. 2006 01:49
Nový
└ 
Re: Drobne upresnenie
phoenix 20. 6. 2006 08:20
Nový
 
├ 
Re: Drobne upresnenie
Michal Ludvig 20. 6. 2006 08:28
Nový
 
│
└ 
Re: Drobne upresnenie
Ondrej Mikle 20. 6. 2006 11:45
Nový
 
├ 
Re: Drobne upresnenie
Ondrej Mikle 20. 6. 2006 11:38
Nový
 
└ 
STUN
Keson 20. 6. 2006 18:03
Nový
jak za natem na ipv6?
jirib 20. 6. 2006 01:58
Nový
├ 
Re: jak za natem na ipv6?
jirib 20. 6. 2006 02:19
Nový
│
└ 
Re: jak za natem na ipv6?
jirib 20. 6. 2006 02:31
Nový
└ 
Re: jak za natem na ipv6?
Tomáš Šimek 20. 6. 2006 02:23
Nový
poradi paketu
Clock 20. 6. 2006 02:33
Nový
├ 
Re: poradi paketu
astray 20. 6. 2006 09:37
Nový
│
└ 
Re: poradi paketu
anonymní uživatel 20. 6. 2006 13:14
Nový
└ 
Re: poradi paketu
HKMaly 20. 6. 2006 23:33
Nový
 
└ 
Re: poradi paketu
MarSik 21. 6. 2006 14:48
Nový
anketa
jam 20. 6. 2006 08:35
Nový
└ 
Re: anketa
astray 20. 6. 2006 09:36
Nový
overhead
MarekM 20. 6. 2006 09:39
Nový
└ 
Re: overhead
phokz 20. 6. 2006 10:05
Nový
nat-traverse
helb 20. 6. 2006 10:14
Nový
udp hole punching
ventYl 20. 6. 2006 10:17
Nový
jak to ze to funguje?
Petrik 20. 6. 2006 11:40
Nový
├ 
Re: jak to ze to funguje?
Ondrej Mikle 20. 6. 2006 12:38
Nový
├ 
Re: jak to ze to funguje?
Ondrej 'SanTiago' Zajicek 20. 6. 2006 19:47
Nový
└ 
Re: jak to ze to funguje?
anonymní uživatel 21. 6. 2006 18:02
Nový
 
└ 
Re: jak to ze to funguje?
dejf 9. 3. 2007 00:09
Nový
:)
Efraim Sádlo 20. 6. 2006 13:33
Nový
Dva naty
:-) 20. 6. 2006 14:12
Nový
└ 
Re: Dva naty
neldor 20. 6. 2006 16:06
Nový
ssh
kolcon 20. 6. 2006 16:04
Nový
├ 
Re: ssh
razor 20. 6. 2006 17:59
Nový
└ 
Re: ssh
anonymní uživatel 22. 6. 2006 13:22
Nový
a jak na spojeni win - NAT - NAT - lin?
ktv 22. 6. 2006 22:57
Nový
└ 
Re: a jak na spojeni win - NAT - NAT - lin?
ffefafsefagsad 25. 8. 2010 13:01
Nový
Gitso
Gabo 17. 9. 2011 13:19
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem