[reseno] Router bypass (port forwarding, tunneling... sta?)

[reseno] Router bypass (port forwarding, tunneling... sta?)

offline
  • Igor Đorđević
  • Pridružio: 28 Sep 2007
  • Poruke: 39
  • Gde živiš: Bor, Srbija

Pozdrav svima Smile

Nisam nasao funkcionalni odgovor na netu (ili nisam znao sta tacno da trazim?), a kako nisam vican mreznim protokolima zamolio bih za pomoc iskusnije programere. Sta je problem? U pitanju je igra (Age of Empires 2, DirectX7, DirectPlay), koja za igranje preko neta (rutera) trazi otvorene (forward) portove od 2300 do 2400 (tcp/upd), i port 47624 (tcp). Najlakse je forwardovati potrebne portove, i nema zime - medjutim, ideja je da se vecem broju korisnika koji se ne snalaze sa podesavanjima routera omoguci online igranje bez glavobolje.

Kako programirati aplikaciju (klijent/server) koja moze omoguciti igranje bez potrebe za otvaranjem portova?

E sad, da ne bi neko rekao kako ne moze, da ne znam da moze ne bih ni pitao Wink Primer je program GameRanger, koji radi upravo to - i pored zatvorenih (tj. neprosledjenih) portova omogucava igranje bez ikakvih problema. Iako i na samom sajtu programa pise da ne znaci da ce uvek sve raditi kako treba, u velikom broju (mislim preko 90%) slucajeva korisnici koji inace ne mogu da igraju preko neta (zbog rutera ili raznih problema sa portovima), preko GameRanger-a igraju sasvim valjano.

Za one koji imaju iskustva sa mreznom komunikacijom i citanjem logova, prilazem Wireshark logove, uz objasnjenja.

(napomena - portovi nisu forwardovani)

GameRanger(start,idle,close).pcap -- pokrecemo aplikaciju GameRanger, ostavljamo je da radi, gasimo je.
GameRanger(start,idle,host,close).pcap -- pokrecemo aplikaciju GameRanger, ostavljamo je da radi, otvoramo novu sobu (host), gasimo aplikaciju. Prilikom otvaranja (host-ovanja) sobe aplikacija prijavi da portovi nisu otvoreni, i nudi par opcija medju kojima biramo "Continue" - bez obzira na obavestenje i na zatvorene portove, ipak sve radi kako treba,
GameRanger(host, play).pcap -- aplikacija vec radi, soba vec otvorena (host). Prikljucuje nam se drugi igrac, ukljucujemo Wireshark log-ovanje, pokrecemo igru (start, launch). Pojavljuje se meni igre na kom vidimo i drugog igraca (uspesno ostvarena konekcija i pored zatvorenih portova oba racunara).
GameRanger.pcap -- (isto kao prethodno, drugi primer) aplikacija vec radi, soba vec otvorena (host). Prikljucuje nam se drugi igrac, ukljucujemo Wireshark log-ovanje, pokrecemo igru (start, launch). Pojavljuje se meni igre na kom vidimo i drugog igraca (uspesno ostvarena konekcija i pored zatvorenih portova oba racunara).


Da li neko ima neku ideju kako se ovde ostvaruje komunikacija (iz prilozenih logova, ili iz iskustva..?), i kako da nesto slicno sami napravimo? Odgovaralo bi u C#, ali ni C++ nije problem, samo da nadjemo resenje Smile (mislim da je i GameRanger radjen u C++). Idealno bi bilo da se komunikacija odvija p2p (direktno izmedju igraca), a da eventualno server posluzi kao posrednik pri ostvarivanju konekcije.

Hvala unapred.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 30 Dec 2007
  • Poruke: 4759
  • Gde živiš: Niš

oni mogu da naprave nat translaciju,ali to ne volim baš , praktično
predstavlja firwall piercing Confused (ali je popularan team viewer i hamachi)

ako imaju uPNP ruter sam program ima opciju da otvori port
http://en.wikipedia.org/wiki/Universal_Plug_and_Play#External_links
http://opentools.homeip.net/dev-tools-for-upnp


uvek možete da napravite help dokument koji bi actually obučio
korisnike kako da forwarduju port.
ali je to van dometa percepcije Bebee Dol



offline
  • Igor Đorđević
  • Pridružio: 28 Sep 2007
  • Poruke: 39
  • Gde živiš: Bor, Srbija

Hvala na ukljucivanju u temu Smile

Prilozene linkove sam vec bio pregledao, mada ne znam zato se nisam duze zadrzao na ovim UPnP alatima... Bas cu sada da vidim cega tu ima Smile

Isprobavao sam bio pre toga raznorazne UPnP kodove se codeproject.com, ali nijednim se nisam usrecio. E sad, da li su oni nedovoljno dobro napisani, ili je moj ruter suntav (Huawei HG-510) ne znam, ali nijedan nije radio kako valja po pitanju UPnP-a.

EDIT: Eto, sad i ovaj "Device Spy" ne prikazuje moj ruter na listi UPnP uredjaja... Lista je prazna, i nakon ponovne pretrage Sad Slicno mi se desavalo i sa vec isprobavanim programima ili test aplikacijama, sto mi ne uliva mnogo poverenja u UPnP. Ni sa jednom UPnP aplikacijom moj ruter ne saradjuje kako treba, ali igranje preko GameRanger-a ne pravi nikakve probleme... E sad da li je tu UPnP bolje uklopljen, ili je po sredi nesto drugo, ne bih znao.

Gledajuci Wireshark logove, ocigledno je da se komunikacija nesmetano obavlja preko portova koji nisu otvoreni (barem ne dok im sam GameRanger nesto ne uradi). Na primeru fajla GameRanger(host, play).pcap, komunikacija ide preko mog 4190 porta, i porta 55246 drugog racunara (ovi portovi se iz primera u primer menjaju). Medjutim, sve vreme figurira port 16000 (u svim logovima), da li je to port preko koga GameRanger nesto radi, i sta...?

Inace imamo i previse dokumenata koji bukvalno sliku po sliku objasnjavaju forwardovanje portova, ali je zelja da se postupak pojednostavi - veliki je broj onih koji na samu pomisao da nesto treba da cackaju - jednostavno odustanu... A kad vec znamo da je moguce, onda da probamo da otkrijemo kako Smile A tu je i problem korisnika koji jednostavno ne mogu da forwarduju portove (npr. racunari u studentskim domovima, ogranicenim mrezama, itd.)

Da li je mozda (i kako) moguce komunikaciju sa potrebnog opsega portova preusmeriti na neki do default-u otvoren port, npr. 80, i koliko je to pametno? Napominjem da je u pitanju DirectX 7 (DirectPlay) igra, ukoliko je to uopste bitno za ovu problematiku.

Sa jedne strane, ovo se kosi sa zdravom logikom (automatsko pravljenje konekcijskih "rupa" bez naseg znanja) i otvara pitanje sigurnosti citavog sistema, ali sa druge strane vidimo da je moguce i veoma korisno (ukoliko se ne zloupotrebi... avaj).

offline
  • Pridružio: 30 Dec 2007
  • Poruke: 4759
  • Gde živiš: Niš

Mislim da nema hg510 ovu uPnP funkciju , nisam siguran nije dostupno uputstvo Confused

Ovi programi najverovatnije kreiraju VPN kanal/e
preko kojih se aktiviraju i izgledaju kao u LAN-u ove igrice Very Happy
ali ne koristeći čak upnp već prevazilaženje Nat sistema
http://en.wikipedia.org/wiki/NAT_traversal


dok se zasniva na OpenPlay protokolu ili ne ?
http://en.wikipedia.org/wiki/GameRanger
http://sourceforge.net/projects/openplay
http://developer.apple.com/opensource/internet/openplay/
ako tu ima nešto u src kako odrađuju vpn konekciju
ili tako nešto ili je dodato posebno Confused

u stvari u to doba cca2000 je bio dial-up i nije bilo potrebe za nekim majstorijama smešak

offline
  • Igor Đorđević
  • Pridružio: 28 Sep 2007
  • Poruke: 39
  • Gde živiš: Bor, Srbija

Jos jednom hvala na linkovima Smile

Pregledao sam primere i izgleda da nije ni to, ali mislim da sam nasao resenje - "UDP hole punching".

Ovo se cini idealnim Smile Za one koji nisu upoznati, samo ukratko pojasnjenje...

Imamo klijente A i B (igraci koji zele da igraju igru), i server S (javni server koji i inace hostuje lobije/sobe za igrace). Pre objasnjenja, prvo napomena - kada klijent posalje poruku preko odredjenog porta, on logicno ocekuje neki odgovor sa adrese na koju je poruku poslao - sto znaci da ovo ostavlja port otvorenim, i klijent osluskuje hoce li biti odgovara sa IP adrese na koju je poslao poruku. Kako se sad odvija komunikacija bez forwardovanja portova?

Oba klijenta (A i B) salju poruku serveru S i uspostavljaju komunikaciju sa serverom. Server S pamti IP adrese i portove sa kojih su poruke poslate (npr. A = 1.1.1.1:1000, B = 2.2.2.2:2000). Sada se desava glavna caka - server S nalozi klijentu A da posalje poruku klijentu B (1.1.1.1:1000 -> 2.2.2.2:2000). Klijent A salje poruku klijentu B, ali klijent B odbija da primi poruku jer ne ocekuje odgovor sa IP adrese klijenta A (a pritom port nije forwardovan). Medjutim, klijent A sada ocekuje poruku sa IP adrese klijenta B, ne znajuci da je ovaj poruku blokirao (klijent A osluskuje svoj port 1000, koji je ostao otvoren nakon slanja poruke). Server sada nalaze klijentu B da posalje poruku klijentu A (2.2.2.2:2000 -> 1.1.1.1:1000), i obzirom da je klijent A vec iscekivao odgovor sa adrese na koju je poslao svoju poruku, on prihvata poruku klijenta B kao odgovor na svoju prvobitno poslatu poruku (ne znajuci da je ta prva poruka blokirana).

Ovime je komunikacija i zvanicno uspostavljena - sada klijent B iscekuje odgovor klijenta A (klijent B zadrzava otvorenim svoj port 2000), i kada klijent A posalje novu poruku klijentu B on ce je ovoga puta prihvatiti (a zatim i obrnuto, klijent A ce prihvatiti poruku klijenta B). Server S vise ne figurira izmedju klijenata, i oni mogu medjusobno direktno da razmenjuju poruke koristeci svoje IP adrese i portove koji su automatski otvoreni (A = 1.1.1.1:1000, B = 2.2.2.2:2000).

I za ovo postoje situacije u kojima se mogu javiti propusti, ali mislim da ce nam ovo resiti veci deo problema, a za ostalo cemo se vec snalaziti u hodu.

Nadam se da ce ovo jos nekome biti od koristi, a ako neko vec ima iskustva sa ovime, neka se slobodno javi da nas upozori na moguce probleme i da ideje za njihovo resavanje Smile

Pozdrav svima, BugA Ziveli

Ko je trenutno na forumu
 

Ukupno su 736 korisnika na forumu :: 8 registrovanih, 1 sakriven i 727 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: cikadeda, Koridor, Marko Marković, marsovac 2, milenko crazy north, Milos82, Mixelotti, slonic_tonic