STUN (sigla en inglés de Simple Transversal Utilities for NAT) es un protocolo de red del tipo cliente/servidor que permite a clientes NAT encontrar su dirección IP pública, el tipo de NAT en el que se encuentra y el puerto de Internet asociado con el puerto local a través de NAT.
Un servidor STUN permite a los clientes que se conecten a un servidor alojado en una red local distinta, en donde el cliente tiene que pasar a través de un NAT (firewall, router, etc.). El servidor STUN ayuda a los clientes a encontrar sus direcciones públicas como también el tipo de NAT al que se encuentran conectados y logra identificar el puerto externo asociado al NAT con el puerto local especifico, de esta manera utiliza toda esta información para establecer comunicación UDP entre el cliente y el servidor de VozIP para lograr un trafico exitoso en la llamada.
Una breve explicación del significado de NAT (Network Address Translation).
Es un mecanismo utilizado por routers IP para intercambiar paquetes entre dos redes que asignan mutuamente direcciones incompatibles. Consiste en convertir, en tiempo real, las direcciones utilizadas en los paquetes transportados. También es necesario editar los paquetes para permitir la operación de protocolos que incluyen información de direcciones dentro de la conversación del protocolo.
Su uso más común es permitir utilizar direcciones privadas (definidas en el RFC 1918) para acceder a Internet. Existen rangos de direcciones privadas que pueden usarse libremente y en la cantidad que se quiera dentro de una red privada.
Existen 4 Tipos de NAT y los router cuentan con la función de uno de estos NAT.
Full Cone NAT (NAT estático)
Un NAT de Full Cone (conocido como NAT uno a uno) es el único tipo de NAT donde el puerto esta permanentemente abierto y permite conexiones entrantes desde cualquier host externo. Este NAT asigna una dirección IP pública y un puerto a una LAN IP y puerto. Cualquier host externo puede enviar datos a la IP LAN a través de la IP y el puerto NAT correlacionados. Si se intenta enviar datos a través de un puerto diferente, fallará.
Restricted Cone (NAT dinámica)
Funciona de la misma manera que un Full Cone NAT , pero aplica restricciones adicionales basadas en una dirección IP. El cliente interno primero debe haber enviado paquetes a la dirección IP (X) antes de que pueda recibir paquetes de X.
Port Restricted Cone (NAT dinámica)
Este tipo de NAT actua de la misma manera que el anterior (Restricted Cone), solo se le agregan restricciones a los puertos. El NAT Restricted Cone acepta conexiones desde cualquier puerto de origen, mientras que Port Restricted Cone restringe esto aún más al aceptar únicamente las conexiones desde la dirección IP y el puerto al que envió la solicitud de salida.
Symmetric NAT (NAT dinámica)
Una NAT simétrica aplica restricciones exactamente de la misma manera que una NAT Port Restricted Cone, pero maneja la traducción de NAT de manera diferente. Todos los tipos de NAT discutidos hasta ahora no cambian el puerto de origen cuando hacen NAT a una conexión. Por ejemplo, cuando un cliente accede a Internet utilizando IP 192.168.0.1 y el puerto de origen es 56723 el NAT cambia la IP de origen para decir 56.35.67.35 pero mantiene el número de puerto igual; esto se conoce como la preservación del puerto, en cambio el NAT simétrico por cada requerimiento saliente se asigna un puerto aleatorio y éste varía para cada comunicación, adicionalmente conserva las restricciones del Port Restricted Cone NAT. Por lo tanto cuando el host destino intenta enviar un paquete a la dirección origen, el router NAT rechazaría el paquete porque no reconoce al que envía el paquete como un host “autorizado” a enviar a esa dirección. La ventaja de la NAT simétrica, es que varias máquinas internas con el mismo puerto origen, pueden establecer comunicaciones al mismo tiempo y por este motivo, este tipo de NAT es una buena opción cuando varias máquinas internas salen por el mismo Gateway, el cual solo tiene una IP pública y adicionalmente las aplicaciones de estos equipos originen un requerimiento desde el mismo puerto.
El servidor STUN no funcionará con symmetric NAT (también conocido como NAT bidireccional) el cual se encuentra normalmente en las redes de empresas grandes. Con NAT simétrico, la dirección IP del servidor STUN es diferente de la del punto de destino y además, el mapeado NAT del servidor también sería diferente al mapeado que el destino final utilizaría para enviar paquetes a través del cliente.