Aprende a configurar tu propio servidor STUN/TURN usando coturn en Ubuntu 18.04 desde cero.

Cómo crear y configurar tu propio servidor STUN/TURN con coturn en Ubuntu 18.04

En los últimos días, necesitábamos implementar una aplicación de videoconferencia basada en WebRTC usando PeerJS con Node.js. Como se menciona en las notas oficiales para comenzar con esta tecnología, la mayoría de las veces para hacer que aplicaciones como esta funcionen, necesitará un tipo especial de servidor que se encargue de retransmitir el tráfico entre pares, porque a veces cuando se utiliza un socket directo, no es posible entre los clientes (a menos que residan en la misma red local). Esto se conoce como servidor TURN, que significa Traversal Using Relay NAT y es un protocolo para retransmitir tráfico de red.

Como es bastante difícil encontrar un servidor TURN gratuito, porque no lo hay , terminamos implementando nuestro propio servidor STUN / TURN y queremos compartir con ustedes cómo lo implementamos. En este tutorial, le explicaremos cómo instalar y configurar coturn desde cero para crear su propio servidor STUN / TURN en Ubuntu 18.04.

Requisitos

Para tener éxito con la implementación de este tutorial, necesitarás obligatoriamente lo siguiente:

  • Un servidor Ubuntu (18.04 en nuestro caso).
  • Conoce la IP pública de tu servidor, en nuestro caso usaremos la IP pública de nuestro servidor 209.126.124.122.
  • Poseer un dominio y tener acceso al administrador de DNS ya que necesitará crear 2 subdominios (el dominio será ourcodeworld.com en nuestro caso y lo tenemos alojado en goDaddy).
  • Certificados SSL para los subdominios (preferiblemente un certificado con comodín, por ejemplo *.ourcodeworld.com). Sin el protocolo seguro, la implementación de su servidor no se completará y después de usarlo en sus proyectos WebRTC con HTTPS no funcionará, así que sea inteligente y evite dolores de cabeza, compre un certificado SSL u obtenga uno gratis con LetsEncrypt.

Habiendo dicho eso, ¡comencemos con el tutorial!

1. Instale coturn

Para implementar su propio servidor STUN / TURN, nos basaremos en el proyecto Coturn. Coturn es una implementación gratuita y de código abierto de un servidor TURN y STUN para VoIP y WebRTC. Este proyecto evolucionó a partir del proyecto rfc5766-turn-server ( https://code.google.com/p/rfc5766-turn-server/ ). Hay muchas especificaciones TURN avanzadas nuevas que van mucho más allá del documento RFC 5766 original. Este proyecto toma el código de rfc5766-turn-server como iniciador y le agrega nuevas características avanzadas.

Antes de continuar con la instalación de coturn, asegúrese de actualizar el repositorio apt-get a su última versión con el siguiente comando:

sudo apt-get -y update

Luego, instala el paquete coturn con el siguiente comando:

sudo apt-get install coturn

Esto instalará el proyecto coturn TURN en su servidor, una implementación gratuita de código abierto del servidor TURN y STUN. Asegúrese de detener el servicio después de instalar el paquete con el siguiente comando, ya que se iniciará automáticamente una vez que finalice la instalación:

systemctl stop coturn

Ahora podrá seguir el resto del tutorial. Para obtener más información sobre el proyecto coturn, asegúrese de visitar el repositorio oficial en Github para consultar la documentación.

2. Habilitar coturn

Después de la instalación, deberás habilitar el servidor TURN en el archivo de configuración de coturn. Para hacer esto, descomente la propiedad TURNSERVER_ENABLED en el archivo /etc/default/coturn. Puedes usar nano para editar el archivo desde la terminal:

nano /etc/default/coturn

Asegúrese de que el contenido del archivo tenga la propiedad sin comentarios, así:

TURNSERVER_ENABLED=1

Guarde los cambios y continúe con el siguiente paso.

3. Haga una copia de seguridad y cree un archivo de configuración

Ahora que el servidor de turno está habilitado, debe modificar el archivo de configuración de acuerdo con sus necesidades. Asegúrese de hacer una copia de seguridad del archivo de configuración original que enumera todas las opciones posibles de coturn, en caso de que necesite restaurar en otra ocasión. Puede usar el siguiente comando para hacer eso:

# Mueva el archivo de configuración de Turnerver original a una copia de seguridad en el mismo directorio
mv /etc/turnserver.conf /etc/turnserver.conf.original

Esto básicamente cambiará el nombre del archivo. Luego, proceda a crear el archivo de configuración en el mismo directorio:

nano /etc/turnserver.conf

Y pega el siguiente contenido en él:

# /etc/turnserver.conf

# STUN server port is 3478 for UDP and TCP, and 5349 for TLS.
# Allow connection on the UDP port 3478
listening-port=3478
# and 5349 for TLS (secure)
tls-listening-port=5349

# Require authentication
fingerprint
lt-cred-mech

# We will use the longterm authentication mechanism, but if
# you want to use the auth-secret mechanism, comment lt-cred-mech and 
# uncomment use-auth-secret
# Check: https://github.com/coturn/coturn/issues/180#issuecomment-364363272
#The static auth secret needs to be changed, in this tutorial
# we'll generate a token using OpenSSL
# use-auth-secret
# static-auth-secret=replace-this-secret
# ----
# If you decide to use use-auth-secret, After saving the changes, change the auth-secret using the following command:
# sed -i "s/replace-this-secret/$(openssl rand -hex 32)/" /etc/turnserver.conf
# This will replace the replace-this-secret text on the file with the generated token using openssl. 

# Specify the server name and the realm that will be used
# if is your first time configuring, just use the domain as name
server-name=ourcodeworld.com
realm=ourcodeworld.com

# Important: 
# Create a test user if you want
# You can remove this user after testing
user=guest:somepassword

total-quota=100
stale-nonce=600

# Path to the SSL certificate and private key. In this example we will use
# the letsencrypt generated certificate files.
cert=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/cert.pem
pkey=/usr/local/psa/var/modules/letsencrypt/etc/live/ourcodeworld.com/privkey.pem

# Specify the allowed OpenSSL cipher list for TLS/DTLS connections
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"

# Specify the process user and group
proc-user=turnserver
proc-group=turnserver

Esta configuración básica generalmente funciona para la mayoría de las necesidades, sin embargo, en caso de que necesite configurar algo más, asegúrese de visitar los documentos oficiales de las propiedades de configuración aquí . No olvide que en este caso, incluimos un usuario de prueba en el archivo para probar el servidor TURN más adelante, sin embargo, puede eliminarlo y crearlo más tarde con turnadmin.

Hasta este punto, todo lo que necesitemos configurar en nuestro servidor debe estar hecho.

4. Cree registros DNS de STUN/TURN en tu administrador de DNS

Como mencionamos al principio del artículo, debe poseer algún dominio donde se alojará el servidor STUN / TURN. Necesitará crear 2 nuevos registros A usando turn y stun como host respectivamente apuntando a la IP pública de su servidor:

Create STUN/TURN DNS records GoDaddy Domain

Nuestro registrador es GoDaddy y ofrecen el sistema de administración de DNS, por lo que los creamos fácilmente con un formulario. Después de registrar los subdominios y esperar el tiempo adecuado para poder encontrarlos con una búsqueda de DNS, puede continuar con el siguiente paso.

5. Cree un usuario a largo plazo con turnadmin

Turnadmin viene incluido en el paquete predeterminado de coturn, esta aplicación es una herramienta de administración de relés TURN que le permite administrar los usuarios de su servidor turn / stun. Los clientes necesitarán credenciales para conectarse a su servidor de turno, por lo que puede registrarlos así:

sudo turnadmin -a -u USERNAME -r REALM -p PASSWORD

Por ejemplo, para crear un usuario de prueba, ejecutaría el siguiente comando (nombre de usuario brucewayne, reino ourcodeworld.com y contraseña 12345):

sudo turnadmin -a -u brucewayne -r ourcodeworld.com -p 12345

Tenga en cuenta que creamos previamente un solo usuario en el archivo /etc/turnserver.conf con texto sin formato configurando el nombre de usuario guest y la contraseña somepassword.

6. Enciende el servidor de coturn

Después de crear los usuarios y configurar correctamente coturn, podrá iniciar el servicio para que los clientes puedan conectarse a él. Continúe con la inicialización del servicio con el siguiente comando:

systemctl start coturn

Esto iniciará el servicio de coturn en el servidor. Puedes comprobar el estado del servicio con el siguiente comando:

systemctl status coturn

Que debería generar algo similar a:

Coturn Service Daemon Ubuntu 18.04

7. Prueba del servidor TURN / STUN

Afortunadamente, hay una herramienta en línea increíble que le permite verificar la funcionalidad de los servidores STUN / TURN. Esta herramienta es Trickle ICE , un proyecto de página WebRTC que prueba la funcionalidad del ICE en una implementación regular de WebRTC. Crea una PeerConnection con los ICEServers especificados (que contendrá la información de nuestro servidor implementado recientemente) y luego comienza la recopilación de candidatos para una sesión con un solo flujo de audio. A medida que se reúnen los candidatos, se muestran en el cuadro de texto a continuación, junto con una indicación cuando se completa la recopilación de candidatos.

Para comenzar, abra el sitio web de la herramienta en una nueva pestaña del navegador y comience a completar el formulario de servidores ICE. En el formulario, deberá proporcionar el URI STUN o TURN respectivamente con las credenciales (solo para el servidor TURN) de esta manera:

stun:stun.ourcodeworld.com:5349

turn:turn.ourcodeworld.com:5349

Como puede ver, los URI siguen el patrón de protocoli:dominio:puerto. El formulario se rellenaría así:

Stun/Turn server test Trickle ICE WebRTC

Luego, en la parte inferior de la página en las opciones de ICE, ejecute la prueba presionando el botón Recopilar candidatos:

Test TURN/STUN server online

La prueba debería generar algo similar a:

Result Testing WebRTC Trickle ICE Servers

Tenga en cuenta que esto sucede porque la herramienta tiene un error en los navegadores más recientes, sin embargo, siempre que pueda volver a ejecutar la prueba presionando Recopilar candidatos una y otra vez (para que el botón de recopilar candidatos no se bloquee) todo debería estar bien con el servidor STUN / TURN.

Notas

  • Asegúrese de que su servidor tenga abiertos los puertos 5349 y 3478.
  • Si está detrás de una NAT, por ejemplo, con una instancia Amazon EC2, asegúrese de configurar la IP externa en el archivo de configuración, como se menciona en esta pregunta en Stack Overflow .

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores