Para que el WebRTC y los archivos multimedia manejados por Kurento en BigBluebutton funcionen, se requiere un servidor para retransmitir el tráfico entre pares, ya que a menudo no es posible un socket directo entre los clientes (a menos que residan en la misma red local). Bigbluebutton La forma habitual de solucionar este problema es mediante un servidor TURN. El término significa Traversal Using Relay NAT, y es un protocolo para retransmitir tráfico de red. Nuestro Servidor BigBluebutton utiliza Kurento para los archivos de multimedia, y Kurento utiliza el servidor Turn gratuito de Google. Pero, estos servidores no garantizan estar 100% del tiempo en línea. Es por esto recomendamos instalar nuestro propio servidor Turn.

Además, el servidor TURN también implementa el protocolo STUN, que se utiliza para permitir conexiones UDP directas a través de ciertos tipos de cortafuegos que, de otro modo, podrían no funcionar. El uso de un servidor TURN bajo su control mejora el éxito de las conexiones a BigBlueButton y también mejora la privacidad del usuario, ya que ya no enviarán información de dirección IP a un servidor STUN público. El protocolo TURN no consume mucha CPU ni memoria. Además, dado que solo se usa durante la configuración de la conexión (para STUN) y como respaldo para los usuarios que de otro modo no podrían conectarse, los requisitos de ancho de banda no son particularmente altos. Para un número moderado de servidores BigBlueButton, un solo VPS pequeño suele ser suficiente. Necesita configurar un nombre de dominio que se resuelva en la dirección IP externa de su servidor de Turn. Utilizará este nombre de dominio para generar un certificado TLS usando Let's Encrypt. En el servidor de Turn, debe tener los siguientes puertos (además del puerto 22) disponibles para que los clientes de BigBlueButton se conecten (puerto 3478 y 443) y para que coturn se conecte a su servidor de BigBlueButton (32768 - 65535).

Crear la instancia en Google Cloud:

Creamos una instancia llamada: turn-server N1- f1micro. Ubuntu 20.04 Y que permita http y https

Ahora creamos una regla de Firewall llamada turn con los siguientes puertos:

Editamos nuestra instancia y le colocamos en la sección de Network tags: turn y luego guardamos:

Instalar software requerido

Utilizaremos el software coturn que requiere el puerto 443 para su uso exclusivo en nuestra configuración recomendada, lo que significa que el servidor no puede tener ningún software u otras aplicaciones web ejecutándose. Las versiones estables de coturn ya están disponibles en los repositorios de empaquetado de Ubuntu para la versión 20.04 y posteriores para eso ingresamos en nuestra instancia (en el documento anterior explica como ingresar a una instancia de GCP) , e instalamos coturn con apt-get,

$ sudo apt-get update
$ sudo apt-get install coturn

Generando certificados TLS

Puede utilizar certbot desde Let's Encrypt para generar fácilmente certificados TLS gratuitos. Para configurar, certbot ingrese los siguientes comandos en su servidor TURN (no en su servidor BigBlueButton).

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

Luego puede ejecutar un certbotcomando como el siguiente para generar el certificado, reemplazándolo turn.example.com con el nombre de dominio de su servidor TURN:

$ sudo certbot certonly --standalone --preferred-challenges http \ -d

Las versiones actuales del comando certbot configuran la renovación automática de forma predeterminada. Para asegurarse de que los certificados sean legibles por coturn, que se ejecuta como el turnserverusuario, agregue el siguiente enlace de renovación a Let's Encrypt. Primero, cree el directorio /etc/letsencrypt/renewal-hooks/deploy.

$ sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy

A continuación, cree el archivo /etc/letsencrypt/renewal-hooks/deploy/coturn con el siguiente contenido. Reemplazar  con el dominio de su servidor TURN.

#!/bin/bash -e
for certfile in fullchain.pem privkey.pem ; do
cp -L /etc/letsencrypt/live//"${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

Haga que este archivo sea ejecutable.

$ sudo chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn

Configurar coturn

La configuración se almacena en el archivo /etc/turnserver.conf. Hay muchas opciones disponibles. Incluimos una configuración de muestra a continuación con la configuración recomendada. Utilice el archivo a continuación /etc/turnserver.conf y realice los siguientes cambios:

  • Reemplácelo 
    < turn.example.com >
    con el nombre de su servidor TURN y
  • Reemplazar 
    < turn.example.com >
    con el dominio raiz de su servidor TURN, y
  • Reemplazar 
    < secret_value >
    por un valor aleatorio (puede generar uno ejecutando openssl rand -hex 16)
  • Reemplazar 
    < IP >
    con la IP externa de su servidor TURN
  • • listening-port=3478
    • tls-listening-port=443
    • listening-ip=$IP
    • relay-ip=$IP
    • min-port=32769
    • max-port=65535
    • verbose
    • fingerprint
    • lt-cred-mech
    • use-auth-secret
    • static-auth-secret=
    • realm=
    • cert=/etc/turnserver/fullchain.pem
    • pkey=/etc/turnserver/privkey.pem
    • # From https://ssl-config.mozilla.org/ Intermediate, openssl 1.1.0g, 2020-01
    • 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
    • keep-address-family
    • no-cli
    • no-tlsv1
    • no-tlsv1_1
    • no-loopback-peers
    • no-multicast-peers

    Necesitamos crear un dph.pemarchivo,

    $ sudo mkdir -p /etc/turnserver
    $ sudo openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048

    Para aumentar el límite de manejo de archivos para el servidor TURN y darle la capacidad de vincularse al puerto 443, agregue el siguiente archivo de anulación de systemd. Primero, cree el directorio.

    $ sudo mkdir -p /etc/systemd/system/coturn.service.d

    y luego crear /etc/systemd/system/coturn.service.d/override.confcon los siguientes contenidos

    [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

    Configurar la rotación de registros

    Para rotar los registros coturn, instale el siguiente archivo de configuración en/etc/logrotate.d/coturn

    /var/log/turnserver/*.log
    {
    rotate 7
    daily
    missingok
    notifempty
    compress
    postrotate
    /bin/systemctl kill -s HUP coturn.service
    endscript
    }

    Y crea el directorio de registro asociado

    $ sudo mkdir -p /var/log/turnserver
    $ sudo chown turnserver:turnserver /var/log/turnserver

    Reiniciar coturn

    $ sudo /etc/letsencrypt/renewal-hooks/deploy/coturn
    $ sudo systemctl daemon-reload
    $ sudo systemctl restart coturn

    Pruebe su servidor TURN

    Puede probar su servidor TURN usando la página de ICE. Esto le brinda un registro de los candidatos de relevo a medida que regresan de la reunión de ICE. Para probar el uso de esta página, debe generar algunas credenciales de prueba. Ejecute el siguiente script BASH y sustitúyalo < turn.example.com > por el nombre de host de su servidor TURN y < secret_value >por la contraseña de su servidor TURN

    #!/bin/bash
    HOST=turn.example.com
    SECRET=secret_value
    time=$(date +%s)
    expiry=8400
    username=$(( $time + $expiry ))
    echo
    echo " https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/"
    echo
    echo URI : turn:$HOST:443
    echo username : $username
    echo password : $(echo -n $username | openssl dgst -binary -sha1 -hmac $SECRET | openssl base64)
    echo

    Ingrese los valores en URI, nombre de usuario y contraseña en la página de ICE y haga clic en 'Recopilar candidatos'. Debería ver una lista de candidatos a relevos. Si no lo hace, vuelva a comprobar que su servidor TURN se esté ejecutando y siga los registros de los registros del servidor TURN a través sudo tail -f /var/log/turnserver/turnserver.log

    Prueba BigBlueButton hoy