====== Installer un serveur TURN/STUN pour BigBlueButton ======
Un serveur TURN/STUN permet à ceux qui se connectent aux Internets à travers un firewall restrictif (comme dans les entreprises ou les administrations de manière générale) d'accéder à un serveur [[https://bigbluebutton.org/|BigBlueButton]] (entre autres) en faisant relai.
Normalement, l'accès à un serveur BigBlueButton implique l'accès à des ports rarement ouverts dans les firewall. Le serveur TURN/STUN permet de passer par les ports généralement ouverts 443 et 3478, relayés ensuite vers le serveur BigBlueButton et ses ports.
Dans ce tutoriel, traduit, adapté et augmenté à partir du [[https://docs.bigbluebutton.org/admin/setup-turn-server.html|tutoriel original]], on utilisera une [[https://www.ubuntu-fr.org/|Ubuntu 20.04 server]] permettant d'installer le package [[https://packages.ubuntu.com/groovy/coturn|coturn]] dans sa version 4.5.1 minimum.
On considère que le nom de domaine **coturn.mondomaine.org** pointe sur le serveur.
===== Installation =====
==== Certificat TLS ====
[[https://certbot.eff.org|Certbot]] permet de générer des certificats SSL/TLS et s'installe de préférence via le gestionnaire de paquets [[https://snapcraft.io/|Snap]], préinstallé sur Ubuntu.
On installe et met à jour snap :
snap install core; sudo snap refresh core
On installe certbot :
snap install --classic certbot
On fait un lien symbolique vers l’exécutable de certbot pour disposer de la commande dans le PATH :
ln -s /snap/bin/certbot /usr/bin/certbot
On crée le certificat pour le nom de domaine coturn.mondomaine.org, **attention** il faut arrêter apache qui écoute sur le port 80 et empêchera certbot d'utiliser le plugin standalone qui va écouter aussi sur le 80 :
certbot certonly --standalone --preferred-challenges http -d coturn.mondomaine.org
==== Coturn ====
On installe le paquet **coturn** :
apt install coturn
Le serveur **coturn** écoutera sur les ports :
* 443 (TCP/UDP) : accès au certificat TLS
* 3478 (TCP/UDP) : port d'écoute de coturn
* 5349 (TCP/UDP) : port d'écoute TLS de coturn
Et communiquera avec les ports du serveur BigBlueButton via l'interval de ports 32768-65535 (UDP).
Le serveur coturn fonctionne en tant que l’utilisateur **turnserver** et il devra être en mesure d'accéder aux clefs TLS générées par Certbot, notamment lorsque les clefs seront renouvellées.
On crée un dossier **/etc/turnserver** dans lequel on copiera les clefs automatiquement à chaque renouvellement.
Aller dans le dossier **/etc/letsencrypt/renewal-hooks/deploy**, et créer un fichier **coturn** dans lequel on met :
#!/bin/bash -e
for certfile in fullchain.pem privkey.pem ; do
cp -L /etc/letsencrypt/live/coturn.mondomaine.org/"${certfile}" /etc/turnserver/"${certfile}".new
chown turnserver:turnserver /etc/turnserver/"${certfile}".new
mv /etc/turnserver/"${certfile}".new /etc/turnserver/"${certfile}"
done
systemctl kill -sUSR2 coturn.service
Rendre ce fichier executable :
chmod 0755 coturn
===== Configuration =====
Le fichier de configuration de coturn est **/etc/turnserver.conf**.
Dans ce fichier, on va modifier plusieurs variables et paramètres tel que montré ci-dessous.
* Remplacer par l'IP du serveur sur lequel coturn fonctionne, pas celle du serveur BigBlueButton.
* Remplacer par une chaine de caractères, par exemple créé via la commande ''openssl rand -hex 16''
listening-port=3478
tls-listening-port=5349
listening-ip=
relay-ip=
min-port=32769
max-port=65535
static-auth-secret=
realm=coturn.mondomaine.org
cert=/etc/turnserver/fullchain.pem
pkey=/etc/turnserver/privkey.pem
cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
dh-file=/etc/turnserver/dhp.pem
# If running coturn version older than 4.5.2, uncomment these rules and ensure
# that you have listening-ip set to ipv4 addresses only.
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=::1
# Private (LAN) addresses
# If you are running BigBlueButton within a LAN, you might need to add an "allow" rule for your address range.
# IPv4 Private-Use
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
# Other IPv4 Special-Purpose addresses
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
# IPv6 Unique-Local
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# IPv6 Link-Local Unicast
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Other IPv6 Special-Purpose assignments
denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
Il faut aussi décommenter les paramètres suivants :
verbose
fingerprint
lt-cred-mech
use-auth-secret
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
# Block connections to IP ranges which shouldn't be reachable
no-multicast-peers
Sauver le fichier.
==== Fichier dhp.pem ====
On voit qu'on a besoin de créer le fichier de clef custom DH TLS **/etc/turnserver/dhp.pem** :
openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048
==== Configuration du démarrage du service ====
Quand le service **coturn** démarrera, il faut qu'il se lie (bind) au port 5349 (TLS). Il faut aussi augmenter le nombre de fichier que le service peut gérer. On crée un dossier **/etc/systemd/system/coturn.service.d** :
mkdir -p /etc/systemd/system/coturn.service.d
Dedans, on crée un fichier override.conf dans lequel on met :
[Service]
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=
ExecStart=/usr/bin/turnserver --daemon -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid --no-stdout-log --simple-log --log-file /var/log/turnserver/turnserver.log
Restart=always
==== Logs (et rotation) ====
On crée le dossier de logs de coturn en lui donnant les bons droits :
mkdir -p /var/log/turnserver && chown turnserver:turnserver /var/log/turnserver
Puis on configure la rotation en créant un fichier **/etc/logrotate.d/coturn** dans lequel on met :
/var/log/turnserver/*.log
{
rotate 7
daily
missingok
notifempty
compress
postrotate
/bin/systemctl kill -s HUP coturn.service
endscript
}
Redémarrer le serveur coturn ! (voir ci-dessous)
===== Commandes =====
A faire la 1ère fois seulement, on copie les clefs TLS dans le dossier /etc/turnserver en utilisant le script créé plus haut pour le renouvellement du certificat par certbot :
/etc/letsencrypt/renewal-hooks/deploy/coturn
On s’assure que le daemon prend en compte le fichier override.conf créé plus haut :
systemctl daemon-reload
On redémarre le service :
systemctl restart coturn
===== Lier BigBlueButton au serveur coturn =====
Sur le serveur qui héberge BigBlueButton, modifier le fichier **/usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml** tel que ci-dessous.
Remplacer par la valeur donnée à la variable **static-auth-secret** dans le fichier **/etc/turnserver.conf** précédemment configuré.
Redémarrer BigBlueButton :
bbb-conf --restart
Pour tester si le serveur coturn jour son rôle de relay, utiliser la méthode décrite dans le [[https://docs.bigbluebutton.org/admin/setup-turn-server.html#test-your-turn-server|tutoriel original]].
{{tag>n1c0 serveur streaming tutoriel futuretic }}