NAT traversal - jak na to?

ezdiy

Re:NAT traversal - jak na to?
« Odpověď #15 kdy: 19. 06. 2012, 11:34:09 »
nyud je klasika, nicmene pouha public reverzni proxy, podobne jako ruzne anonymizery. neni to p2p storage ve smyslu ze kazdej dela coral cache node, ale musis byt v jistem univerzitnim kabalu kde se ten protokol pouziva.

mimochodem, akamai pouziva neco velmi podobneho coralu na jejich cdn, takze to uz zdaleka neni jen akademicka hracka.

jinak pwnat nepotrebuje *zadny* centralni bod. jelikoz delas overlay network, ukladas si proste nody s flagem ze maji verejnou ip a port. oni ti naz5 pak tvoji IP bonznou.

problem pwnatu spociva v tom ze pod masoxem/luniksem je problematicke posilat zmrsene icmp na kterejch to stoji, zkratka musis resit implementacni detaily pod kazdym os.

pro korektni implementaci solidniho p2p protokolu bych take potreboval nejakeho hybrida pwnat/libutp, nicmene neco rozumne fungujiciho sem nenasel, takze prznim stary dobry torrent...

pokud budes patlat v C neco ve stylu vyse uvedeneho (pokud mozno jako libutp kde je vse abstraktni, IO si musi delat uzivatel sam), hod to prosim nekam na github, docela by me to zajimalo.


Re:NAT traversal - jak na to?
« Odpověď #16 kdy: 19. 06. 2012, 17:08:26 »
K původní otázce: Co takhle použít IPv6 a ošetřit si případné zapnutí Teredo klienta. Teredo má veškerý NAT traversal v sobě vyřešený, takže aplikace jen otevře šestkový soket a nestará se.
Jen je potřeba nějak vyřešit objevování Teredo adres protistran.

Re:NAT traversal - jak na to?
« Odpověď #17 kdy: 19. 06. 2012, 22:46:07 »
Nějak jsem nepochopil dotaz tazatele, ale s NATem mám následující zkušenosti. Psal jsem si vlastní systém pro VPN ve stylu N2N, zejména pro přecházení mezi NATy. Bohužel to není tak snadný, kromě tedy nutnosti mít centrální bod na udržování směrovacích  tabulek (MAC: IP: port). Vlastní VPNka fungovala jednoduše. z Tap přišel paket a pokud aplikace věděla, kam ho přeposlat, tak ho přeposlala, pokud to nevěděla, poslala ho na centrální bod. Ten jej přijal, k paketu přibalil IP adresu a port odkud paked přišel a rozeslal ho všem přihlášeným klientům. Klienti si pak k MAC adrese odesílatele přiřadili IP adresu a port. Pokud chtěli komunikovat obráceně, udělali totéž a postupně se takto prorazila díra. Přesný postup je trochu delší na psaní.

No a ty problémy: Dost často narážím na symetrické NATy. Tam vám nepomůže ani svěcená voda. Symetrický NAT přidělí port (a někdy IP adresu) různou i stejným klientům, pokud jejich pakety směřují na jiné cíle v internetu. Pak se díra nedá vytvořit. Ten můj systém si s tím poradí, ale bohužel to pak všechno posílá přes centrální bod.

Co se tereda týče, tak platí totéž u symetrický natů se na dvouch teredo IPv6 adresách nedomluvíte. Prostě se neuvidí, nepingají, netraceroutují.  Přes centrální bod si to nepošlou. Zkoušel jsem miredo vůči teredu ve windows. Pokud dám teredo vůči freenet6, tak bez problémů. Přes třetí stranu se dvě tereda spojí, ale přímo ne (platí pro symetrické naty)

A kde jsem viděl symetrické naty?  Seznamácká firemní síť,... a třeba mobilní síť Vodafone. Zpravidla velké NATované sítě.

Waseihou

Re:NAT traversal - jak na to?
« Odpověď #18 kdy: 20. 06. 2012, 00:05:00 »
Zatím si hraju z libnice která se zdá jako nejschůdnější varianta, cosi jsem zkompiloval ale nic to nedělá, plně to zatím nechápu. No po zběžném nahlédnutí se zdá že se dovede pokusit použít i IPv6 a trochu snad laškuje i s UPnP, alespoň jsem tam něco s tímto nápisem myslím viděl, ale nevím přesně.

Další c knihovna co prý tohle umí velmi dobře řešit je

PJNATH: http://www.pjsip.org/pjnath/docs/html/index.htm

která taky řeší ICE: http://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment

ale tam už ty examply nechápu vůbec, ale pochopil jsem že pokud selžou všechny metody tak je třeba použít jakýsi TURN server který musí mít veřejnou IP adresu a slouží právě k přeposílání těch paketů mezi dvěma uzly které jsou za tou nejhorší variantou NATu. Takovéto řešení má myslím Skype který všechny případy kdy to jde taky spojí tou nejlepší možnou variantou, a kde to nejde tak použije svoje servery jako mezičlánek.

Neví někdo jak tyto knihovny použít? Google nenašel žádný dostatečně jednoduchý example ani tutorial...

Sakra je rok 2012 a stále není uspokojivě vyřešen problém jak spojit dva LIBOVOLNÉ počítače v internetu? No to snad ne! Nebo bohužel ano :(

Waseihou

Re:NAT traversal - jak na to?
« Odpověď #19 kdy: 20. 06. 2012, 00:18:05 »
No ještě prohledám api přímo pjsip: http://www.pjsip.org/

má to hodně zajímavé objekty součásti:
pjlib: http://www.pjsip.org/docs/latest-2/pjlib/docs/html/modules.htm
pjlib-util: http://www.pjsip.org/docs/latest/pjlib-util/docs/html/modules.htm


Rax

Re:NAT traversal - jak na to?
« Odpověď #20 kdy: 20. 06. 2012, 01:15:50 »
Sakra je rok 2012 a stále není uspokojivě vyřešen problém jak spojit dva LIBOVOLNÉ počítače v internetu?

NAT není internet.
V internetu se dají propojit dva libovolné počítače z principu funkce internetu a protokolu IP.

Waseihou

Re:NAT traversal - jak na to?
« Odpověď #21 kdy: 20. 06. 2012, 07:10:27 »
Ale za NATem je dnes tolik potenciálních uživatelů, že se bohužel nedá ignorovat. Bohužel. Zajímalo by mě kolik člověkohodin již muselo být vynaloženo na řešení tohoto "problému", a kolikrát třeba i v privátní sféře opakovaně vynalézat kolo. Komerční knihovny pro NAT traversal existují taky, včetně možnosti pronájmu TURN relay serververů pro zajištění plné konektivity. Pak se člověk nemůže divit úspěchu cyberlockerů, centralizované řešení má za této situace navrch.

Rax

Re:NAT traversal - jak na to?
« Odpověď #22 kdy: 20. 06. 2012, 09:36:15 »
Ale za NATem je dnes tolik potenciálních uživatelů, že se bohužel nedá ignorovat. Bohužel. Zajímalo by mě kolik člověkohodin již muselo být vynaloženo na řešení tohoto "problému", a kolikrát třeba i v privátní sféře opakovaně vynalézat kolo. Komerční knihovny pro NAT traversal existují taky, včetně možnosti pronájmu TURN relay serververů pro zajištění plné konektivity. Pak se člověk nemůže divit úspěchu cyberlockerů, centralizované řešení má za této situace navrch.

Vyplýtvalo se na to neuvěřitelné množství času a nic zaručeně spolehlivého neexistuje, dílčí úspěch je UPnP.
Psal jsem to dříve, amatér co je neschopen protunelovat IP:Port bude mít omezené služby, v DC++ tento tlak na uživatele fungoval skvěle a to byste se divil jak to najednou jde, když je potřeba stáhnout porno ;-)