STUN Server: qué es, cómo funciona y dónde se utiliza

Autor: IT Sectr Publicado: 2026-06-02 Tiempo de lectura: 8 min

STUN Server es un servidor del protocolo Session Traversal Utilities for NAT (STUN) que permite a un cliente determinar su dirección IP externa y puerto, así como el tipo de Traducción de Direcciones de Red (NAT) detrás del que se encuentra. Según IETF RFC 5389, 2008, STUN es un componente obligatorio de la infraestructura WebRTC, que permite establecer una conexión directa peer-to-peer entre clientes detrás de NAT.

Puntos clave

  • STUN Server es un nodo de red que ayuda a un cliente a determinar su dirección IP pública y el tipo de NAT para organizar conexiones P2P.
  • Principio — el cliente envía una solicitud STUN, el servidor responde con la dirección IP y el puerto desde los que llegó la solicitud, revelando los datos de dirección externa del cliente.
  • Rol en WebRTC — el servidor STUN se utiliza en la etapa de recopilación de candidatos ICE para recolectar candidatos y verificar la posibilidad de una conexión directa.
  • Limitación — STUN no funciona con NAT simétrico (Symmetric NAT), donde la dirección externa cambia para cada host de destino.
  • Alternativa — cuando STUN falla, se utiliza un servidor TURN, que retransmite el tráfico a través de un nodo de retransmisión.

Qué es un STUN Server

STUN Server (Session Traversal Utilities for NAT) es un servicio de red que opera según el protocolo definido en RFC 5389 y actualizado en RFC 8489. La tarea principal de un servidor STUN es proporcionar al cliente información sobre su propia dirección IP pública y puerto, tal como se ven desde la red externa, así como determinar el tipo de dispositivo NAT entre el cliente e internet.

La arquitectura STUN incluye dos componentes: un cliente STUN integrado en la aplicación (por ejemplo, un navegador o una aplicación nativa WebRTC) y un servidor STUN desplegado en la red pública. El cliente envía una solicitud de enlace (Binding Request) al servidor, que en su respuesta indica la dirección IP y el puerto de origen de la solicitud, es decir, las direcciones públicas del cliente que el servidor ve. Al comparar estos datos con sus direcciones locales, el cliente puede determinar qué tipo de NAT se utiliza en su red.

Protocolo STUN

STUN funciona sobre UDP (puerto 3478 por defecto) o TCP (puerto 3478 o 5349 para TLS). Un mensaje STUN consta de un encabezado de 20 bytes y un número variable de atributos. El encabezado contiene el tipo de mensaje (Binding Request, Binding Response, Binding Error Response), la longitud y un identificador único de transacción (96 bits) que permite emparejar solicitudes y respuestas. Cada Binding Response contiene el atributo XOR-MAPPED-ADDRESS, la dirección externa del cliente, codificada con enmascaramiento para protegerse contra ataques basados en la interceptación del tráfico STUN.

Cómo funciona un servidor STUN

Un servidor STUN funciona con un protocolo simple de solicitud-respuesta. Un cliente detrás de NAT crea una Binding Request y la envía al servidor STUN. El servidor recibe el paquete, extrae la dirección IP de origen y el puerto del remitente del encabezado UDP, luego crea una Binding Response, empaquetando esta dirección en el atributo XOR-MAPPED-ADDRESS. La respuesta se envía de vuelta a la dirección de origen de la solicitud.

El cliente recibe la respuesta y extrae la XOR-MAPPED-ADDRESS, que contiene la dirección IP externa y el puerto asignados por el dispositivo NAT. Luego, el cliente compara esta dirección con su dirección local (RFC 1919 — privada). Si las direcciones coinciden, el cliente no está detrás de NAT. Si difieren, el cliente está detrás de NAT y la dirección externa se utiliza como candidato para ICE (Interactive Connectivity Establishment) en WebRTC.

Proceso de descubrimiento de NAT

Un servidor STUN permite determinar el tipo de NAT mediante una secuencia de solicitudes de prueba. El cliente envía solicitudes con diferentes banderas (CHANGE-REQUEST) y analiza las respuestas. El ciclo completo de descubrimiento incluye el envío de solicitudes a diferentes direcciones IP y puertos del servidor STUN. Si el servidor responde a una solicitud con un puerto cambiado, el NAT es de tipo Restricted Cone. Si no responde a una solicitud con puerto e IP cambiados, el NAT es de tipo Symmetric. Esta información es crítica para elegir la estrategia ICE en WebRTC.

Servidor STUN y tipos de NAT

Un servidor STUN puede detectar cuatro tipos principales de NAT, cada uno de los cuales afecta de manera diferente la posibilidad de establecer una conexión P2P. El tipo de NAT determina si STUN puede permitir una conexión directa entre dos clientes. También determina qué candidato ICE — host, server reflexive o relay — se utilizará para la conexión.

Tipo NATComportamientoSTUN funcionaFallback ICE
Full ConeCualquier host externo puede enviar un paquete al clienteServer Reflexive
Restricted ConeSolo hosts a los que el cliente ha enviado paquetesServer Reflexive
Port RestrictedIgual que Restricted, pero también filtra por puerto de origenServer Reflexive
Symmetric NATDirección externa única para cada par host:puertoNoRelay (TURN)

Symmetric NAT es el único tipo con el que STUN no puede funcionar. Con Symmetric NAT, cada nueva solicitud a un nuevo host de destino obtiene una dirección externa diferente (IP y/o puerto). Dado que el servidor STUN informa la dirección para la conexión con el propio servidor STUN, esta dirección no es adecuada para conectarse a otro cliente. En tales casos, WebRTC utiliza un servidor TURN para retransmitir el tráfico. Según investigaciones (Ford et al., RFC 3489, 2003), aproximadamente el 8-10% de todos los dispositivos NAT en internet son simétricos.

Uso del servidor STUN en WebRTC

Un servidor STUN se integra en WebRTC a través de la configuración de RTCPeerConnection. Un navegador o aplicación nativa utiliza STUN para recopilar candidatos ICE, que luego se intercambian a través del Signaling Server. En la configuración de WebRTC, el servidor STUN se especifica en el array iceServers con el prefijo stun: para UDP o stuns: para conexiones TLS.

Veamos un ejemplo de configuración de un servidor STUN en JavaScript al crear una RTCPeerConnection para una aplicación WebRTC.

js
const config = {
    iceServers: [
        {
            urls: "stun:stun.l.google.com:19302"
        },
        {
            urls: "stun:stun1.l.google.com:19302"
        }
    ]
};

const pc = new RTCPeerConnection(config);

pc.onicecandidate = (event) => {
    if (event.candidate) {
        console.log("Candidato ICE:", event.candidate.candidate);
    }
};

const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

Este ejemplo utiliza los servidores STUN públicos de Google (stun.l.google.com:19302). Al crear una oferta o respuesta, el navegador envía automáticamente una Binding Request STUN a los servidores especificados, recibe la dirección externa (candidato server reflexive) y la añade a la lista de candidatos ICE. Después de recopilar todos los candidatos, se envían al peer remoto a través del Signaling Server para intentar establecer una conexión P2P directa.

Tipos de candidatos ICE y STUN

En el proceso ICE, existen tres tipos de candidatos: host (dirección local), srflx (server reflexive — obtenido de STUN) y relay (retransmitido a través de TURN). El servidor STUN permite la creación de candidatos srflx, que tienen mayor prioridad que los candidatos relay porque una conexión basada en STUN es directa y no requiere retransmisión. El proceso ICE verifica todas las combinaciones de candidatos (locales y obtenidos de STUN) de ambos peers, comenzando por las prioridades más altas.

Limitaciones del protocolo STUN

Un servidor STUN tiene limitaciones fundamentales relacionadas con la arquitectura del protocolo. La limitación principal es la incapacidad de funcionar con Symmetric NAT, donde cada nueva solicitud a un host externo obtiene un puerto externo único. En este caso, la dirección obtenida del servidor STUN no puede utilizarse para conectarse a otro peer porque el NAT creó un enlace solo para la comunicación con el propio servidor STUN.

La segunda limitación es que STUN no proporciona retransmisión de datos. Si la conexión P2P directa es imposible (ambos peers detrás de Symmetric NAT), STUN no ofrece una ruta alternativa para la transmisión de datos. En este caso, se requiere un servidor TURN, que actúa como retransmisor de tráfico de medios entre los peers, recibiendo datos de un participante y enviándolos a otro a través de su dirección IP pública.

  • Symmetric NAT — STUN no funciona con NAT simétrico porque la dirección externa es única para cada host de destino y no se puede reutilizar para P2P.
  • Firewall con inspección profunda de paquetes — algunos cortafuegos bloquean el tráfico STUN detectando firmas del protocolo en paquetes UDP en el puerto 3478.
  • IPv6 — en redes IPv6, normalmente no se usa NAT, por lo que no se requiere STUN, pero WebRTC en IPv6 puede usar candidatos host sin necesidad de STUN o TURN.
  • Dependencia de disponibilidad — el servidor STUN debe ser accesible para el cliente durante la fase de establecimiento de conexión, de lo contrario no se recopilarán los candidatos srflx.
  • Seguridad — el protocolo STUN es vulnerable a ataques de amplificación si el servidor está mal configurado y responde a solicitudes con dirección de origen falsificada.

A pesar de las limitaciones, un servidor STUN sigue siendo un componente crítico de la infraestructura WebRTC. En la mayoría de los casos (80-90%), se puede establecer una conexión P2P directa usando STUN, lo que evita los costos de retransmisión TURN y reduce la latencia de transmisión de datos multimedia. Para aplicaciones WebRTC públicas, se recomienda usar una combinación de servidores STUN y TURN con fallback automático.

Preguntas frecuentes

¿Qué es un servidor STUN en términos simples?

Un servidor STUN es un "espejo" en internet que le dice a un cliente su dirección IP externa. Cuando una computadora está detrás de un enrutador (NAT), no conoce su dirección pública. El servidor STUN ayuda a descubrirla para que otras computadoras puedan conectarse directamente.

¿Cómo se utiliza un servidor STUN en WebRTC?

En WebRTC, el servidor STUN se especifica en la configuración de RTCPeerConnection. El navegador envía una solicitud STUN para obtener la dirección externa del candidato (srflx). Este candidato se transmite al peer remoto a través del Signaling Server, e ICE intenta establecer una conexión directa entre ellos.

¿Cuál es la diferencia entre servidores STUN y TURN?

STUN ayuda a descubrir la dirección externa para una conexión P2P directa. TURN retransmite el tráfico a través de su servidor cuando P2P no es posible. STUN es un "espejo", TURN es un "intermediario". TURN crea carga en el servidor y añade latencia, por lo que se prefiere STUN.

¿Qué servidores STUN públicos se pueden usar?

Google proporciona servidores STUN gratuitos: stun.l.google.com:19302, stun1.l.google.com:19302. Twilio también proporciona infraestructura STUN + TURN a través de su Network Traversal Service. Para aplicaciones de producción, es mejor usar servidores STUN/TURN propios o comerciales con disponibilidad garantizada.

¿Por qué STUN no funciona con Symmetric NAT?

Symmetric NAT crea una asignación de puerto externo única para cada par "dirección local:dirección externa de destino". La dirección que el cliente recibe del servidor STUN está vinculada a la conexión con ese servidor STUN. Cuando otro peer intenta usar esta dirección, Symmetric NAT bloquea el paquete porque la asignación de puerto es diferente para la nueva dirección de destino.

Resumen

  • STUN Server es un nodo de red que implementa el protocolo RFC 5389 para determinar la dirección IP externa y el puerto de un cliente detrás de NAT.
  • Principio de funcionamiento — el cliente envía una Binding Request, el servidor responde con XOR-MAPPED-ADDRESS que contiene la dirección pública del origen de la solicitud.
  • Tipos de NAT — STUN funciona con Full Cone, Restricted Cone y Port Restricted NAT, pero no puede manejar Symmetric NAT.
  • Rol en WebRTC — STUN se utiliza en la etapa de recopilación de candidatos ICE para formar candidatos srflx con dirección externa.
  • Limitaciones — no funciona con Symmetric NAT, puede ser bloqueado por firewalls DPI, no proporciona retransmisión de datos.
  • Servidores gratuitos — stun.l.google.com:19302 y otros servidores STUN públicos son suficientes para pruebas y la mayoría de escenarios.
  • Recomendación — use siempre STUN en combinación con un servidor TURN como fallback para garantizar la conexión en cualquier condición de red.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también