Tunnel UDP + TCP

Forum sur la sécurité des réseaux, la configuration des firewalls, la mise en place de protections contre les attaques, de DMZ, de systèmes anti-intrusion ...

Modérateur: modos Ixus

Tunnel UDP + TCP

Messagepar psycofdj » 01 Août 2009 13:34

Bonjour à tous,

Je me permets de vous demander de l'aide pour tenter de résoudre un problème sur lequel je butte depuis plus d'une semaine.

J'utilise un hotspot NeufWifi publique et ne parviens pas à me connecter à mon jeu préféré, StarCraft qui utilise, corrigez moi si je me trompe, deux canaux de communication, le TCP 6112 (pour Battle.net) et l'UDP 6112 (pour le jeu lui même).
D'après ce que j'ai pu comprendre, la NeufBox qui partage ce wifi public est assez restrictive puisqu'elle semble bloquer tout trafic UDP et ne permet pas non plus le TCP sur le port 6112.

Par ailleurs, je possède un serveur dédibox qui tourne sous linux et je compte bien l'utiliser pour passer outre les limitations de la NeufBox.

Avant d'aller plus loin, notez que je ne suis pas très familier avec tout ce qui à trait aux réseaux. Pardonnez moi donc si je pose une question stupide ou si je fais un contre-sens.


J'ai déjà essayé pas mal de choses pour résoudre ce problème, voici un petit résumé :

Test 1 :
Installation d'un serveur socks 5 sur la dédibox, ici "danted" + Utilisation de "Proxifier" pour socksifier Starcraft coté client.
Résultat :
Dans cette configuration, Starcraft parvient à se connecter à battle.net (donc TCP:6112 OK) mais me balance un message comme quoi mon port UDP:6112 est fermé, m'avertissant ainsi que je pourrait tchatter mais pas jouer.
Effectivement, si j'essaye de me connecter à la main à un client UDP hébergé derriere la box, ca ne marche pas. (ici un nc -u -l -p 6112)
Question : est ce que dans la théorie, un serveur socks V5 correctement configuré devrait me permettre de me connecter à mon netcat ? Est-ce les communications entre le client et le server socks se font uniquement en TCP (donc avec encapsulation du traffic UDP) ou est ce que 2 canaux sont créer, un TCP et un UDP, ce qui expliquerait pourquoi cela ne marche pas.

Test 2 :
J'ai ensuite essayé une méthode plus "manuelle".
L'idée ici est de lancer deux tunnels entre mon client et mon serveur pour faire passer le traffic TCP:6112 et UDP:6112 sur des canaux ouverts, respectivement le TCP:10000 et le TCP:8080.

Coté serveur, je lance deux "ponts" de communication :
Code: Tout sélectionner
nc -l -p 10000 < /tmp/fifo | nc europe.battle.net 6112 > /tmp/fifo
nc -l -p 8080 < /tmp/fifo2 | nc -u europe.battle.net 6112 > /tmp/fifo2

Coté client A (pc intermédiare sous linux):
Code: Tout sélectionner
nc -l -p 6112 < /tmp/fifo | nc ip_de_mon_server 10000 > /tmp/fifo
nc -u -l -p 6112 < /tmp/fifo2 | nc ip_de_mon_server 8080 > /tmp/fifo


Coté client B (pc qui lance starcraft):
J'ai hacké le hosts pour que europe.battle.net point sur la machine "client A"

Résultat Pareil que pour la configuration 1. La connexion à battle.net est possible (ce qui prouve qu'au moins un des deux tunnels fonctionne) mais le traffic udp est toujours bloqué.
A noter tout de même, j'ai pu me connecter une fois sans qu'il me dise que l'udp ne marchait pas, donc potentiellement connecter en mode "joueur" mais je n'ai pas pu rejoindre de partie. CE qui est troublant c'est que je n'avais strictement rien changé à ma configuration pour avoir cette connexion "miraculeuse"

Test 3 :
Enfin, j'ai essayé sensiblement là même chose mais avec le binaire "socat".
Coté server :
Code: Tout sélectionner
socat -v -d -d -d tcp-listen:8080,reuseaddr,fork udp:europe.battle.net:6112
socat -v -d -d -d tcp-listen:10000,reuseaddr,fork tcp:europe.battle.net:6112

Coté Client:
Code: Tout sélectionner
socat -v -d -d -d udp-listen:6112 tcp:ip_de_mon_server:8080,reuseaddr,fork
socat -v -d -d -d tcp-listen:6112,reuseaddr,fork tcp:ip_de_mon_server:10000

Résultat : identiques à 1 et 2. Mais ici, grâce a ses options de dump de trafic sur stdout, je me suis rendu compte que le traffic TCP sur le client et le serveur était identique (donc l'information n'avais pas été dénaturée par le tunnel). Par contre, pour ce qui est du trafic UDP, l'information était bien complète à l'arrivée mais avait changé de forme. Sur le client (machine A) je voyais 3 messages (un espèce de message Hello Server), qui arrivait sur le serveur sous la forme d'un seul message concaténant les 3 originaux (genre "Hello Server Hello Server Hello Server")
Peut être à-t-on ici un début de réponse possible pour expliquer pourquoi battle.net considère que mon port UDP est fermé (il n'arrive pas à recevoir son "message" de test).
C'est là où mes connaissances en réseau me font défaut. Il doit y avoir une explication simple à ce changement de "forme" du message qui doit prendre sa source dans les spécifications des protocoles TCP et UDP mais je ne parviens pas à comprendre et encore moins à trouver une solution.

A noter également, chose intéressante, lorsque j'utilise "PingFu", une solution commerciale (en trial) pour bypasser les firewall, tout fonctionne correctement... mais à 38€ les 3 mois d'abonnement, je persévère à vouloir y arriver tout seul ! En tout cas, ça montre bien que c'est possible.

Qu'en pensez vous ? Que me conseillerez vous de faire ? Y a-t-il une autre solution à explorer ?
Merci d'avance pour votre aide.

Réseaux-lument vôtre,
Psy
psycofdj
Matelot
Matelot
 
Messages: 1
Inscrit le: 01 Août 2009 13:29

Retour vers Sécurité et réseaux

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron