Outils pour utilisateurs

Outils du site


installer_un_serveur_stun_turn_bigbluebutton

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
installer_un_serveur_stun_turn_bigbluebutton [2021/05/07 16:26] n1c0installer_un_serveur_stun_turn_bigbluebutton [2023/04/11 21:50] (Version actuelle) – [Lier BigBlueButton au serveur coturn] Benjamin Labomedia
Ligne 3: Ligne 3:
 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. 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 TURN/STUN serveur permet de passer par les ports généralement ouverts 443 et 3478, relayés ensuite vers le serveur BigBlueButton et ses ports.+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 tutoriel original, on utilisera une [[https://www.ubuntu-fr.org/|Ubuntu 20.04]] permettant d'installer le package [[https://packages.ubuntu.com/groovy/coturn|coturn]] dans sa version 4.5.1 minimum.+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.
  
-En cours d'écriture...+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 : 
 + 
 +<code bash> 
 +snap install core; sudo snap refresh core 
 +</code> 
 + 
 +On installe certbot : 
 + 
 +<code bash> 
 +snap install --classic certbot 
 +</code> 
 + 
 +On fait un lien symbolique vers l’exécutable de certbot pour disposer de la commande dans le PATH : 
 + 
 +<code bash> 
 +ln -s /snap/bin/certbot /usr/bin/certbot 
 +</code> 
 + 
 +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 : 
 + 
 +<code bash> 
 +certbot certonly --standalone --preferred-challenges http -d coturn.mondomaine.org 
 +</code> 
 + 
 +==== Coturn ==== 
 + 
 +On installe le paquet **coturn** : 
 + 
 +<code bash> 
 +apt install coturn 
 +</code> 
 + 
 +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 : 
 + 
 +<code bash> 
 +#!/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 
 +</code> 
 + 
 +Rendre ce fichier executable :  
 + 
 +<code bash> 
 +chmod 0755 coturn 
 +</code> 
 + 
 +===== 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 <IP> par l'IP du serveur sur lequel coturn fonctionne, pas celle du serveur BigBlueButton. 
 +  * Remplacer <VALEUR_SECRETE> par une chaine de caractères, par exemple créé via la commande ''openssl rand -hex 16'' 
 + 
 +<code bash> 
 +listening-port=3478 
 +tls-listening-port=5349 
 + 
 +listening-ip=<IP> 
 +relay-ip=<IP> 
 + 
 +min-port=32769 
 +max-port=65535 
 + 
 +static-auth-secret=<VALEUR_SECRETE> 
 +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=::
 +# 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 
 +</code> 
 + 
 +Il faut aussi décommenter les paramètres suivants : 
 + 
 +<code bash> 
 +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 
 +</code> 
 + 
 +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** : 
 + 
 +<code bash> 
 +openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048 
 +</code> 
 + 
 +==== 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** :  
 + 
 +<code bash> 
 +mkdir -p /etc/systemd/system/coturn.service.d 
 +</code> 
 + 
 +Dedans, on crée un fichier override.conf dans lequel on met : 
 + 
 +<code bash> 
 +[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 
 +</code> 
 + 
 +==== Logs (et rotation) ==== 
 + 
 +On crée le dossier de logs de coturn en lui donnant les bons droits : 
 + 
 +<code bash> 
 +mkdir -p /var/log/turnserver && chown turnserver:turnserver /var/log/turnserver 
 +</code> 
 + 
 +Puis on configure la rotation en créant un fichier **/etc/logrotate.d/coturn** dans lequel on met : 
 + 
 +<code bash> 
 +/var/log/turnserver/*.log 
 +
 + rotate 7 
 + daily 
 + missingok 
 + notifempty 
 + compress 
 + postrotate 
 + /bin/systemctl kill -s HUP coturn.service 
 + endscript 
 +
 +</code> 
 + 
 +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 : 
 + 
 +<code bash> 
 +/etc/letsencrypt/renewal-hooks/deploy/coturn 
 +</code> 
 + 
 +On s’assure que le daemon prend en compte le fichier override.conf créé plus haut : 
 + 
 +<code bash> 
 +systemctl daemon-reload 
 +</code> 
 + 
 +On redémarre le service : 
 + 
 +<code bash> 
 +systemctl restart coturn 
 +</code> 
 + 
 +===== 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 <VALEUR_SECRETE> par la valeur donnée à la variable **static-auth-secret** dans le fichier **/etc/turnserver.conf** précédemment configuré.  
 + 
 +<code xml> 
 +<beans xmlns="http://www.springframework.org/schema/beans" 
 +    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 +    xsi:schemaLocation="http://www.springframework.org/schema/beans 
 +            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
 +            "> 
 + 
 +    <bean id="stun1" class="org.bigbluebutton.web.services.turn.StunServer"> 
 +        <constructor-arg index="0" value="stun:coturn.mondomaine.org"/> 
 +    </bean> 
 + 
 +    <!--bean id="stun2" class="org.bigbluebutton.web.services.turn.StunServer"> 
 +        <constructor-arg index="0" value="stun:stun2.example.com"/> 
 +    </bean--> 
 + 
 +    <!--bean id="iceCandidate1" class="org.bigbluebutton.web.services.turn.RemoteIceCandidate"> 
 +        <constructor-arg index="0" value="192.168.0.1"/> 
 +    </bean--> 
 + 
 +    <!-- Turn servers are configured with a secret that's compatible with 
 +         http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 
 +         as supported by the coturn and rfc5766-turn-server turn servers --> 
 + 
 +    <bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer"> 
 +        <constructor-arg index="0" value="<VALEUR_SECRETE>"/> 
 +        <constructor-arg index="1" value="turns:coturn.mondomaine.org:443?transport=tcp"/> 
 +        <constructor-arg index="2" value="86400"/> 
 +    </bean> 
 + 
 +    <bean id="turn2" class="org.bigbluebutton.web.services.turn.TurnServer"> 
 +        <constructor-arg index="0" value="<VALEUR_SECRETE>"/> 
 +        <constructor-arg index="1" value="turn:coturn.mondomaine.org?transport=tcp"/> 
 +        <constructor-arg index="2" value="86400"/> 
 +    </bean> 
 + 
 +    <bean id="stunTurnService" class="org.bigbluebutton.web.services.turn.StunTurnService"> 
 +        <property name="stunServers"> 
 +            <set> 
 +                <ref bean="stun1" /> 
 +                <!--ref bean="stun2" /--> 
 +            </set> 
 +        </property> 
 +        <property name="turnServers"> 
 +            <set> 
 +                <ref bean="turn1" /> 
 +                <ref bean="turn2" /> 
 +            </set> 
 +        </property> 
 +        <property name="remoteIceCandidates"> 
 +            <set> 
 +                <!--ref bean="iceCandidate1" /--> 
 +                <!--ref bean="iceCandidate2" /--> 
 +            </set> 
 +        </property> 
 +    </bean> 
 +</beans> 
 +</code> 
 + 
 +Redémarrer BigBlueButton : 
 + 
 +<code bash> 
 +bbb-conf --restart 
 +</code> 
 + 
 +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 }}
installer_un_serveur_stun_turn_bigbluebutton.1620404807.txt.gz · Dernière modification : 2021/05/07 16:26 de n1c0