Cette documentation vise à éviter des communications blanches qui peuvent avoir lieu pour des raisons techniques essentiellement liées à la traversée de réseaux NATtés.
Pour transmettre les flux audio/vidéo, les applications Wazo Web, Desktop, et Mobile tentent d'établir une connexion directe avec la Stack. Ainsi pour les connexions sortant du réseau local (derrière un NAT ou un routeur), l'application a besoin de connaître son IP publique. La réalisation de cette opération est le travail d'un serveur STUN.
Mais dans de nombreux cas, notamment en combinaison avec des pare-feu ou un NAT symétrique, une connexion directe n'est pas possible, même avec l'aide d'un serveur STUN. Pour cela, un serveur appelé TURN doit être configuré en plus.
L'application Wazo App utilisera STUN si nécessaire et TURN comme solution de secours. Ainsi, pour être le plus flexible et garantir la fonctionnalité de votre instance dans tous les cas de connexions possibles, vous devrez utiliser et configurer un serveur TURN.
Pour cela, nous vous proposons deux solutions :
- déployer un serveur STUN / TURN dans votre infrastructure
- utiliser un service vous fournissant un service STUN / TURN
Nous allons détailler ci-après les étapes de déploiement d'un serveur coTURN, une solution FOSS reconnue et éprouvée.
Pré-requis
Pour commencer, vous pouvez configurer un serveur Debian avec la configuration minimale suivante :
- 1 processeur
- 1 Go de RAM
- Disque de 8 Go monté sur /
Attention de bien dimensionner la machine, car les flux RTP chemineront par celle-ci.
La bande passante réseau requise dépend beaucoup de l'utilisation prévue (nombre de communications simultanées).
La latence est très importante ainsi que la gigue afin de garantir une bonne qualité des communications.
En ce qui concerne la sécurité du réseau, avec les valeurs par défaut de Coturn, vous aurez besoin des ports suivants (pensez à les ouvrir au niveau de votre firewall) :
- 3478 TCP et UDP: port d'écoute STUN
- 5349 TCP et UDP: port d'écoute TURN pour TLS et DTLS
- 3479 TCP et UDP: port d'écoute TURN alternatif
- 5350 TCP et UDP: port d'écoute TURN alternatif pour TLS et DTLS
- 9641 TCP: métriques Prometheus, nécessite Coturn 4.5.2 (pas encore publié à date de rédaction de ce guide)
- 9090 TCP: pour l'interface d'administration Web (facultatif)
- 32355 à 65535 UDP: plage de ports RTP (UDP/TCP) par défaut
Ces valeurs peuvent être modifiées, par exemple, vous pouvez configurer les ports alternatifs sur 80 et 443.
Installation
L'installation est simple en utilisant les paquets fournis avec la distribution :
apt-get install coturn
Paramétrage
Afin de permettre au service STUN & TURN de démarrer au lancement de la machine, vous devez modifier un paramètre avec la commande suivante :
sed -i '/TURNSERVER_ENABLED/c\TURNSERVER_ENABLED=1' /etc/default/coturn
Ensuite, il est nécessaire d'ajuster la configuration dans le fichier adéquate /etc/turnserver.conf :
listening-port=3478
fingerprint
lt-cred-mech
server-name=votre_domaine.fr
realm=votre_domain.fr
listening-ip=0.0.0.0
#si votre serveur est derriere un NAT
#external-ip=ip_publique/ip_privee
user=votre_utilisateur:votre_password
total-quota=100
stale-nonce=600
#si vous utilisez le serveur TURN TLS
tls-listening-port=5349
cert=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/cert.pem
pkey=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/privkey.pem
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
proc-user=turnserver
proc-group=turnserver
bps-capacity=0
no-multicast-peers
verbose
Si votre serveur TURN n'est pas situé derrière un NAT, mais dispose d'une adresse IP publique statique, vous pouvez limiter les adresses IP auxquelles le service écoute et répond en définissant celles-ci avec les variables listening-ip et relay-ip.
Si votre serveur TURN est derrière un NAT, vous devez définir external-ip avec votre IP publique externe (c'est-à-dire en dehors de votre NAT).
Des informations complémentaires concernant les paramètres sont disponibles à l'adresse suivante : https://github.com/coturn/coturn/blob/master/examples/etc/turnserver.conf
Et enfin, appliquer la configuration et redémarrer le service :
/etc/init.d/coturn stop
mv /lib/systemd/system/coturn.service /tmp/
systemctl daemon-reload
update-rc.d coturn defaults
/etc/init.d/coturn start
Important :
Le serveur TURN sur <yourChosenPortNumber> doit être disponible pour tous les utilisateurs WebRTC (Wazo App), vous devez donc l'ouvrir sur le Web et si votre serveur TURN fonctionne derrière un NAT, le transmettre à la machine associée.