Como configurar su propio servidor STUN/TURN

En este articulo veremos como instalar un Servidor STUN/TURN. En este caso se ha optado por coTURN que se utiliza mucho también con WebRTC.

La idea es configurar el servidor para luego utilizarlo con Teléfonos/servidores Asterisk que se encuentran detrás de un NAT y necesitan comunicarse con el “exterior”.

Como se va a compilar desde las fuentes, se necesita tener instalados todos los programas de compilación (se trabajará con CentOS 6.7 64bit)

coTURN tiene como dependencia libevent2 que hay que compilar e instalar antes del servidor STUN/TURN. Se descarga la ultima versión disponible:

cd /usr/src

wget https://github.com/libevent/libevent/releases/download/release-2.0.22-st...
tar -xf libevent-2.0.22-stable.tar.gz
cd libevent-2.0.22-stable
./configure
make
make install

Se descarga la ultima versión disponible de coTURN:

cd /usr/usr

wget https://github.com/coturn/coturn/archive/4.5.0.3.tar.gz
tar -xf 4.5.0.3.tar.gz
cd coturn-4.5.0.3
mkdir -p /opt/coturn
./configure --prefix=/opt/coturn
make
make install

Una vez instalado inicia la parte de la configuración. Se crea el archivo de configuración tomando como referencia el archivo predefinido presente en la carpeta:

cd /opt/coturn/etc

nano turnserver.conf

Se añaden las líneas que siguen. En el archivo predefinido se explica el significado de cada una de ellas:

listening-port=3478
tls-listening-port=5349
alt-listening-port=0
alt-tls-listening-port=0
listening-ip=1.2.3.4
relay-ip=1.2.3.4
Verbose
fingerprint
userdb=/opt/coturn/var/db/turndb
check-origin-consistency
stale-nonce
no-stdout-log
max-allocate-timeout=60
pidfile="/var/run/turnserver.pid"
cli-ip=127.0.0.1
cli-port=5766
cli-password=sesamo

Se modifica 1.2.3.4 con la IP publica del servidor donde están instalando coTURN.

IMPORTANTE: con esta configuración cualquiera puede realizar consultas al servidor TURN/STUN. Si quieren que cada cliente se autentique, en el archivo de configuración hay una parte que explica como crear usuarios con sus respectivas contraseñas; claramente luego va modificada la configuración de este archivo para que acepte solamente consultas autenticadas.

Se guardan los cambios y se inicia el programa como servicio:

/opt/coturn/bin/turnserver -c /opt/coturn/etc/turnserver.conf –o

Si se quiere que se inicie en automático con el servidor:

nano /etc/rc.local

y al final del archivo se añade:

/opt/coturn/bin/turnserver -c /opt/coturn/etc/turnserver.conf -o

Se guardan los cambios. Para averiguar la configuración y el funcionamiento del programa, podemos acceder a su consola:

telnet 127.0.0.1 5766

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TURN Server
Coturn-4.5.0.3 'dan Eider'

Type '?' for help
Enter password:

Se escribe la contraseña y se presiona la tecla Intro/Enter/Envío. Para saber los comandos disponibles:

> help

Para conocer la configuración del programa:

> pc

Para salir:

> quit

Es una buena practica configurar un subdominio en su servidor DNS que apunte a la IP donde se encuentra instalado coTURN (tipo stun.miodominio.org). Luego hay que abrir los siguientes puertos UDP y TCP en el cortafuegos:

3478
3479
5349
5350

Ahora se realizarán dos pruebas. La primera es configurar el modulo res_stun_monitor en Asterisk (presente desde la versión 1.8). Este modulo, para servidores Asterisk que se encuentran detrás de un NAT, permite renovar todos los registros (REGISTER) (de tipo SIP y IAX2) hacia proveedores externos cuando se detecta un cambio en la IP publica detrás de la cual se encuentra el servidor. Este cambio se detecta a través de la consulta realizada al servidor STUN. Los pasos a seguir son:

  1. modificar el archivo sip.conf para activar esta funcionalidad
  2. modificar el archivo iax.conf para activar esta funcionalidad
  3. modificar la configuración del archivo res_stun_monitor.conf
  4. reiniciar Asterisk

nano /etc/asterisk/sip.conf

asegurarse que el siguiente parámetro esté presente:

subscribe_network_change_event = yes

Se guardan los cambios.

nano /etc/asterisk/iax.conf

asegurarse que el siguiente parámetro esté presente:

subscribe_network_change_event = yes

Se guardan los cambios.

renombrar el archivo predefinido del modulo res_stun_monitor:

mv /etc/asterisk/res_stun_monitor.conf /etc/asterisk/res_stun_monitor.conf.old

crear uno nuevo:

nano /etc/asterisk/res_stun_monitor.conf

donde se añaden las siguientes líneas:

[general]
stunaddr = stun.miodominio.org:3478
stunrefresh = 15

Antes de guardas los cambios se modifica stun.miodominio.org con el subdominio de su servidor STUN/TURN o en su ausencia, la IP. Cada 15 segundos se realizará la consulta al servidor STUN. Ya se puede reiniciar Asterisk:

service asterisk restart

Se entra en la consola:

asterisk –rvvvvvvvvvvvvvvv

se desactiva el modulo res_stun_monitor:

CLI> module unload res_stun_monitor.so

En el servidor donde se encuentra instalado coTURN se activa la captura de los paquetes sobre el puerto 3478:

ngrep –W byline port 3478

Se vuelve al servidor Asterisk y se recarga el modulo:

CLI> module load res_stun_monitor.so

El resultado lado Asterisk:

image 

Lado Ngrep:

Capture

La segunda prueba es configurar Grandstream Wave (el Softphone) para que utilice el servidor STUN que se acaba de crear. En la configuración de la cuenta del softphone:

stun2

En las opciones avanzadas:

stun1

Se desactiva y se activa nuevamente la cuenta. En la captura Ngrep aparecerán también la consultas procedentes del Softphone. No depender de servidores STUN/TURN externos es seguramente una buena cosa. ¿Que opinan?

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Como configurar su propio servidor STUN/TURN" Suscribirse a VozToVoice - Todos los comentarios