Installer TURN pour Nextcloud Talk sur Debian

Nextcloud Talk est une application de Nextcloud qui permet de communiquer avec vos correspondants grâce à des appels vidéos et audio. Cette application est basée sur Spreed.ME WebRTC solution et utilise la technologie WebRTC pour vos communications audio et vidéo, supporte le partage de fichiers et d’écran, un service de messagerie instantannée. Ce nouveau service de Nextcloud fonctionne avec tous les navigateurs modernes. Il existe également des clients Desktop (Windows, Linux, macOS) et des clients mobiles (iOS, Android).

Nextcloud Talk s’installe facilement dans Nextcloud depuis le gesitonnaire d’application accessible depuis un compte administrateur. Par défaut, l’application est installée avec un serveur STUN configuré : stun.nextcloud.com:443. Parfois, un serveur STUN n’est pas suffisant pour que les communications audios ou vidéos puissent s’établir directement entre deux utilisateurs. En fonction de l’architecture réseau entre les utilisateurs (Pare-Feu et NAT symmetric), il faut parfois recourir à l’utilisation d’un serveur TURN qui va jouer le rôle de relais entre les deux utilisateurs.

Installer le serveur coturn sous Debian

Mettre à jour la liste des applications disponibles et mettre à jour le système

$: apt-get update

$: apt-get upgrade

Vérifier la version disponible pour votre système

apt-cache policy coturn
coturn:
  Installé : (aucun)
  Candidat : 4.5.0.5-1+b1
 Table de version :
     4.5.0.5-1+b1 500
        500 http://ftp.fr.debian.org/debian stretch/main amd64 Packages

Installer coturn

$: apt-get install coturn

Activer le lancement automatique de coturn au démarrage du système

$: nano /etc/default/coturn

Décommenter la ligne avec TURNSERVER_ENABLED=1 (enlever le ‘#’ devant)

#
# Uncomment it if you want to have the turnserver running as
# an automatic system service daemon
#
TURNSERVER_ENABLED=1

Configurer coturn pour Nextcloud Talk

Générer un secret pour la configuration de coturn

$: openssl rand -hex 32
3cc5374672914b19e3979eb39b7840d5b54c89d2f259bfb383b5830305bde714

Configurer coturn sans TLS

Faire une sauvegarde et editer la configuration de coturn

$: cp /etc/turnserver.conf /etc/turnserver.conf.bak
$: nano /etc/turnserver.conf
# TURN listener port for UDP and TCP (Default: 3478).
# Note: actually, TLS & DTLS sessions can connect to the
# "plain" TCP & UDP port(s), too - if allowed by configuration.
#
listening-port=3478

# Uncomment to use fingerprints in the TURN messages.
# By default the fingerprints are off.
#
fingerprint

# Uncomment to use long-term credential mechanism.
# By default no credentials mechanism is used (any user allowed).
#
lt-cred-mech

# TURN REST API flag.
# Flag that sets a special authorization option that is based upon authentication secret.
# This feature can be used with the long-term authentication mechanism, only.
# This feature purpose is to support "TURN Server REST API", see
# "TURN REST API" link in the project's page
# https://github.com/coturn/coturn/
#
# This option is used with timestamp:
#
# usercombo -> "timestamp:userid"
# turn user -> usercombo
# turn password -> base64(hmac(secret key, usercombo))
#
# This allows TURN credentials to be accounted for a specific user id.
# If you don't have a suitable id, the timestamp alone can be used.
# This option is just turning on secret-based authentication.
# The actual value of the secret is defined either by option static-auth-secret,
# or can be found in the turn_secret table in the database (see below).
#
use-auth-secret

# 'Static' authentication secret value (a string) for TURN REST API only.
# If not set, then the turn server
# will try to use the 'dynamic' value in turn_secret table
# in user database (if present). The database-stored  value can be changed on-the-fly
# by a separate program, so this is why that other mode is 'dynamic'.
#
static-auth-secret=<copier ici le secret généré avec openssl>

# The default realm to be used for the users when no explicit
# origin/realm relationship was found in the database, or if the TURN
# server is not using any database (just the commands-line settings
# and the userdb file). Must be used with long-term credentials
# mechanism or with TURN REST API.
#
realm=mondomain.fr

# Total allocation quota.
# default value is 0 (no quota).
# This option can also be set through the database, for a particular realm.
#
total-quota=100

#
# Maximum server capacity.
# Total bytes-per-second bandwidth the TURN server is allowed to allocate
# for the sessions, combined (input and output network streams are treated separately).
#
bps-capacity=0

# Uncomment if extra security is desired,
# with nonce value having limited lifetime.
# By default, the nonce value is unique for a session,
# and has unlimited lifetime.
# Set this option to limit the nonce lifetime.
# It defaults to 600 secs (10 min) if no value is provided. After that delay,
# the client will get 438 error and will have to re-authenticate itself.
#
stale-nonce

# Flag that can be used to disallow peers on the loopback addresses (127.x.x.x and ::1).
# This is an extra security measure.
#
no-loopback-peers

# Flag that can be used to disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*).
# This is an extra security measure.
#
no-multicast-peers

Redémarrer coturn pour prendre en compte la nouvelle configuraion

$: sudo systemctl restart coturn

Vérifier que coturn écoute bien sur le port configuré

$: netstat -nl | grep -i 3478
tcp        0      0 172.17.0.1:3478         0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.160:3478      0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:3478          0.0.0.0:*               LISTEN     
tcp        0      0 172.17.0.1:3478         0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.160:3478      0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:3478          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:3478                :::*                    LISTEN     
tcp6       0      0 ::1:3478                :::*                    LISTEN     
sctp                ::1:3478                                        LISTEN     
sctp                172.17.0.1:3478                                 LISTEN     
sctp                192.168.0.160:3478                              LISTEN     
sctp                127.0.0.1:3478                                  LISTEN     
udp        0      0 172.17.0.1:3478         0.0.0.0:*                          
udp        0      0 172.17.0.1:3478         0.0.0.0:*                          
udp        0      0 192.168.0.160:3478      0.0.0.0:*                          
udp        0      0 192.168.0.160:3478      0.0.0.0:*                          
udp        0      0 127.0.0.1:3478          0.0.0.0:*                          
udp        0      0 127.0.0.1:3478          0.0.0.0:*                          
udp6       0      0 ::1:3478                :::*                               
udp6       0      0 ::1:3478                :::* 

Configurer coturn avec TLS

TODO

Minimiser les traces généré par coturn

Après avoir vérifié que tout foncitonne bien, il est possible de réduire les traces (logs) généré par coturn. Ce point est important si vous utilisez une carte SD (par exemple avec un Raspeberry PI) comme disque dur et vous souhaitez économiser sa durée de vie.

$: cp /etc/turnserver.conf /etc/turnserver.conf.bak
$: nano /etc/turnserver.conf
# Flag to prevent stdout log messages.
# By default, all log messages are going to both stdout and to
# the configured log file. With this option everything will be
# going to the configured log only (unless the log file itself is stdout).
#
no-stdout-log

# Option to set the log file name.
# By default, the turnserver tries to open a log file in
# /var/log, /var/tmp, /tmp and current directories directories
# (which open operation succeeds first that file will be used).
# With this option you can set the definite log file name.
# The special names are "stdout" and "-" - they will force everything
# to the stdout. Also, the "syslog" name will force everything to
# the system log (syslog).
# In the runtime, the logfile can be reset with the SIGHUP signal
# to the turnserver process.
#
log-file=/var/log/turn.log

# Option to redirect all log output into system log (syslog).
# 
syslog

# This flag means that no log file rollover will be used, and the log file
# name will be constructed as-is, without PID and date appendage.
# This option can be used, for example, together with the logrotate tool.
# 
simple-log

Redémarrer coturn pour prendre en compte la nouvelle configuraion

$: sudo systemctl restart coturn

Configurer Nextcloud Talk pour fonctioner avec votre serveur TURN

Depuis votre compte administrateur sous Nextcloud, editer la configuration (Settings -> Administration -> Talk) :

  • STUN server : mondomain.fr:3478
  • TURN server : mondomain.fr:3478
  • TURN secret : <copier ici le secret généré avec openssl>
  • UDP et TCP

Rendre accessible votre serveur coturn depuis Internet

Sur l’hypothèse que le traffic est bloqué par défaut, configurer le pare-feu de votre serveur pour autoriser le traffic entrant UDP et TCP sur le port 3478 (celui configuré pour coturn)

$: iptables -A INPUT -m tcp -p tcp --dport 3478 -j ACCEPT
$: iptables -A INPUT -m udp -p udp --dport 3478 -j ACCEPT

Pensez à persister les règles du pare-feu pour les appliquer au démarrage du serveur.

Si votre serveur est derrière un NAT ou une box internet avec un NAT, configurer le NAT pour transferer le traffic TCP et UPD entrant sur le port 3478 vers la machine hébergeant le serveur coturn.


Références

Nextcloud

Nextcloud Talk

HowTo: Setup Nextcloud Talk with TURN server

GitHub : Coturn

Laisser un commentaire