Utilisateur:Gfa/STUN

De Wiki JabberFR
Aller à la navigation Aller à la recherche

Principe

STUN est un système client/serveur permettant de faire traverser les packets UDP au travers des routeurs NAT, très répandus ( inclus dans les "Box" d'opérateurs ADSL). Pour la VoIP avec Jabber (par exemple Jingle), afin de faire transiter la voix, les clients ont besoin d'établir une connexion entre eux. Hélas, dans la plupart des cas, les NAT gênent la négociation permettant d'établir cette connexion.

Voici une négociation gênée par un NAT

Demande :

<iq type="set"
    to="gfa@jabber.gnubox.net/PsiLaptop"
    id="aac1a" >
  <jingle xmlns="urn:xmpp:jingle:1"
          initiator="gfa85@im.apinc.org/Psi"
          action="session-initiate"
          sid="kQVmbTlykr8RnXFc" >
    <content creator="initiator"
             name="A"
             senders="both">
      <description xmlns="urn:xmpp:jingle:apps:rtp:1"
                   media="audio">
        <payload-type id="110"
                      name="SPEEX"
                      clockrate="16000" />
      </description>
    <transport xmlns="urn:xmpp:jingle:transports:ice-udp:1"
               pwd="YPCRsM3Lzqq0NqYg0edogE"
               ufrag="VvCJ" />
    </content>
  </jingle>
</iq>

Réponse :

<iq from="gfa@jabber.gnubox.net/PsiLaptop"
    type="result"
    xml:lang="fr"
    to="gfa85@im.apinc.org/Psi"
    id="aac1a" />

Négociation provenant de l'appelant :

<iq type="set"
    to="gfa@jabber.gnubox.net/PsiLaptop"
    id="aac2a" > 
  <jingle xmlns="urn:xmpp:jingle:1"
          action="transport-info"
          sid="kQVmbTlykr8RnXFc" >
    <content creator="initiator"
             name="A" >
      <transport xmlns="urn:xmpp:jingle:transports:ice-udp:1"
                 pwd="YPCRsM3Lzqq0NqYg0edogE"
                 ufrag="VvCJ" >
        <candidate generation="0"
                   network="0"
                   port="8010"
                   protocol="udp"
                   component="1"
                   foundation="0"
                   ip="192.168.0.10"
                   priority="2130706431"
                   type="host"
                   id="2nSFnufIoR" />
        <candidate generation="0"
                   network="0"
                   port="8011"
                   protocol="udp"
                   component="2"
                   foundation="0"
                   ip="192.168.0.10"
                   priority="2130706430"
                   type="host"
                   id="m6GrM9lWOs" />
      </transport>
    </content>
  </jingle>
</iq>

Négociation, provenant de l'appelé :

<iq from="gfa@jabber.gnubox.net/PsiLaptop"
    type="set"
    xml:lang="fr"
    to="gfa85@im.apinc.org/Psi"
    id="aaeba" >
  <jingle xmlns="urn:xmpp:jingle:1"
          action="transport-info"
          sid="kQVmbTlykr8RnXFc" >
    <content creator="initiator"
             name="A" >
      <transport xmlns="urn:xmpp:jingle:transports:ice-udp:1"
                 pwd="MAkderMeG9g0JfsFDpN8cy"
                 ufrag="LYaR" >
        <candidate generation="0"
                   network="0"
                   port="8010"
                   protocol="udp"
                   component="1"
                   foundation="0"
                   ip="192.168.0.12"
                   priority="2130706431"
                   type="host"
                   id="PoO5Qsg2gi" />
        <candidate generation="0"
                   network="0"
                   port="8011"
                   protocol="udp"
                   component="2"
                   foundation="0"
                   ip="192.168.0.12"
                   priority="2130706430"
                   type="host"
                   id="qULtGeTTiV" />
      </transport>
    </content>
  </jingle>
</iq>

On remarquera les IP locales ! Inexploitables dans le cadre d'internet ! Les deux clients ne peuvent pas établir de connexion entre eux, la négotiation est impossible.

Il faut donc paramétrer un serveur STUN dans le client jabber, en attendant d'avoir une connexion UDP/IP routée de bout en bout. Ce qui pourrait être le cas avec IPv6 étant donné le nombre d'adresse utilisables.

Paramétrage de Psi

Il vous faut trouver un serveur STUN. Actuellement, il n'y a pas de liste de serveurs STUN mise à disposition par JabberFR.

Il suffira d'indiquer l'IP / nom d'hôte du serveur et son port. Préférez toujours indiquer le nom d'hôte, il peut être mis à jour et bénéficier de répartition de charge, tandis que l'IP reste assez souvent liée à une machine.

Dans le paramétrage d'un compte jabber, dans le dernier onglet, voici un exemple de paramétrage fonctionnant : Capt-psi-stun1.png

Mise en place de Vovida STUNd (Linux)

  • [Recommandé] Création d'un utilisateur dédié à la tâche
useradd -m -s /bin/bash stun
  • Téléchargement des codes sources à partir de la page du projet :
http://sourceforge.net/projects/stun/
  • Décompression :
tar -zxvf stund*.tgz
cd stund/
  • Compilation (testé avec gcc-4.3.2)
make
  • La suite dans quelques temps