STUN es la abreviatura de “Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NAT’s)”, es decir cómo hacer que los paquetes UDP atraviesen traductores de direcciones IP (NAT). Este protocolo es utilizado en una gran variedad de escenarios e implementaciones de red diferentes, una de ellas la VoIP. Dada la forma en que trabajan los protocolos utilizados en una llamada VoIP basada en SIP, al hacer llamadas entre dos entidades SIP corriendo detrás de dispositivos NAT como un router o firewall (escenarios muy comunes en redes hogareñas y empresariales), los usuarios encuentran normalmente muchos problemas, como audio en un solo sentido o fallas en la registración al intentar registrarse en un proveedor VoIP o una IP PBX que no reside en la misma red. STUN es un protocolo que ayuda a resolver problemas en implementaciones VoIP como esa.

Objetivo del protocolo STUN

El objetivo principal del protocolo STUN es el de permitir que dispositivos corriendo detrás de NAT descubran su dirección IP pública y el tipo de NAT al que están siendo sometidos. También permite que el dispositivo descubra la traducción de puerto que está realizando el dispositivo NAT; es decir qué puerto pueden utilizar dispositivos externos para conectarse desde afuera de la red. Note que los routers y firewalls no siempre hacen traducción de puertos; eso depende del tipo de NAT que están realizando y cómo esté configurada. Por ejemplo, la configuración de NAT de tipo “Full Cone” no realiza traducción de puertos.

STUN también puede utilizarse para refrescar las entradas de NAT registradas; como un mecanismo de mantenimiento de conexión al utilizar NAT de tipo “Restricted Cone” o “Port Restricted Cone”. Cuando el tráfico atraviesa estas configuraciones de NAT, las direcciones IP y puertos internos son mapeados a direcciones IP y puertos específicos externos. Pero si estas traducciones de direcciones no son utilizadas luego de cierto tiempo (dependiendo de la configuración del dispositivo), estos mapeos son eliminados automáticamente. Por lo tanto cuando un dispositivo interno intenta conectarse nuevamente a una entidad externa (que podría ser una entidad a la que ya estaba conectado) utilizando la misma dirección IP interna y puerto, el router podría de todos modos asignar un mapeo de direcciones diferente, es decir una dirección IP y puerto distintos a los asignados previamente.

El protocolo STUN

STUN es un protocolo cliente-servidor. Un servidor STUN normalmente opera tanto en TCP como en UDP y escucha en el puerto 3478. Un cliente normalmente contacta al servidor STUN en una dirección IP y puerto (3478) específico, pero el servidor también puede sugerir a los clientes que realicen las verificaciones en direcciones IP y puerto alternativos arbitrarios.

Escenario de pedido y respuesta STUN

En el diagrama de abajo podemos observar un pedido STUN típico con su respuesta asociada:

  • Fase 1: La computadora A envía un pedido de STUN a través del gateway 192.168.1.1 hacia el servidor STUN fuera de la red, escuchando en la dirección IP 64.25.58.65, utilizando el puerto de origen 5060.
  • Fase 2: El gateway (192.168.1.1) reenvía el pedido al servidor STUN (64.25.58.65) y cambia el puerto de origen 5060 por el 15060.
  • Fase 3: El servidor STUN (64.25.58.65) envía una respuesta a la computadora A a través del gateway cuya dirección IP pública es 212.128.56.125, especificando que el pedido fue recibido desde la dirección IP 212.128.56.125 y puerto 15060.

Cuando la computadora A establece una sesión, por ejemplo una llamada VoIP basada en SIP con una entidad externa, puede notificar a la entidad externa que envíe las respuestas a la dirección IP 212.128.56.125 y puerto 15060. Como se observa arriba, el protocolo STUN juega un papel muy importante al ayudar a dos dispositivos corriendo detrás de NAT a establecer una conexión UDP.

STUN también tiene sus contras; no funciona correctamente con redes utilizando NAT simétrico. Dado que el NAT simétrico crea un nuevo mapeo de dirección IP y puerto cada vez que un equipo interno intenta conectarse a uno externo, STUN no es una buena solución en ese escenario. En un próximo artículo veremos a modo de ejemplo algunas capturas de pedidos de STUN desde dispositivos VoIP y explicaremos cómo este protocolo ayuda a resolver problemas en el establecimiento de las conexiones en entornos VoIP.