IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

STUN, TURN, ICE (ou comment traverser un NAT pour une connectivité P2P). Des infos ?


Sujet :

Développement

  1. #1
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut STUN, TURN, ICE (ou comment traverser un NAT pour une connectivité P2P). Des infos ?
    Bonjour à tous,

    suite à la lecture d'une news à propos de Jingle (ie. les specs pour ajouter du multiémdia au protocle XMPP), j'ai (re)découvert l'existence de techniques pour pouvoir traverser un NAT sans la classique redirection manuelle de ports.

    Sauf que là où je croyais encore que dans la majorité des cas ce genre de 'workaround' ne fonctionnait que rarement dans la 'vraie vie', il semblerait qu'au contraire ce genre de technique marche désormais dans la majorité des cas.

    Les acronymes qui reviennent souvent sont les suivants:
    - Interactive Connectivity Establishment (ICE), qui semble regrouper:
    - Simple Traversal of User Datagram Protocol through NAT (STUN), ce qui semble être l'utilisation des 'workaround' pour traverser les NAT
    - Traversal Using Relay NAT (TURN), la notion de serveur relais comme solution de 'fallback'.

    D'après ce que j'ai compris, ce sont des techniques plus ou moins complémentaires qu'il convient d'utiliser en parallèle si on veut maximiser les chances de succès.

    D'où ma question: même si on trouve de-ci de-là quelques infos parcellaires, quelqu'un aurait-il par hasard des liens vers des articles et autres descriptions techniques (un poil moins denses que les draft IETF ) qui font le tour complet de la question ?

    Question implémentations, j'ai déjà quelques noms (stun4j, reTurn), mais je n'ai encore pas eu le temps de m'y plonger sérieusement. Eventuellement si quelqu'un connaît des librairies (LGPL) qui implémentent déjà ce genre de mécanisme, en Java, et facilement abordables/utilisables, je serais preneur.

    Enfin, tout retour d'expérience (avantages/inconvénients) serait également plus que bienvenu.

    Merci d'avance
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Salut, TURN et STUN, je crois que c'est plus ou moins la même chose, et ça permets à un PC de connaitre son IP publique et son port source natté, c'est utilisé par exemple pour SIP (VoIP). ICE, je connais pas, mais pour du P2P, tu as aussi le protocole UPnP qui permets à ton client de négocier l'ouverture de ports avec ton routeur. Sinon, sur les stateful firewall, tu as aussi pas mal de "nat helper", qui analysent les protocoles afin d'ouvrir les bons port, comme conntrack sous linux, NBAR sous cisco...

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    salut,

    ... et tout d'abord merci pour ta réponse.

    Effectivement, une des fonctionnalités de TUN et STUN est de pouvoir connaître l'IP publique d'un ordinateur derrière un NAT. Si j'ai bien compris la 'logique', c'est une simple connexion à un serveur tiers (public) qui lui 'verra' l'IP publique du demandeur et pourra lui renvoyer en réponse.

    Pour l'uPnp, les statefull firewall, Nat helper, etc... ça ne m'intéresse pas trop car ce sont des solutions pour la plupart:
    - soit destinées à des équipements précis
    - soit nécessitant un dialogue avec l'OS

    ... qui ne conviennent ni pour une implémentation que je veux générique et qui marcherait pour 90% des cas (pour une connexion résidentielle, avec box ADSL ou apparentée), et pour des Applets Java non signées qui ne peuvent s'adresser directement à l'OS.

    D'où la solution STUN qui finalement tient plus du 'workaround' pour contourner deux NATs. En gros:
    - le client A initie la connexion avec un serveur X
    - son NAT (A') ouvre alors un port Z en sortie pour A
    - le client B vient alors utiliser le port Z pour initier une connexion directe avec A
    - le NAT (A') laisse passer le flux, pensant que c'est toujours X qui continue à papoter avec A).

    Si du monde a déjà tripoté a ce genre de techno, a un retour d'expérience sur le sujet, je serais hyper super intéressé
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Quelle API pour faire du ICE Nat Traversal en Java?
    Bonjour,

    Je serais intéressé de savoir si vous avez progressé dans votre recherche : "Quelle API pour faire du ICE Nat Traversal en Java?"

    Je cherche à implémenter cette fonctionnalité entre deux PC derrière du NAT classique (type livebox) et je me pose les même questions que vous!

    Merci pour votre aide,

    Renaud

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Salut, l'uPnP est de plus en plus utilisé: Disponible sur la freebox ainsi que nombreuses autres BOX et routeurs modernes destinés aux particuliers (ex gamme linksys, ou le firmware dd-wrt)
    De nombreuses applications utilisent le uPnP (µtorrent, Emule,...).

    Sinon, pour faire un serveur stun, suffi d'utiliser du socket: Tu lances une connexion vers un serveur, celui ci note l'IPsource et le port source, puis le renvoi dans le payload (data) au client, celui ci pourra donc connaitre son port source et son IP publique. Cependant cela ne fonctionne pas avec tous les types de NAT, notemment si la connexion sur un port de l'IP publique affecté à un client est autorisé depuis une autre IP publique.
    CF:
    http://en.wikipedia.org/wiki/Network...n#Types_of_NAT

Discussions similaires

  1. Comment traverser un NAT
    Par Invité dans le forum Développement
    Réponses: 10
    Dernier message: 04/01/2011, 15h52
  2. Réponses: 1
    Dernier message: 18/06/2007, 16h10
  3. comment creer un backgroundWorker pour une methode ?
    Par alaa_85 dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/06/2007, 21h43
  4. [débutant] comment récuperer un int pour une hashtable
    Par mariafan dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 12/01/2007, 23h18
  5. [MySQL] Comment s'y prendre pour une expiration après deux jours ?
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/01/2006, 20h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo