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

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

TURN Server — är en server för protokollet Traversal Using Relays around NAT som vidarebefordrar mediatrafik mellan två peers när direkt P2P-anslutning är omöjlig. Enligt IETF RFC 5766, 2010 fungerar TURN-servern som sista reserv (fallback) i ICE-processen för WebRTC och säkerställer garanterad anslutning även vid Symmetric NAT och företagsbrandväggar.

Huvudpunkter

  • TURN Server — en reläserver som vidarebefordrar mediadata mellan peers när direkt P2P-anslutning via NAT är omöjlig.
  • Princip — varje peer skickar data till TURN-servern, som vidarebefordrar den till den andra peer och fungerar som medlare i kommunikationen.
  • Roll i ICE — TURN aktiveras när alla försök till direkt anslutning (host- och server reflexive-kandidater) har misslyckats.
  • Nackdel — TURN skapar ytterligare fördröjning och serverbelastning eftersom all trafik går genom relät.
  • Säkerhet — TURN stödjer autentisering (username, credential, realm) och TLS-kryptering för att skydda vidarebefordrade data.

Vad är TURN Server

TURN Server (Traversal Using Relays around NAT) — är en nätverkstjänst definierad i RFC 5766 och uppdaterad i RFC 8656, som vidarebefordrar UDP- och TCP-trafik mellan två klienter när direkt P2P-anslutning är omöjlig på grund av NAT-begränsningar eller brandväggar. I WebRTC-arkitekturen fungerar TURN-servern som en slutlig reservmekanism som garanterar anslutning under alla nätverksförhållanden.

Till skillnad från STUN, som bara talar om för klienten dess externa adress, deltar TURN-servern aktivt i dataöverföringen. Varje peer upprättar en anslutning till TURN-servern och skickar sina mediadata till den. TURN-servern vidarebefordrar dessa data till den andra peer. Som ett resultat finns det ingen direkt anslutning mellan peers — all trafik går genom reläservern, vilket garanterar leverans även under de strängaste NAT-begränsningarna.

TURN-protokollet

TURN är en utökning av STUN-protokollet. TURN-meddelanden använder samma 20-byte-huvud och attributmekanism. Den viktigaste skillnaden är att TURN definierar nya meddelandetyper (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) och attribut som behövs för hantering av reläallokeringar. Klienten skapar en allokering på TURN-servern via Allocate-meddelandet, får en relätransportadress (relayed transport address) och använder den för att skicka och ta emot data via servern.

Hur fungerar TURN-servern

TURN-servern fungerar enligt följande steg. Klienten skickar en Allocate-förfrågan med autentisering (username, credential). Servern kontrollerar inloggningsuppgifterna och skapar en allokering — en tillfällig koppling av reläadressen (IP:port på TURN-servern) till klienten. Servern returnerar ett Allocate-svar med relayed transport address — adressen som andra peers kommer att använda för att skicka data till denna klient via TURN-servern.

Efter att allokeringen har skapats kan klienten skicka data via TURN-servern med hjälp av Send Indication-meddelanden eller via kanaler (ChannelBind). När data tas emot från klienten kontrollerar TURN-servern behörigheterna (permissions) och vidarebefordrar data till målpeern. För att ta emot inkommande data måste klienten först skapa en behörighet för den peer från vilken den förväntar sig data, annars kommer TURN-servern att avvisa det inkommande paketet. Behörigheten skapas via CreatePermission-meddelandet med angivande av peerens IP-adress.

Allokering och livslängd

Allokeringen på TURN-servern har en begränsad livslängd — som standard 10 minuter. Klienten måste periodiskt skicka en Refresh-förfrågan för att förlänga allokeringen. Livslängden anges i sekunder i LIFETIME-attributet. Vid utebliven Refresh tar servern bort allokeringen och frigör reläadressen. Rekommenderat uppdateringsintervall är 5 minuter (300 sekunder) för att skydda mot förlust av Refresh-paket.

Konfiguration av TURN-server i WebRTC

I WebRTC konfigureras TURN-servern via RTCPeerConnection-inställningarna i iceServers-arrayen. TURN-servrar kan använda både UDP och TCP eller TLS-transport. För autentisering används vanligtvis tillfälliga inloggningsuppgifter (TURN credentials), genererade på applikationsservern och tidsbegränsade.

Låt oss titta på ett exempel på konfiguration av TURN-server i JavaScript med autentisering via HMAC-SHA1-token.

js
async function createPeerConnection(turnServerUrl) {
    const credentials = await fetchTurnCredentials();

    const config = {
        iceServers: [
            {
                urls: "stun:stun.l.google.com:19302"
            },
            {
                urls: turnServerUrl,
                username: credentials.username,
                credential: credentials.credential
            }
        ],
        iceTransportPolicy: "all"
    };

    return new RTCPeerConnection(config);
}

async function fetchTurnCredentials() {
    const response = await fetch("/api/turn-credentials");
    return response.json();
}

const turnUrl = "turn:turn.example.com:3478";
const pc = await createPeerConnection(turnUrl);

I detta exempel anges TURN-servern tillsammans med STUN-servern i en enhetlig ICE-konfiguration. ICE-processen kommer först att försöka använda host-kandidater och srflx-kandidater erhållna från STUN. Om den direkta anslutningen misslyckas växlar ICE automatiskt till reläkandidaten som erhållits från TURN-servern. Parametern iceTransportPolicy: "all" tillåter reläkandidater — det alternativa värdet "relay" förbjuder alla kandidater utom TURN, vilket är användbart för testning.

Autentisering av TURN-servern

För att förhindra obehörig användning kräver TURN-servern autentisering. Standardmetoden är att använda tidsbegränsade inloggningsuppgifter (time-limited credentials), genererade på applikationsservern med HMAC-SHA1. Applikationsservern krypterar användarnamnet med TURN-serverns hemliga nyckel och returnerar användarnamnet och inloggningsuppgifterna till klienten. Klienten skickar dem vidare till RTCPeerConnection-konfigurationen och webbläsaren använder dem när den skapar en allokering på TURN-servern. Efter att inloggningsuppgifterna har upphört att gälla får klienten nya från applikationsservern.

TURN vs STUN: jämförelse

TURN och STUN löser liknande NAT-passageuppgifter men skiljer sig fundamentalt i mekanism och kostnad. TURN vidarebefordrar trafik och fungerar som medlare, medan STUN bara hjälper till att bestämma den externa adressen för direkt P2P-anslutning. Valet mellan dem bestäms av peerens NAT-typ och prestandakrav.

KriteriumSTUNTURN
MekanismBestämning av extern adressVidarebefordran av trafik
AnslutningDirekt P2PVia reläserver
FördröjningMinimal (direkt väg)Extra (via relä)
ServerbelastningEndast första förfrågningarKonstant trafikvidarebefordran
KostnadLåg (enstaka förfrågningar)Hög (servertrafik)
Funktion med Symmetric NATNejJa
BandbreddEndast P2P-kanalens gränsServerkanalens gräns

I praktiken används TURN-servern endast för anslutningar där P2P är omöjligt. Enligt Google-data (WebRTC-statistik, 2023) kräver cirka 15–20% av alla WebRTC-anslutningar TURN-vidarebefordran. Återstående 80–85% upprättas via STUN eller lokala host-kandidater. Vid design av applikationen bör en budget avsättas för TURN-trafik på 15–20% av den totala mediadatavolymen om målgruppen inkluderar användare från företagsnätverk och regioner med strikta NAT-begränsningar.

Kostnad och prestanda för TURN-server

TURN-servern förbrukar betydande resurser eftersom all mediatrafik går genom den. Varje aktivt samtal med TURN-vidarebefordran använder serverbandbredd som motsvarar den totala mediagenomströmningen (inkommande + utgående ström). För ett videosamtal i HD-kvalitet (720p) kan detta vara 1,5–2,5 Mb/s per anslutning i varje riktning, det vill säga 3–5 Mb/s total trafik genom TURN-servern.

Det finns flera alternativ för att distribuera TURN-infrastruktur. Gratis offentliga TURN-servrar rekommenderas inte för produktion på grund av bristande kvalitets- och säkerhetsgarantier. Kommersiella leverantörer (Twilio Network Traversal Service, Xirsys, Metered) erbjuder TURN som en tjänst med betalning per gigabyte trafik — den typiska kostnaden är $0,005–0,02 per gigabyte. Egen distribution baserad på coturn (open-source TURN-server) kräver en server med tillräcklig bandbredd och konfigurering av övervakning.

  • coturn — den mest populära open-source TURN-servern, som används i de flesta produktionssystem, stödjer UDP-, TCP-, TLS- och DTLS-transport.
  • Twilio — kommersiell tjänst som erbjuder TURN + STUN med betalning per trafik och autentisering via tillfälliga tokens.
  • Xirsys — specialiserad TURN-leverantör med globalt servernätverk och detaljerad användningsanalys.
  • Metered.ca — TURN-tjänst med gratis gräns på upp till 50 GB per månad och betalning för överskridande.
  • Self-hosted coturn — full kontroll över konfigurationen, men kräver serveradministration och inställning av tillgänglighetsövervakning.

När du väljer en lösning för TURN-servern bör du ta hänsyn till användarnas geografi, trafikkostnader och säkerhetskrav. För applikationer med tusentals samtidiga samtal kan self-hosted coturn på servrar med bred bandbredd (1+ Gb/s) vara mer ekonomiskt än kommersiella leverantörer. För små projekt med tiotals användare är kommersiella TURN-tjänster att föredra på grund av avsaknaden av administrations- och övervakningskostnader.

Vanliga frågor

Vad är en TURN-server i enkla ordalag?

En TURN-server är en medlare som överför data mellan användare när de inte kan ansluta direkt. Om två datorer befinner sig bakom routrar som inte tillåter direkt anslutning tar TURN-servern emot data från den ena och skickar den till den andra.

När krävs en TURN-server i WebRTC?

En TURN-server krävs när båda deltagarna i ett WebRTC-samtal befinner sig bakom Symmetric NAT eller företagsbrandväggar som blockerar P2P-trafik. I sådana fall kan STUN inte hjälpa och ICE-processen växlar automatiskt till reläkandidaten som erhållits från TURN-servern.

Vad är skillnaden mellan TURN och STUN?

STUN visar bara datorns externa adress för direkt anslutning. TURN vidarebefordrar aktivt trafik genom sig själv. STUN orsakar ingen serverbelastning, TURN förbrukar bandbredd. STUN fungerar bara med vissa NAT-typer, TURN fungerar alltid men är dyrare.

Hur mycket kostar en TURN-server?

Kostnaden för en TURN-server beror på leverantör och trafikvolym. Twilio tar ut cirka $0,005–0,01 per GB trafik som passerar TURN. Xirsys — från $0,007 per GB. Egen distribution av coturn kräver en server med minst 100 Mb/s bandbredd, vars kostnad beror på hostingleverantören.

Hur konfigurerar man sin egen TURN-server?

Din egen TURN-server konfigureras med hjälp av coturn (open-source). Installationen omfattar konfiguration av portar, autentisering (shared secret), TLS-certifikat och brandvägg. Grundkonfigurationsfilen innehåller parametrarna listening-port, realm, user och fingerprint. Efter konfiguration anges servern i WebRTC:s iceServers med prefixet turn: eller turns: för TLS.

Sammanfattning

  • TURN Server — reläserver för vidarebefordran av mediatrafik när direkt P2P-anslutning mellan peers är omöjlig.
  • Funktionsprincip — klienten skapar en allokering på TURN-servern, får en relätransportadress och använder den för att skicka och ta emot data via den mellanliggande servern.
  • ICE-roll — TURN aktiveras som sista reserv i ICE-processen när host- och srflx-kandidater inte har kunnat etablera anslutning.
  • Begränsningar — extra fördröjning (50–200 ms), serverbandbreddsförbrukning (3–5 Mb/s per HD-samtal), trafikkostnader.
  • Jämförelse med STUN — TURN fungerar med alla NAT-typer men är dyrare och långsammare. STUN föredras för 80–85% av anslutningarna.
  • Verktyg — coturn (self-hosted open-source), Twilio NTS, Xirsys, Metered.ca för kommersiell användning av TURN-servern.
  • Rekommendation — använd TURN endast som fallback vid STUN-misslyckande, övervaka andelen TURN-anslutningar och optimera vid behov.

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å