Zpět na seznam článků     Číst komentáře (11)     Verze pro tisk

chownat - je libo tunel?

Autor: compman   
23.5.2006

Nevíte co je to p2p? Chtěli byste se o něm něco více dovědět a i v praxi vyzkoušet? Potom zkuste použít tento malý a jednoduchý, avšak velice šikovný prográmek :)


Internet je sice celosvětová síť propojující miliony počítačů, ale ne všichni do něj mají "neomezený" přístup. V poslední době je trendem používání tzv. NATu (Network Adress Translation), který umožňuje připojit více PC do Internetu pod jednou IP, která vlastně patří routeru, na kterém běží NAT. Jde především o wifi sítě, apod.
Uživatelé takovýchto PC sice mají jistý přístup do internetu, ale mohou přijímat data pouze, pokud si je "vyžádají". Pokud totiž klientský PC (za NATem) neodešle nic přes router, avšak na router se pokusí nějaký jiný server z vnějšku poslat packet(y) právě na klienta, router to nepřepošle, protože nebude vědět, komu z klientů má tento packet přeposlat. Proto se dva počítače, které jsou každý za svým NATem nemohou propojit, protože na sebe vlastně "nevidí". Tuto situaci navíc komplikují tzv. stavové firewally (bývají většinou na routerech s Linuxem), které umožňují spojení pouze ven, dovnitř pouze jako odpověď od dané IP adresy na předpokládaném portu a s příslušným "sequence number", které si routerův kernel (jádro) pamatuje a podle toho mu přidělí jistý identifikační kód.
Více o stavových firewallech najdete třeba na jedné z manuálových stránek stavového linuxového firewallu Netfilter.

p2p?
Technologie peer-to-peer se narozdíl od "serverového způsobu spojení" vyznačuje tím, že pro propojení více PC dohromady nepotřebuje žádný centrální server (teď mi to připomnělo Arpanet) Představte si například malou kancelářskou LAN ..

1) serverový způsob sdílení síťových prostředků
Existuje jakýsi server, přes který se třeba celá firemní síť připojuje například do Internetu. Na tom serveru je připojeno několik tiskáren, faxů, skenerů a bůh ví co ještě. Když si tak bude chtít nějaký klient ve firemní síti něco vytisknout, pošle to serveru, ten to zpracuje a vytiskne. Takto se k serveru může připojovat více uživatelů zároveň a využívat jeho periferie.

2) p2p sdílení síťových prostředků
Exisuje však i jiný způsob, využívaný častěji v domácnostech. Představte si tři počítače v síti, navzájem propojené .. třeba přes ethernet - přes switch. PC1 vlastní tiskárnu, PC2 skener a PC3 je např. nějakou databází. Pokud si bude chtít PC2 něco vytisknout, pošle to na PC1 a ten už si s tím poradí. V tomto případě se z PC1 stává na chvíli server a z PC2 zase klient. Pokud se bude chtít PC1 na něco podívat do databáze na PC3, jednodušše se na něj napojí a PC3 tato data poskytne. Teď se z PC1 stal klient a z PC3 server, který tato data poskytuje. Obecně lze říci, že klient v p2p síti je ten, který začína spojení a "něco chce", server pak ten, který "něco poskytne". Klientem a serverem v těchto sítích tak může být jakýkoli počítač pripojený do ní, který "má co nabídnout". Jak je vidět, je tato síť založena na vzájemné "symbióze" a počítače jsou z pohledu uživatele propojeny přímo, ne přes server.
P2P však není jen záležitostí intranetů. Lze jej použít vlastně všude, kde je tento druh spojení podporován.

Jak využít p2p v Internetu?
Dobrá otázka :) Jak jsem již psal, p2p lze použít všude, pokud ho podporují zařízení, která mají veřejnou IP a zprostředkovávají klientovi připojení do další sítě s cílovým PC (do Internetu), tzn. valná většina dnešních routerů.
Možná zná někdo z vás program Hamachi, který tato spojení zprostředkovává za pomoci externího serveru s veřejnou IP. Klienti tak ani nemusí prozatím znát navzájem své IP adresy (IP adresy svých "výchozích bran" do Internetu), stačí jim IP toho serveru, na který se klienti připojí a ten už jim za pomoci odpovědí zprostředkuje p2p spojení. Data v takto vytvořené virtuální síti se neposílají přes onen server, nýbrž přímo mezi klienty (čili p2p).

chownat - ano či ne?
V případě navazování spojení přes server musí vlastně klient 1 poslat navazovací packety na ten server (nejsou to packety navazující spojeni mezi klienty, ale pouze jakýsi příkaz pro server, aby klienta 1 propojil s jiným klientem, již připojeným na server), který pošle zase jiné packety klientovi 2, aby se spojil s klientem 1 na příslušném portu...atd.
Toto navazování může být docela pomalé, zvláště, je-li server na druhé straně světa. Při "prvním" navazování by to ani tolik nevadilo (hra nám ještě neběží), ale po vícesekundovém výpadku spojení se navazovací procedura musí opakovat znova. A to je už při samotném hraní docela nepříjemný defekt, protože se navazuje znova přes server na druhé straně Zeměkoule, který má vůči naší pozici "astronomické pingy". Ty se ještě musí několikrát vynásobit, protože spojení nenavazuje jeden packet a cesta je dvojnásobná (PC1 <> server <> PC2). Zvláště nepříjemné, pokud onen kamarád bydlí přes ulici :)

Mnohem přijatelnější řešení mi připadne nepoužít tento server vůbec. A to jsem se opravdu nezbláznil - ono to jde :). A to zmiňovaným programem.

Jak to teda funguje?
Tuhle otázku jsem si položil hned jak jsem o tomto programu uslyšel. Přesto vysvětlení bylo až na konci, já ho záměrně dávám na začátek. Žádná kouzla v tom nejsou :)

PC1 má interní IP 192.168.1.50 a gateway (výchozí brána) má veřejnou IP 212.194.11.22
PC2 má interní IP 10.1.1.50 a gateway má veřejnou IP 212.194.88.99

1) PC1 začne na gateway 212.194.88.99 a na port 2222 UDP posílat packety požadující navázání spojení, ta je však díky stavovému firewallu nepustí dále, protože nikdo z jeho sítě o ně nepožádal.
2) PC2 začne na gateway 212.194.11.22 na port 2222 UDP posílat také tyto packety, a to celou akci spustí
3) gateway 212.194.11.22 usoudí, že příchozí packety z 212.194.88.99 jsou odpovědi na ty, které posílá PC1 a taky tyto "odpovědi" přesměruje na 192.168.1.50 v interní síti. Totéž i 212.194.88.99, protože si myslí, že packety z 212.194.11.22 jsou odpovědi na "volání" od PC2 a tak tyto odpovědi přesměruje do interní sítě na 10.1.1.50.


Výsledkem je plné p2p spojení na UDP portu 2222. Přes něj můžete tunelovat lecos - i TCP komunikaci. Možná se ptáte, proč nejde takto propojit přímo i TCP komunikace. Vvysvětlení je prosté - TCP spojení se navazuje několika packety (SYN, SYN_ACK, ACK) a proto by spojení nešlo tak jednodušše "zfalšovat".
A jaké to má zápory? Inu, uživatelé obou PC se nejdříve nějak musejí domluvit, na jakém UDP portu budou komunikovat a prozradit si navzájem své IP adresy (IP adresy jejich NATů). Dále je tu problém asi zásadní - existuje sice i verze pro windows, ale v docela zastaralé verzi s mnoha bugy, viz. changelog.

Použití programu chownat
Že jste to vy, tak vám přiložím i malý příklad :)
Opět předpokládáme, že se jedná o počítače za NATem (každý za svým) s IP adresama z minulého příkladu. Na PC1 běží webový server na TCP portu 80 ,ale PC2 se k němu připojit nemůže, protože PC1 nemá veřejnou IP. Proto vytvoříme tunel.

PC1: ./chownat.pl -d -s 80 212.194.88.99 //PC1 bude přístupný pro 212.194.88.99 na UDP portu 2222 (defaultní nastavení - lze změnit - viz. níže) směrovaným na TCP port 80 na lokálním stroji.

PC2: ./chownat.pl -d -c 8000 212.194.11.22 //PC2 se připojí ze zdrojového portu TCP 8000 tunelovaným přes UDP port 2222 na 212.194.11.22

Jelikož NATy routují vše na portu 2222 UDP na naše cílové mašiny v intranetu, spojení je vlastně uzavřeno a data mohou téci :).
Pozn.: pokud používáte verzi pro windows, tak misto ./chownat.pl dáte samozřejmě chownat.exe.
Onen port 2222 UDP lze změnit jistým parametrem, ale ten si budete muset zjistit sami....čímž jsem vás chtěl přimnět k přečtení "man chownat.pl" nebo "chownat.pl --help" pod linuxem a "chownat.exe /?" nebo jen "chownat.exe" (bez parametrů) pod windowsem :)


Zdroje: informace v mém mozku (ano, tento článek jsem nepřeložil, ale fakt vymyslel :) ), kromě příkladu, který byl přeložen. Ovšem musím poděkovat strejdovi Googlovi, protože bez jeho pomoci bych do hlavy tyto informace v dobách minulých asi nedostal :)

Odkazy: Domovská stránka projektu ; Google

Co říci závěrem? Šťastné tunelování! :)


Váš vyčerpaný compman :)


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 0/0

1  2  3  4  5    
(známkování jako ve škole)