STUN Server: o que é, como funciona e onde é usado

Autor: IT Sectr Publicado: 2026-06-02 Tempo de leitura: 8 min

STUN Server é um servidor do protocolo Session Traversal Utilities for NAT (STUN) que permite a um cliente determinar seu endereço IP externo e porta, bem como o tipo de Network Address Translation (NAT) atrás do qual ele está. De acordo com IETF RFC 5389, 2008, o STUN é um componente obrigatório da infraestrutura WebRTC, permitindo o estabelecimento de conexão direta peer-to-peer entre clientes atrás de NAT.

Principais pontos

  • STUN Server é um nó de rede que ajuda um cliente a determinar seu endereço IP público e tipo de NAT para organizar conexões P2P.
  • Princípio — o cliente envia uma solicitação STUN, o servidor responde com o endereço IP e a porta de onde veio a solicitação, revelando os dados de endereço externo do cliente.
  • Papel no WebRTC — o servidor STUN é usado na etapa de coleta de candidatos ICE para coletar candidatos e verificar a possibilidade de uma conexão direta.
  • Limitação — o STUN não funciona com NAT simétrico (Symmetric NAT), onde o endereço externo muda para cada host de destino.
  • Alternativa — quando o STUN falha, um servidor TURN é usado, que retransmite o tráfego através de um nó de retransmissão.

O que é um STUN Server

STUN Server (Session Traversal Utilities for NAT) é um serviço de rede que opera sob o protocolo definido na RFC 5389 e atualizado na RFC 8489. A principal tarefa de um servidor STUN é fornecer ao cliente informações sobre seu próprio endereço IP público e porta, conforme vistos da rede externa, bem como determinar o tipo de dispositivo NAT entre o cliente e a internet.

A arquitetura STUN inclui dois componentes: um cliente STUN incorporado ao aplicativo (por exemplo, um navegador ou aplicativo nativo WebRTC) e um servidor STUN implantado na rede pública. O cliente envia uma Binding Request ao servidor, que em sua resposta indica o endereço IP e a porta de origem da solicitação — ou seja, os endereços públicos do cliente vistos pelo servidor. Ao comparar esses dados com seus endereços locais, o cliente pode determinar qual tipo de NAT está sendo usado em sua rede.

Protocolo STUN

STUN opera sobre UDP (porta 3478 por padrão) ou TCP (porta 3478 ou 5349 para TLS). Uma mensagem STUN consiste em um cabeçalho de 20 bytes e um número variável de atributos. O cabeçalho contém o tipo de mensagem (Binding Request, Binding Response, Binding Error Response), comprimento e um identificador de transação único (96 bits) que permite combinar solicitações e respostas. Cada Binding Response contém o atributo XOR-MAPPED-ADDRESS — o endereço externo do cliente, codificado com mascaramento para proteção contra ataques baseados em interceptação de tráfego STUN.

Como funciona um servidor STUN

Um servidor STUN opera em um protocolo simples de solicitação-resposta. O cliente atrás do NAT cria uma Binding Request e a envia ao servidor STUN. O servidor recebe o pacote, extrai o endereço IP de origem e a porta do remetente do cabeçalho UDP, então cria uma Binding Response, empacotando este endereço no atributo XOR-MAPPED-ADDRESS. A resposta é enviada de volta ao endereço de origem da solicitação.

O cliente recebe a resposta e extrai o XOR-MAPPED-ADDRESS, que contém o endereço IP externo e a porta atribuídos pelo dispositivo NAT. Em seguida, o cliente compara este endereço com seu endereço local (RFC 1919 — privado). Se os endereços coincidirem — o cliente não está atrás de NAT. Se diferirem — o cliente está atrás de NAT, e o endereço externo é usado como candidato para ICE (Interactive Connectivity Establishment) no WebRTC.

Processo de descoberta de NAT

Um servidor STUN permite determinar o tipo de NAT através de uma sequência de solicitações de teste. O cliente envia solicitações com diferentes flags (CHANGE-REQUEST) e analisa as respostas. O ciclo completo de descoberta inclui o envio de solicitações para diferentes endereços IP e portas do servidor STUN. Se o servidor responder a uma solicitação com uma porta alterada — o NAT é do tipo Restricted Cone. Se não responder a uma solicitação com porta e IP alterados — o NAT é do tipo Symmetric. Esta informação é fundamental para escolher a estratégia ICE no WebRTC.

Servidor STUN e tipos de NAT

Um servidor STUN pode detectar quatro tipos principais de NAT, cada um afetando diferentemente a capacidade de estabelecer uma conexão P2P. O tipo de NAT determina se o STUN pode permitir uma conexão direta entre dois clientes. Também determina qual candidato ICE — host, server reflexive ou relay — será usado para a conexão.

Tipo NATComportamentoSTUN funcionaFallback ICE
Full ConeQualquer host externo pode enviar um pacote ao clienteSimServer Reflexive
Restricted ConeApenas hosts para os quais o cliente enviou pacotesSimServer Reflexive
Port RestrictedIgual ao Restricted, mas também filtra por porta de origemSimServer Reflexive
Symmetric NATEndereço externo único para cada par host:portaNãoRelay (TURN)

Symmetric NAT é o único tipo com o qual o STUN não consegue lidar. Com Symmetric NAT, cada nova solicitação para um novo host de destino recebe um endereço externo diferente (IP e/ou porta). Como o servidor STUN informa o endereço para a conexão com o próprio servidor STUN, este endereço é inadequado para conectar-se a outro cliente. Nesses casos, o WebRTC usa um servidor TURN para retransmitir o tráfego. De acordo com pesquisas (Ford et al., RFC 3489, 2003), cerca de 8–10% de todos os dispositivos NAT na internet são simétricos.

Uso do servidor STUN no WebRTC

Um servidor STUN é integrado ao WebRTC através da configuração do RTCPeerConnection. Um navegador ou aplicativo nativo usa o STUN para coletar candidatos ICE, que são então trocados através do Signaling Server. Na configuração do WebRTC, o servidor STUN é especificado no array iceServers com o prefixo stun: para UDP ou stuns: para conexões TLS.

Vamos considerar um exemplo de configuração de um servidor STUN em JavaScript ao criar uma RTCPeerConnection para uma aplicação 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 exemplo usa os servidores STUN públicos do Google (stun.l.google.com:19302). Ao criar uma oferta ou resposta, o navegador envia automaticamente uma Binding Request STUN para os servidores especificados, recebe o endereço externo (candidato server reflexive) e o adiciona à lista de candidatos ICE. Após coletar todos os candidatos, eles são enviados ao par remoto através do Signaling Server para tentar estabelecer uma conexão P2P direta.

Tipos de candidatos ICE e STUN

No processo ICE, existem três tipos de candidatos: host (endereço local), srflx (server reflexive — obtido do STUN) e relay (retransmitido através de TURN). O servidor STUN possibilita a criação de candidatos srflx, que têm prioridade maior que os candidatos relay porque uma conexão baseada em STUN é direta e não requer retransmissão. O processo ICE verifica todas as combinações de candidatos (locais e obtidos do STUN) de ambos os pares, começando pelas prioridades mais altas.

Limitações do protocolo STUN

Um servidor STUN tem limitações fundamentais relacionadas à arquitetura do protocolo. A principal limitação é a incapacidade de funcionar com Symmetric NAT, onde cada nova solicitação a um host externo recebe uma porta externa única. Neste caso, o endereço obtido do servidor STUN não pode ser usado para conectar-se a outro par porque o NAT criou uma ligação apenas para comunicação com o próprio servidor STUN.

A segunda limitação é que o STUN não fornece retransmissão de dados. Se a conexão P2P direta for impossível (ambos os pares atrás de Symmetric NAT), o STUN não oferece um caminho alternativo para transmissão de dados. Neste caso, um servidor TURN é necessário, que atua como um retransmissor de tráfego de mídia entre os pares, recebendo dados de um participante e enviando-os a outro através de seu endereço IP público.

  • Symmetric NAT — o STUN não funciona com NAT simétrico porque o endereço externo é único para cada host de destino e não pode ser reutilizado para P2P.
  • Firewall com inspeção profunda de pacotes — alguns firewalls bloqueiam o tráfego STUN detectando assinaturas do protocolo em pacotes UDP na porta 3478.
  • IPv6 — em redes IPv6, o NAT normalmente não é usado, portanto o STUN não é necessário, mas o WebRTC em IPv6 pode usar candidatos host sem precisar de STUN ou TURN.
  • Dependência de disponibilidade — o servidor STUN deve estar acessível ao cliente durante a fase de estabelecimento da conexão, caso contrário os candidatos srflx não serão coletados.
  • Segurança — o protocolo STUN é vulnerável a ataques de amplificação se o servidor estiver mal configurado e responder a solicitações com endereço de origem falsificado.

Apesar das limitações, um servidor STUN continua sendo um componente crítico da infraestrutura WebRTC. Na maioria dos casos (80–90%), uma conexão P2P direta pode ser estabelecida usando STUN, o que evita os custos de retransmissão TURN e reduz a latência de transmissão de dados de mídia. Para aplicações WebRTC públicas, recomenda-se usar uma combinação de servidores STUN e TURN com fallback automático.

Perguntas frequentes

O que é um servidor STUN em termos simples?

Um servidor STUN é um "espelho" na internet que informa a um cliente seu endereço IP externo. Quando um computador está atrás de um roteador (NAT), ele não sabe seu endereço público. O servidor STUN ajuda a descobri-lo para que outros computadores possam conectar-se diretamente.

Como um servidor STUN é usado no WebRTC?

No WebRTC, o servidor STUN é especificado na configuração do RTCPeerConnection. O navegador envia uma solicitação STUN para obter o endereço externo do candidato (srflx). Este candidato é transmitido ao par remoto através do Signaling Server, e o ICE tenta estabelecer uma conexão direta entre eles.

Qual é a diferença entre servidores STUN e TURN?

STUN ajuda a descobrir o endereço externo para uma conexão P2P direta. TURN retransmite o tráfego através de seu servidor quando o P2P não é possível. STUN é um "espelho", TURN é um "intermediário". TURN cria carga no servidor e adiciona latência, portanto o STUN é preferido.

Quais servidores STUN públicos podem ser usados?

O Google fornece servidores STUN gratuitos: stun.l.google.com:19302, stun1.l.google.com:19302. A Twilio também fornece infraestrutura STUN + TURN através do Network Traversal Service. Para aplicações de produção, é melhor usar servidores STUN/TURN próprios ou comerciais com disponibilidade garantida.

Por que o STUN não funciona com Symmetric NAT?

O Symmetric NAT cria um mapeamento de porta externa único para cada par "endereço local:endereço externo de destino". O endereço que o cliente recebe do servidor STUN está vinculado à conexão com aquele servidor STUN. Quando outro par tenta usar este endereço, o Symmetric NAT bloqueia o pacote porque o mapeamento de porta difere para o novo endereço de destino.

Resumo

  • STUN Server é um nó de rede que implementa o protocolo RFC 5389 para determinar o endereço IP externo e a porta de um cliente atrás de NAT.
  • Princípio de funcionamento — o cliente envia uma Binding Request, o servidor responde com XOR-MAPPED-ADDRESS contendo o endereço público da origem da solicitação.
  • Tipos de NAT — o STUN funciona com Full Cone, Restricted Cone e Port Restricted NAT, mas não consegue lidar com Symmetric NAT.
  • Papel no WebRTC — o STUN é usado na etapa de coleta de candidatos ICE para formar candidatos srflx com endereço externo.
  • Limitações — não funciona com Symmetric NAT, pode ser bloqueado por firewalls DPI, não fornece retransmissão de dados.
  • Servidores gratuitos — stun.l.google.com:19302 e outros servidores STUN públicos são suficientes para testes e a maioria dos cenários.
  • Recomendação — sempre use STUN em combinação com um servidor TURN como fallback para garantir conexão em qualquer condição de rede.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também