PDA

Visualizza la versione completa : [C++] NAT Traversal


Jake7zDunn
03-08-2014, 22:28
Sto sviluppando un semplice videogame multiplayer in c++ che usa il protocollo UDP per connettersi ai servers.
Il problema è che se il server sta su un IP pubblico funziona tutto(anche i giocatori dietro NAT si riescono a connettere) mentre se sta su un IP condiviso(dietro NAT) non funziona. La mia idea era quella di permettere anche ai giocatori di aprire dei server.
Giochi come crysis o altri permettono di aprire server anche a chi non ha IP pubblico usando NAT negotiation/NAT traversal ma non ho trovato molte informazioni.
Un'idea che mi era venuta era quella di creare un master-server su IP pubblico che instrada le connessioni server-client ma aumenterebbe in modo esponenziale il ping.

MItaly
03-08-2014, 23:21
Il sistema più semplice credo sia usare UPnP per chiedere al NAT di effettuare il port forwarding richiesto - sempre ovviamente che il NAT non sia configurato per non dare retta alle richieste UPnP; in alternativa, è possibile provare ad effettuare l'UDP hole punching (http://en.wikipedia.org/wiki/UDP_hole_punching), ma non è banalissimo e non è detto che funzioni sempre. In ultima analisi, il metodo che funziona sempre correttamente è chiedere all'utente di effettuare il port forwarding o far usare a tutti i partecipanti una VPN zero-config come Hamachi.

Jake7zDunn
04-08-2014, 12:20
ci avevo pensato ad una VPN, però vorrei che si autoconfigurasse quando si installa il gioco, senza che l'utente faccia nulla. Avevo trovato tinc (http://www.tinc-vpn.org/) che funziona da linea di comando, ma non riesco a configurarlo, o almeno configuro tutto, poi scrivo da linea di comando tincd -n netname e mi appare :


tinc.netname service installed
tinc.netname service started


poi vado nel taskmanager>servizi e trovo il servisio tinc.netname con stato interrotto, perciò non capisco come usarlo

Loading