STUN Server: vad är det, hur fungerar det och var används det

Författare: IT Sectr Publicerad: 2026-06-02 Lästid: 8 min

STUN Server — är servern för Session Traversal Utilities for NAT (STUN)-protokollet, som gör det möjligt för en klient att bestämma sin externa IP-adress och port, samt typen av Network Address Translation (NAT) som den befinner sig bakom. Enligt IETF RFC 5389, 2008 är STUN en obligatorisk komponent i WebRTC-infrastrukturen som säkerställer etablering av direkt peer-to-peer-förbindelse mellan klienter bakom NAT.

Huvudpunkter

  • STUN Server — en nätverksnod som hjälper klienten att bestämma sin publika IP-adress och NAT-typ för att organisera P2P-förbindelser.
  • Princip — klienten skickar en STUN-förfrågan, servern svarar med IP-adressen och porten som förfrågan kom från och avslöjar klientens externa adressdata.
  • Roll i WebRTC — STUN-servern används i ICE Candidate Gathering-fasen för att samla in kandidater och kontrollera möjligheten till direkt anslutning.
  • Begränsning — STUN fungerar inte med symmetrisk NAT (Symmetric NAT), där den externa adressen ändras för varje målserver.
  • Alternativ — vid misslyckande av STUN används TURN-servern som vidarebefordrar trafik via en relänod.

Vad är STUN Server

STUN Server (Session Traversal Utilities for NAT) — är en nätverkstjänst som fungerar enligt protokollet definierat i RFC 5389 och uppdaterat i RFC 8489. Huvuduppgiften för STUN-servern är att ge klienten information om sin egen publika IP-adress och port som är synliga från det externa nätverket, samt att bestämma typen av NAT-enhet mellan klienten och internet.

STUN-arkitekturen består av två komponenter: en STUN-klient inbäddad i applikationen (t.ex. webbläsare eller inbyggd WebRTC-applikation) och en STUN-server placerad i det publika nätverket. Klienten skickar en STUN Binding Request till servern, som i svaret anger IP-adressen och porten för förfrågans källa — det vill säga klientens publika adresser som servern ser. Genom att jämföra dessa data med lokala adresser kan klienten bestämma vilken typ av NAT som används i dess nätverk.

STUN-protokollet

STUN fungerar över UDP (port 3478 som standard) eller TCP (port 3478 eller 5349 för TLS). Ett STUN-meddelande består av en 20-byte rubrik och ett variabelt antal attribut. Rubriken innehåller meddelandetypen (Binding Request, Binding Response, Binding Error Response), längd och en unik transaktionsidentifierare (96 bitar) som gör det möjligt att matcha förfrågningar och svar. Varje Binding Response innehåller attributet XOR-MAPPED-ADDRESS — klientens externa adress, kodad med maskering för att skydda mot attacker baserade på avlyssning av STUN-trafik.

Hur fungerar STUN-servern

STUN-servern fungerar enligt ett enkelt förfrågan-svar-protokoll. Klienten bakom NAT skapar en Binding Request och skickar den till STUN-servern. Servern tar emot paketet, extraherar från UDP-rubriken käll-IP-adressen och avsändarporten, och skapar sedan en Binding Response genom att packa denna adress i attributet XOR-MAPPED-ADDRESS. Svaret skickas tillbaka till förfrågans källadress.

Klienten tar emot svaret och extraherar XOR-MAPPED-ADDRESS, som innehåller den externa IP-adressen och porten som tilldelats av NAT-enheten. Sedan jämför klienten denna adress med sin lokala (RFC 1919 — privata) adress. Om adresserna matchar — befinner sig klienten inte bakom NAT. Om de skiljer sig — befinner sig klienten bakom NAT och den externa adressen används som kandidat för ICE (Interactive Connectivity Establishment) i WebRTC.

Process för NAT-upptäckt (NAT Discovery)

STUN-servern gör det möjligt att bestämma NAT-typen genom en serie testförfrågningar. Klienten skickar förfrågningar med olika flaggor (CHANGE-REQUEST) och analyserar svaren. Den fullständiga upptäcktscykeln innefattar att skicka förfrågningar till olika IP-adresser och portar på STUN-servern. Om servern svarar på en förfrågan med ändrad port — NAT av typen Restricted Cone. Om den inte svarar på en förfrågan med ändrad port och IP — NAT av typen Symmetric. Denna information är kritisk för val av ICE-strategi i WebRTC.

STUN-servern och NAT-typer

STUN-servern kan bestämma fyra huvudtyper av NAT, som var och en påverkar möjligheten att etablera P2P-förbindelse på olika sätt. NAT-typen avgör om STUN kan tillhandahålla en direkt anslutning mellan två klienter. Från NAT-typen beror det på vilken ICE-kandidat — host, server reflexive eller relay — som kommer att användas för anslutningen.

NAT-typBeteendeSTUN fungerarICE Fallback
Full ConeVilken extern värd som helst kan skicka ett paket till klientenJaServer Reflexive
Restricted ConeEndast värdar som klienten skickat paket tillJaServer Reflexive
Port RestrictedSom Restricted, men filtrerar även efter källportJaServer Reflexive
Symmetric NATExtern adress är unik för varje värd:port-parNejRelay (TURN)

Symmetric NAT — den enda typen som STUN inte kan hantera. Vid Symmetric NAT får varje ny förfrågan till en ny målserver en annan extern adress (IP och/eller port). Eftersom STUN-servern rapporterar adressen för anslutningen till själva STUN-servern, är denna adress oanvändbar för anslutning till en annan klient. I sådana fall används i WebRTC en TURN-server för vidarebefordran av trafik. Enligt forskning (Ford et al., RFC 3489, 2003) är cirka 8–10% av alla NAT-enheter på internet symmetriska.

Användning av STUN-servern i WebRTC

STUN-servern integreras i WebRTC via konfigurationen av RTCPeerConnection. Webbläsaren eller den inbyggda applikationen använder STUN för att samla in ICE-kandidater, som sedan utbyts via Signaling Server. I WebRTC-konfigurationen anges STUN-servern i arrayen iceServers med prefixet stun: för UDP eller stuns: för TLS-anslutning.

Låt oss titta på ett exempel på konfiguration av STUN-server i JavaScript när vi skapar en RTCPeerConnection för en WebRTC-applikation.

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("ICE-kandidat:", event.candidate.candidate);
    }
};

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

I detta exempel används Googles publika STUN-servrar (stun.l.google.com:19302). När offer eller answer skapas skickar webbläsaren automatiskt en STUN Binding Request till de angivna servrarna, tar emot den externa adressen (server reflexive candidate) och lägger till den i listan över ICE-kandidater. Efter att alla kandidater samlats in skickas de till den fjärran partnern via Signaling Server för att försöka etablera en direkt P2P-förbindelse.

ICE-kandidattyper och STUN

I ICE-processen finns tre typer av kandidater: host (lokal adress), srflx (server reflexive — erhållen från STUN) och relay (vidarebefordrad via TURN). STUN-servern säkerställer uppkomsten av srflx-kandidater, som har högre prioritet än relay, eftersom anslutning via STUN är direkt och inte kräver vidarebefordran. ICE-processen kontrollerar alla kombinationer av kandidater (lokala och erhållna från STUN) från båda parter, med början från de högsta prioriteterna.

Begränsningar av STUN-protokollet

STUN-servern har grundläggande begränsningar relaterade till protokollets arkitektur. Den främsta begränsningen är oförmågan att fungera med Symmetric NAT, där varje ny förfrågan till en extern värd får en unik extern port. I detta fall kan adressen som erhållits från STUN-servern inte användas för anslutning till en annan partner, eftersom NAT har skapat en bindning endast för kommunikation med själva STUN-servern.

Den andra begränsningen är att STUN inte tillhandahåller vidarebefordran av data. Om en direkt P2P-förbindelse är omöjlig (båda parter befinner sig bakom Symmetric NAT), erbjuder STUN ingen alternativ väg för dataöverföring. I detta fall krävs en TURN-server, som fungerar som en vidarebefordrare av medietrafik mellan parterna, genom att ta emot data från en deltagare och skicka dem till den andre via sin publika IP-adress.

  • Symmetric NAT — STUN fungerar inte med symmetrisk NAT, eftersom den externa adressen är unik för varje målserver och inte kan återanvändas för P2P.
  • Firewall Deep Packet Inspection — vissa brandväggar blockerar STUN-trafik genom att upptäcka den baserat på protokollsignaturer i UDP-paket på port 3478.
  • IPv6 — i IPv6-nätverk används NAT vanligtvis inte, så STUN behövs inte, men WebRTC på IPv6 kan klara sig med host-kandidater utan behov av STUN eller TURN.
  • Beroende av tillgänglighet — STUN-servern måste vara tillgänglig för klienten i fasen för att etablera anslutning, annars kommer srflx-kandidater inte att samlas in.
  • Säkerhet — STUN-protokollet är sårbart för förstärkningsattacker (amplification attack) om servern är felaktigt konfigurerad och svarar på förfrågningar med förfalskad källadress.

Trots begränsningarna förblir STUN-servern en kritisk komponent i WebRTC-infrastrukturen. I de flesta fall (80–90%) kan en direkt P2P-förbindelse etableras med hjälp av STUN, vilket gör det möjligt att undvika kostnader för TURN-vidarebefordran och minska fördröjningen vid överföring av mediadata. För offentliga WebRTC-applikationer rekommenderas att använda en kombination av STUN- och TURN-servrar med automatisk fallback för att garantera anslutning under alla nätverksförhållanden.

Vanliga frågor

Vad är en STUN-server med enkla ord?

En STUN-server — är en spegel på internet som berättar för klienten dess externa IP-adress. När en dator befinner sig bakom en router (NAT) känner den inte till sin publika adress. STUN-servern hjälper till att ta reda på den så att andra datorer kan ansluta direkt.

Hur används STUN-servern i WebRTC?

I WebRTC anges STUN-servern i konfigurationen av RTCPeerConnection. Webbläsaren skickar en STUN-förfrågan för att få den externa adressen för kandidaten (srflx). Denna kandidat överförs till den fjärran partnern via Signaling Server och ICE försöker etablera en direkt anslutning mellan dem.

Vad är skillnaden mellan STUN- och TURN-servrar?

STUN hjälper till att ta reda på den externa adressen för direkt P2P-anslutning. TURN vidarebefordrar trafik genom sin egen server när P2P är omöjligt. STUN är en spegel, TURN är en mellanhand. TURN skapar belastning på servern och ökar fördröjningen, därför är STUN att föredra.

Vilka publika STUN-servrar kan användas?

Google tillhandahåller gratis STUN-servrar: stun.l.google.com:19302, stun1.l.google.com:19302. Twilio tillhandahåller också STUN + TURN-infrastruktur via tjänsten Network Traversal Service. För produktionsapplikationer är det bättre att använda egna eller kommersiella STUN/TURN-servrar med garanterad tillgänglighet.

Varför fungerar inte STUN med Symmetric NAT?

Symmetric NAT skapar en unik extern portmappning för varje par av lokal adress:extern måladress. Adressen som klienten får från STUN-servern är bunden till anslutningen med denna STUN-server. När en annan partner försöker använda denna adress blockerar Symmetric NAT paketet eftersom portmappningen är annorlunda för den nya måladressen.

Sammanfattning

  • STUN Server — en nätverksnod som implementerar RFC 5389-protokollet för att bestämma extern IP-adress och port för en klient bakom NAT.
  • Funktionsprincip — klienten skickar en Binding Request, servern svarar med XOR-MAPPED-ADDRESS som innehåller den publika källadressen för förfrågan.
  • NAT-typer — STUN fungerar med Full Cone, Restricted Cone och Port Restricted NAT, men kan inte hantera Symmetric NAT.
  • Roll i WebRTC — STUN används i ICE Candidate Gathering-fasen för att bilda srflx-kandidater med extern adress.
  • Begränsningar — fungerar inte med Symmetric NAT, kan blockeras av DPI-brandväggar, tillhandahåller inte dataöverföring.
  • Gratis servrar — stun.l.google.com:19302 och andra publika STUN-servrar är tillräckliga för testning och de flesta scenarier.
  • Rekommendation — använd alltid STUN i kombination med en TURN-server som fallback för att garantera anslutning under alla nätverksförhållanden.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också