STUN Server: cos'è, come funziona e dove viene utilizzato

Autore: IT Sectr Pubblicato: 2026-06-02 Tempo di lettura: 8 min

STUN Server è un server del protocollo Session Traversal Utilities for NAT (STUN) che consente a un client di determinare il proprio indirizzo IP esterno e la propria porta, nonché il tipo di Network Address Translation (NAT) dietro cui si trova. Secondo IETF RFC 5389, 2008, STUN è un componente obbligatorio dell'infrastruttura WebRTC, che consente di stabilire una connessione diretta peer-to-peer tra client dietro NAT.

Punti chiave

  • STUN Server è un nodo di rete che aiuta un client a determinare il proprio indirizzo IP pubblico e il tipo di NAT per organizzare connessioni P2P.
  • Principio — il client invia una richiesta STUN, il server risponde con l'indirizzo IP e la porta da cui è arrivata la richiesta, rivelando i dati dell'indirizzo esterno del client.
  • Ruolo in WebRTC — il server STUN viene utilizzato nella fase di raccolta dei candidati ICE per raccogliere candidati e verificare la possibilità di una connessione diretta.
  • Limitazione — STUN non funziona con NAT simmetrico (Symmetric NAT), dove l'indirizzo esterno cambia per ogni host di destinazione.
  • Alternativa — quando STUN fallisce, viene utilizzato un server TURN, che ritrasmette il traffico attraverso un nodo di relay.

Cos'è un server STUN

STUN Server (Session Traversal Utilities for NAT) è un servizio di rete che opera secondo il protocollo definito in RFC 5389 e aggiornato in RFC 8489. Il compito principale di un server STUN è fornire al client informazioni sul proprio indirizzo IP pubblico e sulla propria porta come visti dalla rete esterna, nonché determinare il tipo di dispositivo NAT tra il client e Internet.

L'architettura STUN include due componenti: un client STUN integrato nell'applicazione (ad esempio, un browser o un'applicazione nativa WebRTC) e un server STUN distribuito nella rete pubblica. Il client invia una Binding Request al server, che nella sua risposta indica l'indirizzo IP sorgente e la porta della richiesta — cioè gli indirizzi pubblici del client come visti dal server. Confrontando questi dati con i propri indirizzi locali, il client può determinare quale tipo di NAT viene utilizzato nella sua rete.

Protocollo STUN

STUN opera su UDP (porta 3478 predefinita) o TCP (porta 3478 o 5349 per TLS). Un messaggio STUN consiste in un'intestazione di 20 byte e un numero variabile di attributi. L'intestazione contiene il tipo di messaggio (Binding Request, Binding Response, Binding Error Response), la lunghezza e un identificatore di transazione univoco (96 bit) che consente di abbinare richieste e risposte. Ogni Binding Response contiene l'attributo XOR-MAPPED-ADDRESS — l'indirizzo esterno del client, codificato con mascheratura per proteggersi da attacchi basati sull'intercettazione del traffico STUN.

Come funziona un server STUN

Un server STUN opera con un semplice protocollo richiesta-risposta. Il client dietro NAT crea una Binding Request e la invia al server STUN. Il server riceve il pacchetto, estrae l'indirizzo IP sorgente e la porta del mittente dall'intestazione UDP, quindi crea una Binding Response, inserendo questo indirizzo nell'attributo XOR-MAPPED-ADDRESS. La risposta viene inviata all'indirizzo di origine della richiesta.

Il client riceve la risposta ed estrae XOR-MAPPED-ADDRESS, che contiene l'indirizzo IP esterno e la porta assegnati dal dispositivo NAT. Quindi il client confronta questo indirizzo con il proprio indirizzo locale (RFC 1919 — privato). Se gli indirizzi coincidono, il client non è dietro NAT. Se differiscono, il client è dietro NAT e l'indirizzo esterno viene utilizzato come candidato per ICE (Interactive Connectivity Establishment) in WebRTC.

Processo di scoperta del NAT

Un server STUN consente di determinare il tipo di NAT attraverso una sequenza di richieste di test. Il client invia richieste con flag diversi (CHANGE-REQUEST) e analizza le risposte. Il ciclo completo di scoperta include l'invio di richieste a diversi indirizzi IP e porte del server STUN. Se il server risponde a una richiesta con una porta modificata, il NAT è di tipo Restricted Cone. Se non risponde a una richiesta con porta e IP modificati, il NAT è di tipo Symmetric. Questa informazione è fondamentale per scegliere la strategia ICE in WebRTC.

Server STUN e tipi di NAT

Un server STUN può rilevare quattro tipi principali di NAT, ognuno dei quali influisce diversamente sulla possibilità di stabilire una connessione P2P. Il tipo di NAT determina se STUN può consentire una connessione diretta tra due client. Determina anche quale candidato ICE — host, server reflexive o relay — verrà utilizzato per la connessione.

Tipo NATComportamentoSTUN funzionaFallback ICE
Full ConeQualsiasi host esterno può inviare un pacchetto al clientServer Reflexive
Restricted ConeSolo host a cui il client ha inviato pacchettiServer Reflexive
Port RestrictedCome Restricted, ma filtra anche per porta di origineServer Reflexive
Symmetric NATIndirizzo esterno univoco per ogni coppia host:portaNoRelay (TURN)

Symmetric NAT è l'unico tipo con cui STUN non può funzionare. Con Symmetric NAT, ogni nuova richiesta a un nuovo host di destinazione riceve un indirizzo esterno diverso (IP e/o porta). Poiché il server STUN segnala l'indirizzo per la connessione al server STUN stesso, questo indirizzo non è adatto per connettersi a un altro client. In tali casi, WebRTC utilizza un server TURN per ritrasmettere il traffico. Secondo la ricerca (Ford et al., RFC 3489, 2003), circa l'8–10% di tutti i dispositivi NAT su Internet sono simmetrici.

Utilizzo del server STUN in WebRTC

Un server STUN viene integrato in WebRTC tramite la configurazione RTCPeerConnection. Un browser o un'applicazione nativa utilizza STUN per raccogliere i candidati ICE, che vengono poi scambiati tramite il Signaling Server. Nella configurazione WebRTC, il server STUN viene specificato nell'array iceServers con il prefisso stun: per UDP o stuns: per connessioni TLS.

Consideriamo un esempio di configurazione di un server STUN in JavaScript durante la creazione di una RTCPeerConnection per un'applicazione 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);

Questo esempio utilizza i server STUN pubblici di Google (stun.l.google.com:19302). Durante la creazione di un'offerta o risposta, il browser invia automaticamente una Binding Request STUN ai server specificati, riceve l'indirizzo esterno (candidato server reflexive) e lo aggiunge all'elenco dei candidati ICE. Dopo aver raccolto tutti i candidati, vengono inviati al peer remoto tramite il Signaling Server per tentare di stabilire una connessione P2P diretta.

Tipi di candidati ICE e STUN

Nel processo ICE, esistono tre tipi di candidati: host (indirizzo locale), srflx (server reflexive — ottenuto da STUN) e relay (ritrasmesso tramite TURN). Il server STUN consente la creazione di candidati srflx, che hanno una priorità maggiore rispetto ai candidati relay perché una connessione basata su STUN è diretta e non richiede ritrasmissione. Il processo ICE verifica tutte le combinazioni di candidati (locali e ottenuti da STUN) di entrambi i peer, iniziando dalle priorità più alte.

Limitazioni del protocollo STUN

Un server STUN ha limitazioni fondamentali legate all'architettura del protocollo. La limitazione principale è l'incapacità di funzionare con Symmetric NAT, dove ogni nuova richiesta a un host esterno riceve una porta esterna univoca. In questo caso, l'indirizzo ottenuto dal server STUN non può essere utilizzato per connettersi a un altro peer perché il NAT ha creato un binding solo per la comunicazione con il server STUN stesso.

La seconda limitazione è che STUN non fornisce ritrasmissione dei dati. Se la connessione P2P diretta è impossibile (entrambi i peer dietro Symmetric NAT), STUN non offre un percorso alternativo per la trasmissione dei dati. In questo caso, è necessario un server TURN, che funge da relay del traffico multimediale tra i peer, ricevendo dati da un partecipante e inviandoli a un altro attraverso il proprio indirizzo IP pubblico.

  • Symmetric NAT — STUN non funziona con NAT simmetrico perché l'indirizzo esterno è univoco per ogni host di destinazione e non può essere riutilizzato per P2P.
  • Firewall con ispezione approfondita dei pacchetti — alcuni firewall bloccano il traffico STUN rilevando firme del protocollo nei pacchetti UDP sulla porta 3478.
  • IPv6 — nelle reti IPv6, il NAT solitamente non viene utilizzato, quindi STUN non è necessario, ma WebRTC su IPv6 può utilizzare candidati host senza bisogno di STUN o TURN.
  • Dipendenza dalla disponibilità — il server STUN deve essere accessibile al client durante la fase di stabilimento della connessione, altrimenti i candidati srflx non verranno raccolti.
  • Sicurezza — il protocollo STUN è vulnerabile ad attacchi di amplificazione se il server è configurato male e risponde a richieste con indirizzo di origine falsificato.

Nonostante le limitazioni, un server STUN rimane un componente critico dell'infrastruttura WebRTC. Nella maggior parte dei casi (80–90%), una connessione P2P diretta può essere stabilita utilizzando STUN, evitando i costi di ritrasmissione TURN e riducendo la latenza di trasmissione dei dati multimediali. Per le applicazioni WebRTC pubbliche, si consiglia di utilizzare una combinazione di server STUN e TURN con fallback automatico.

Domande frequenti

Cos'è un server STUN in termini semplici?

Un server STUN è uno "specchio" su Internet che comunica a un client il proprio indirizzo IP esterno. Quando un computer si trova dietro un router (NAT), non conosce il proprio indirizzo pubblico. Il server STUN aiuta a scoprirlo in modo che altri computer possano connettersi direttamente.

Come viene utilizzato un server STUN in WebRTC?

In WebRTC, il server STUN viene specificato nella configurazione RTCPeerConnection. Il browser invia una richiesta STUN per ottenere l'indirizzo esterno del candidato (srflx). Questo candidato viene trasmesso al peer remoto tramite il Signaling Server e ICE tenta di stabilire una connessione diretta tra loro.

Qual è la differenza tra server STUN e TURN?

STUN aiuta a scoprire l'indirizzo esterno per una connessione P2P diretta. TURN ritrasmette il traffico attraverso il proprio server quando P2P non è possibile. STUN è uno "specchio", TURN è un "intermediario". TURN crea carico sul server e aggiunge latenza, quindi STUN è preferito.

Quali server STUN pubblici possono essere utilizzati?

Google fornisce server STUN gratuiti: stun.l.google.com:19302, stun1.l.google.com:19302. Twilio fornisce anche infrastruttura STUN + TURN tramite il suo Network Traversal Service. Per le applicazioni di produzione, è meglio utilizzare server STUN/TURN propri o commerciali con disponibilità garantita.

Perché STUN non funziona con Symmetric NAT?

Symmetric NAT crea un mapping di porta esterna univoco per ogni coppia "indirizzo locale:indirizzo esterno di destinazione". L'indirizzo che il client riceve dal server STUN è legato alla connessione con quel server STUN. Quando un altro peer tenta di utilizzare questo indirizzo, Symmetric NAT blocca il pacchetto perché il mapping della porta è diverso per il nuovo indirizzo di destinazione.

Riepilogo

  • STUN Server — un nodo di rete che implementa il protocollo RFC 5389 per determinare l'indirizzo IP esterno e la porta di un client dietro NAT.
  • Principio di funzionamento — il client invia una Binding Request, il server risponde con XOR-MAPPED-ADDRESS contenente l'indirizzo pubblico della richiesta.
  • Tipi di NAT — STUN funziona con Full Cone, Restricted Cone e Port Restricted NAT, ma non può gestire Symmetric NAT.
  • Ruolo in WebRTC — STUN viene utilizzato nella fase di raccolta dei candidati ICE per formare candidati srflx con indirizzo esterno.
  • Limitazioni — non funziona con Symmetric NAT, può essere bloccato da firewall DPI, non fornisce ritrasmissione dati.
  • Server gratuiti — stun.l.google.com:19302 e altri server STUN pubblici sono sufficienti per test e la maggior parte degli scenari.
  • Raccomandazione — utilizzare sempre STUN in combinazione con un server TURN come fallback per garantire la connessione in qualsiasi condizione di rete.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche