Configuration de prosody et Coturn
Introduction
Le but de ce tutoriel est de mettre en place le serveur coturn avec la configuration prosody permettant de l’utiliser, afin de pouvoir offrir un service de conversations audio/vidéo fiable via XMPP (avec Movim, Conversations, etc…).
Coturn fait à la fois STUN (permet de découvrir ses adresses) et TURN (permet de se servir du serveur comme relais quand la communication directe est impossible), ce qui est nécessaire dans la plupart des réseaux mobiles.
Pré-requis
- Avoir un serveur prosody déjà configuré
- Avoir les modules complémentaires de prosody (prosody-modules) activables, si vous êtes dans une version inférieure à 0.12
- Ne pas être derrière un NAT (la plupart des auto-hébergements ne pourront malheureusement pas suivre)
- Avoir un enregistrement DNS sur un sous-domaine dédié, par exemple turn.example.com (ce n’est pas techniquement requis mais c’est plus propre)
Pas un pré-requis : le serveur coturn n’a pas à être au même endroit que prosody (ils ne communiquent pas, tout est géré à travers le secret).
Note : si vous n’avez qu’un serveur derrière un NAT, vous pouvez demander à quelqu’un de confiance la permission d’utiliser son serveur TURN/STUN ainsi que son secret. Les communications sont de toute façon chiffrées de bout en bout. Dans ce cas, vous aurez juste à suivre la partie configuration de prosody de ce tutoriel.
Mise en place de coturn
- Installez coturn (souvent également appelé turnserver dans les distributions.
- Selon votre distribution, il est possible qu’il faille aller éditer /etc/default/coturn et décommenter la ligne TURNSERVER_ENABLED=1
- Configurez coturn (et remplacez le secret SVP, ainsi que le realm) :
listening-port=3478 use-auth-secret static-auth-secret=mon-secret-généré-aléatoirement realm=turn.example.com log-file=/var/log/turnserver/turn.log pidfile=/run/turnserver/turnserver.pid
- Ouvrez le port 3478 de votre firewall en UDP, par exemple pour nftables :
udp dport 3478 accept
- Démarrez le service coturn/turnserver et vérifiez qu’il n’y a pas d’erreurs dans les logs.
Le secret est important car il sera partagé avec prosody pour générer des identifiants temporaires acceptés par coturn.
Configuration de prosody
Il faut commencer par ajouter external_services à la liste modules_enabled.
modules_enabled = { … "external_services"; }
Ensuite, il vous faut mettre en place la configuration du plugin (remplacez les valeurs également) :
external_services = { { type = "stun", transport = "udp", host = "turn.example.com", port = 3478 }, { type = "turn", transport = "udp", host = "turn.example.com", port = 3478, secret = "mon-secret-généré-aléatoirement" } }
Tester
La façon la plus simple est de démarrer une conversation audio et de voir que tout marche ! :)
Sinon, via ce site, vous pouvez tester que votre serveur est bien fonctionnel, aussi bien pour STUN que pour TURN.
- Pour STUN, il vous suffit de rentrer "stun:turn.example.com" dans le champ URI et de faire "add relay", et vérifier que "gather candidates" trouve des adresses.
- Pour TURN, vous devrez rentrer "turn:turn.example.com" dans le champ URI et faire "add relay", puis cochez la case "IceTransports value: relay" pour être sûr que le serveur peut bien fonctionner en mode relais, puis faite "gather candidates", s’il y a des résultats (dont l’IP de votre serveur), c’est bon!