Las aplicaciones WebRTC requieren un servidor para retransmitir el tráfico entre los clientes a través de Internet. El servidor que retransmite ese tráfico se denomina servidor TURN (Traversal Using Relay NAT). TURN es un protocolo para retransmitir tráfico de red; en esta guía rápida, describimos cómo configurar un servidor stun/coturn para usar BigBlueButton, Jitsi Meet, Nextcloud Talk (Hub) y muchos más.
Este artículo esta basado en la guía que puedes encontrar en https://www.c-rieger.de/stun-coturn-server-turnserver-auf-ubuntu-22-04/
Inicie sesión como usuario privilegiado y descargue el paquete necesario:
sudo -s
wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/c/coturn/coturn_4.5.2-3.1~ubuntu22.04.1_amd64.deb
Instale el paquete y haga una copia del archivo de configuración inicial.
apt install coturn*.deb
mv /etc/turnserver.conf /etc/turnserver.conf.bak
apt install -y certbot
Configure el firewall y, si es necesario, ajuste el puerto SSH (22) sobre:
apt install -y ufw
ufw allow 22/tcp comment "SSH"
ufw allow 80/tcp comment "LetsEncrypt"
ufw allow 443/tcp comment "Turnserver"
ufw allow 443/udp comment "Turnserver"
ufw logging medium
ufw default deny incoming
ufw enable
systemctl enable ufw.service
systemctl restart ufw.service
Solicita tus certificados, es importante que el puerto 80/TCP esté abierto. Por favor reemplace el dominio marcado por el tuyo propio:
sudo certbot certonly --standalone --preferred-challenges http -d coturn.dominio.es
Genere las carpetas y una clave Diffie-Hellman para habilitar el intercambio seguro de claves.
mkdir -p /etc/turnserver /etc/letsencrypt/renewal-hooks/deploy
openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 4096
Ahora cree el siguiente archivo para renovar los certificados
nano /etc/letsencrypt/renewal-hooks/deploy/coturn
y reemplace el dominio etiquetado por el suyo propio:
#!/bin/bash -e
for certfile in fullchain.pem privkey.pem ; do
cp -L /etc/letsencrypt/live/coturn.dominio.es/"${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
Haz que este archivo sea ejecutable:
chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn
Cree un nuevo archivo de configuración:
nano /etc/turnserver.conf
y agrega todo el contenido:
tls-listening-port=443
#Ip externa = x.x.x.x « cambiala por la tuya
listening-ip=x.x.x.x
relay-ip=x.x.x.x
min-port=32769
max-port=65535
verbose
fingerprint
use-auth-secret
# por ejemplo, para generar con 'openssl rand -hex 32'
static-auth-secret=Clave Secreta
realm=coturn.dominio.es
cert=/Ruta/al/Certificado.cer
pkey=/Ruta/a la/Clave del certificado.key
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
# syslog
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
no-multicast-peers
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
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
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
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
Puede encontrar un archivo de configuración de muestra aquí . Finalmente, configuramos la rotación de registros, para lo cual creamos este archivo
nano /etc/logrotate.d/coturn
y pegar todo el contenido.
/var/log/turnserver/*.log
{
rotate 7
daily
missingok
notifempty
compress
postrotate
/bin/systemctl kill -s HUP coturn.service
endscript
}
Ahora cree la carpeta para los archivos de registro.
mkdir -p /var/log/turnserver
Para aumentar el controlador de archivos (LimitNOFILE=1048576) y dar a coturn la posibilidad de vincular el puerto 443, creamos una carpeta y un archivo.
mkdir -p /etc/systemd/system/coturn.service.d
nano /etc/systemd/system/coturn.service.d/override.conf
Pegar todo el contenido:
[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
Establezca los permisos necesarios:
chown turnserver:turnserver /var/log/turnserver
Ejecute el siguiente comando, luego vuelva a cargar los servicios y finalmente reinicie el servicio coturn:
/etc/letsencrypt/renewal-hooks/deploy/coturn
systemctl daemon-reload
systemctl restart coturn.service
Compruebe si el puerto 443 estaba vinculado por el (co-) turnserver :
netstat -antp | grep 443
También puede verificar la función a través de la consola desde otro cliente Linux.
Prueba de conexión UDP:
turnutils_uclient -p 443 -W Clave Secreta -v -y coturn.dominio.es
Prueba de conexión TCP:
turnutils_uclient -t -p 443 -W Clave Secreta -v -y coturn.dominio.es
La instalación del servidor stun/coturn bajo Ubuntu 22.04 se completó con éxito.