====== 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 }}