Ne, že by nebyly řešitelné, ale nikdy to není ono. Zvláště pak brzdí malé startupy a jiné oss projekty, kde autoři nejsou schopni zajistit kvalitní infrastrukturu ve formě množství relay serverů.
Jinak od té doby co Microsoft přebral Skype, tak uživatelé z veřejnou IP už nefungují jako supernody, tuto funkci plně převzaly vlastní servery Microsoftu. Nějaký OSS projekt jim v tomto nemůže konkurovat, protože nemá takové příjmy na provoz této infrastruktury, a proto musí spoléhat na konektivitu svých uživatelů.
Jinak pěkně vysvětlené formy NATu včetně metod jejich obcházení je zde (anglicky):
http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf
Když by někdo chtěl rozjet novou sociální síť a využít p2p konektivitu uživatelů, tak nemůže, protože NAT. NAT zvýhodňuje aplikace typu klient-server, čímž deformuje tržní prostředí, protože tento typ aplikace představuje dodatečné náklady a povinnosti pro provozovatele (jako je logování) a navíc uživatelé ztrácí jistou míru soukromí a anonymity. Navíc vede k tomu, že data nejsou uložena na nosiči fyzicky vlastněném uživatelem, takže poskytovatel hostingu také částečně nese odpovědnost za jejich obsah či je může zneužít za účelem cílené reklamy. Třeba taková Diaspora byl zajímavý startup, který bohužel úplně nevyšel. Ale představme si facebook, kde by si lidi sami spravovali svoji infrastruktru, něco co není pod kontrolou jedné firmy a jejich hloupých podmínek (zákaz fotek kojících matek, protože obsahují vyobrazení bradavky...).
Ale pod pojmem startup nemusíme nutně vidět jenom IT záležitost, je to jenom buzzword pro začínající firmu. Kdejaký živnostník by ušetřil, kdyby si mohl z domu rozjet svůj malý servřík se svými stánkami nabízející jeho produkty. A mnohým by to bohatě postačovalo.
Ale teď je čas dát si menší visual novel o sociálních sítích:
http://my.pages.de/dsn-vn/
;)
On je spíš problém pro případné tvůrce softwaru který by toto zjednodušil. Ideální by bylo, kdyby šlo vytváře software, který by umožňoval vynutit aby uživatelé sdíleli svá data (třeba veřejné stránky) a přitom sami nemuseli řešit technické detaily. Samozřejmě že relativně malý poplatek si může každý pořídit VPS, ale jak donutíte lidi aby si to zařídili všichni jenom proto, že vaše aplikace toto potřebuje ke správnému fungování?
Předpokládejme že BFU nahodí vygenerované stránky do adresáře který pojede u něho z komput, ty se někam párkát replikují a něčím se to bude směrovat na právě běžící instanci. Všechny IP musí být veřejné, nebo lépe řečeno, musí mít přidělenu kombinaci IP a port které budou neměnné a poběží na nich daná služba.
Ano, je pravda, že prakticky by běžnému uživateli stačilo řekněme že tak maximálně 16 portů, ale i tak vyhradit je pro 4096 uživatelů bude činit problémy. Navíc konzumní zboží jako herní konzole nabízí dodatečnou funkcionalitu plnohodnotného online hraní pouze tehdy, pokud si nějak zajistí port a adresu. Tento stav je dlouhodobě neudržitelný, protože takových zařízení bude jen přibývat.
Takže pokud dnes chci POUZE webové rozhraní pro bittorrent klienta, ssh a abych si to mohl ovládat z práce, vzdálenou plochu a nějaké to VoIP, tak později budu třeba chtít aby mi mikrovlná trouba ohřála večeři když jí aktivuji mobilem při odemykání vhochodových dveří, abych nemusel čekat ty dvě minuty. To je samozřejmě hloupý případ, ale právě takovýchto chujovin bude přibývat.
Opět se to samozřejmě dá řešit protokolem který poběží na jednom portu, ale to bude fungovat pouze tehdy, pokud se NAT bude chovat slušně, což u symetrického NATu nehrozí. Full cone NAT se samozřejmě bude chovat ještě dobře a dokud takových magorů nebude hodně, tak to fungovat bude. JENOM to přidává další starosti programátorům, protože neexistuje jednoduché řešení daného problému.
Navíc ono řešení viz. pdf výše bude fungovat i pro symetrické NATy, pokud si tedy seženete dva servery co prostřelí ty díry a váš ISP nebude mít velmi exotický hardware. Ale opět - knihovna proto neexistuje, a já nechci programovat vlastní bastl jenom proto, že neexistuje standardní neplacené řešení které by pokrylo i tuto metodu jak se dostat přes NAT. Vím sice o placené NAT traversal knihovně která toto nejspíše dělá a kde ta firma nabízí i možnost pronájmu TURN relay serverů pro těch pár uživateků u kterých nepomáha ani multi hole punching protože symetrický NAT generuje přidělené porty náhodně, ale to není řešení třeba pro open source projekty.