TURN Server: wat het is, hoe het werkt en waar het wordt gebruikt

Auteur: IT Sectr Gepubliceerd: 2026-06-02 Leestijd: 8 min

TURN Server — is een server van het Traversal Using Relays around NAT-protocol die mediatrafiek tussen twee peers doorstuurt wanneer een directe P2P-verbinding onmogelijk is. Volgens IETF RFC 5766, 2010 fungeert de TURN-server als laatste redmiddel (fallback) in het ICE-proces van WebRTC, en garandeert verbindingen zelfs bij Symmetric NAT en bedrijfsfirewalls.

Belangrijkste

  • TURN Server — een relayserver die mediagegevens tussen peers doorstuurt wanneer een directe P2P-verbinding via NAT onmogelijk is.
  • Principe — elke peer stuurt gegevens naar de TURN-server, die ze doorstuurt naar de andere peer en fungeert als tussenpersoon in de communicatie.
  • Rol in ICE — TURN wordt geactiveerd wanneer alle pogingen tot directe verbinding (host- en server reflexive-kandidaten) zijn mislukt.
  • Nadeel — TURN veroorzaakt extra vertraging en serverbelasting omdat al het verkeer via de relay gaat.
  • Beveiliging — TURN ondersteunt authenticatie (username, credential, realm) en TLS-versleuteling voor bescherming van doorgestuurde gegevens.

Wat is TURN Server

TURN Server (Traversal Using Relays around NAT) — is een netwerkservice gedefinieerd in RFC 5766 en bijgewerkt in RFC 8656, die UDP- en TCP-verkeer tussen twee clients doorstuurt wanneer een directe P2P-verbinding onmogelijk is vanwege NAT-beperkingen of firewalls. In de WebRTC-architectuur fungeert de TURN-server als een laatste reservemechanisme dat verbinding garandeert in elke netwerkomstandigheid.

In tegenstelling tot STUN, dat de client alleen zijn externe adres vertelt, neemt de TURN-server actief deel aan de gegevensoverdracht. Elke peer maakt een verbinding met de TURN-server en stuurt zijn mediagegevens ernaartoe. De TURN-server stuurt deze gegevens op zijn beurt door naar de andere peer. Het resultaat is dat er geen directe verbinding is tussen peers — al het verkeer gaat via de relayserver, wat levering garandeert, zelfs onder de strengste NAT-beperkingen.

TURN-protocol

TURN is een uitbreiding van het STUN-protocol. TURN-berichten gebruiken dezelfde 20-byte header en hetzelfde attribuutmechanisme. Het belangrijkste verschil is dat TURN nieuwe berichttypen definieert (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) en attributen die nodig zijn voor het beheer van relay-toewijzingen. De client maakt een toewijzing op de TURN-server via het Allocate-bericht, ontvangt een relay-transportadres (relayed transport address) en gebruikt dit om gegevens via de server te verzenden en ontvangen.

Hoe werkt de TURN-server

De TURN-server werkt volgens de volgende stappen. De client verzendt een Allocate-verzoek met authenticatie (username, credential). De server controleert de inloggegevens en maakt een toewijzing — een tijdelijke koppeling van het relay-adres (IP:poort op de TURN-server) aan de client. De server retourneert een Allocate-antwoord met het relayed transport address — het adres dat andere peers zullen gebruiken om gegevens naar deze client te sturen via de TURN-server.

Na het maken van de toewijzing kan de client gegevens verzenden via de TURN-server met behulp van Send Indication-berichten of via kanalen (ChannelBind). Bij ontvangst van gegevens van de client controleert de TURN-server de machtigingen (permissions) en stuurt de gegevens door naar de doelpeer. Om inkomende gegevens te ontvangen, moet de client vooraf een machtiging aanmaken voor de peer van wie hij gegevens verwacht, anders zal de TURN-server het binnenkomende pakket weigeren. De machtiging wordt aangemaakt via het CreatePermission-bericht met opgave van het IP-adres van de peer.

Toewijzing en levensduur

Een toewijzing op de TURN-server heeft een beperkte levensduur — standaard 10 minuten. De client moet periodiek een Refresh-verzoek verzenden om de toewijzing te verlengen. De levensduur wordt in seconden opgegeven in het LIFETIME-attribuut. Bij afwezigheid van Refresh verwijdert de server de toewijzing en geeft het relay-adres vrij. Aanbevolen vernieuwingsinterval is 5 minuten (300 seconden) ter bescherming tegen verlies van Refresh-pakketten.

Configuratie van TURN-server in WebRTC

In WebRTC wordt de TURN-server geconfigureerd via de RTCPeerConnection-configuratie in de iceServers-array. TURN-servers kunnen zowel UDP als TCP of TLS-transport gebruiken. Voor authenticatie worden meestal tijdelijke inloggegevens (TURN credentials) gebruikt, gegenereerd op de applicatieserver en beperkt in tijd.

Laten we een voorbeeld bekijken van het configureren van een TURN-server in JavaScript met authenticatie 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);

In dit voorbeeld wordt de TURN-server samen met de STUN-server gespecificeerd in een uniforme ICE-configuratie. Het ICE-proces zal eerst proberen host-kandidaten en van STUN verkregen srflx-kandidaten te gebruiken. Als de directe verbinding mislukt, schakelt ICE automatisch over naar de relay-kandidaat die van de TURN-server is verkregen. De parameter iceTransportPolicy: "all" staat relay-kandidaten toe — de alternatieve waarde "relay" verbiedt alle kandidaten behalve TURN, wat handig is voor testen.

Authenticatie van de TURN-server

Om ongeautoriseerd gebruik te voorkomen, vereist de TURN-server authenticatie. De standaardbenadering is het gebruik van tijdelijke inloggegevens (time-limited credentials), gegenereerd op de applicatieserver met HMAC-SHA1. De applicatieserver versleutelt de gebruikersnaam met de geheime sleutel van de TURN-server en retourneert de gebruikersnaam en het wachtwoord aan de client. De client geeft deze door in de RTCPeerConnection-configuratie en de browser gebruikt ze bij het aanmaken van een toewijzing op de TURN-server. Na het verlopen van de inloggegevens ontvangt de client nieuwe van de applicatieserver.

TURN vs STUN: vergelijking

TURN en STUN lossen vergelijkbare NAT-traversal-taken op, maar verschillen fundamenteel in mechanisme en kosten. TURN stuurt verkeer door en fungeert als tussenpersoon, terwijl STUN alleen helpt bij het bepalen van het externe adres voor een directe P2P-verbinding. De keuze ertussen wordt bepaald door het NAT-type van de peers en de prestatie-eisen.

CriteriumSTUNTURN
MechanismeBepalen extern adresDoorsturen verkeer
VerbindingDirect P2PVia relayserver
VertragingMinimaal (directe route)Extra (via relay)
ServerbelastingAlleen initiële verzoekenConstante verkeersdoorsturing
KostenLaag (enkele verzoeken)Hoog (serververkeer)
Werking met Symmetric NATNeeJa
BandbreedteAlleen P2P-kanaallimietServerkanaallimiet

In de praktijk wordt de TURN-server alleen gebruikt voor verbindingen waarbij P2P onmogelijk is. Volgens Google-gegevens (WebRTC-statistieken, 2023) vereist ongeveer 15–20% van alle WebRTC-verbindingen TURN-doorsturing. De overige 80–85% worden tot stand gebracht via STUN of lokale host-kandidaten. Bij het ontwerpen van de applicatie moet een budget worden gereserveerd voor TURN-verkeer ter grootte van 15–20% van het totale mediagegevensvolume, als het publiek gebruikers uit bedrijfsnetwerken en regio's met strenge NAT-beperkingen omvat.

Kosten en prestaties van TURN-server

De TURN-server verbruikt aanzienlijke resources omdat al het mediaverkeer erdoorheen gaat. Elke actieve oproep met TURN-doorsturing gebruikt serverbandbreedte gelijk aan de totale mediadoorvoer (inkomende + uitgaande stroom). Voor een video-oproep in HD-kwaliteit (720p) kan dit 1,5–2,5 Mb/s per verbinding in elke richting zijn, oftewel 3–5 Mb/s totaal verkeer via de TURN-server.

Er zijn verschillende opties voor het implementeren van TURN-infrastructuur. Gratis openbare TURN-servers worden niet aanbevolen voor productie vanwege het ontbreken van kwaliteits- en veiligheidsgaranties. Commerciële aanbieders (Twilio Network Traversal Service, Xirsys, Metered) bieden TURN als dienst met betaling per gigabyte verkeer — de typische kostprijs is $0,005–0,02 per gigabyte. Een eigen implementatie op basis van coturn (open-source TURN-server) vereist een server met voldoende bandbreedte en het configureren van monitoring.

  • coturn — de populairste open-source TURN-server, gebruikt in de meeste productiesystemen, ondersteunt UDP-, TCP-, TLS- en DTLS-transport.
  • Twilio — commerciële dienst die TURN + STUN biedt met betaling per verkeer en authenticatie via tijdelijke tokens.
  • Xirsys — gespecialiseerde TURN-provider met een wereldwijd servernetwerk en gedetailleerde gebruiksanalyses.
  • Metered.ca — TURN-dienst met een gratis limiet tot 50 GB per maand en betaling voor overschrijding.
  • Self-hosted coturn — volledige controle over de configuratie, maar vereist serverbeheer en het instellen van beschikbaarheidsmonitoring.

Bij het kiezen van een oplossing voor de TURN-server moet rekening worden gehouden met de geografie van gebruikers, de verkeerskosten en de beveiligingseisen. Voor applicaties met duizenden gelijktijdige oproepen kan self-hosted coturn op servers met een brede bandbreedte (1+ Gb/s) voordeliger zijn dan commerciële aanbieders. Voor kleine projecten met tientallen gebruikers hebben commerciële TURN-diensten de voorkeur vanwege het ontbreken van beheers- en monitoringskosten.

Veelgestelde vragen

Wat is een TURN-server in eenvoudige bewoordingen?

Een TURN-server is een tussenpersoon die gegevens tussen gebruikers doorgeeft wanneer ze niet rechtstreeks verbinding kunnen maken. Als twee computers zich achter routers bevinden die geen directe verbinding toestaan, ontvangt de TURN-server gegevens van de ene en stuurt deze naar de andere.

Wanneer is een TURN-server vereist in WebRTC?

Een TURN-server is vereist wanneer beide deelnemers van een WebRTC-gesprek zich achter Symmetric NAT of bedrijfsfirewalls bevinden die P2P-verkeer blokkeren. In dergelijke gevallen kan STUN niet helpen en schakelt het ICE-proces automatisch over naar de relay-kandidaat verkregen van de TURN-server.

Wat is het verschil tussen TURN en STUN?

STUN toont de computer alleen zijn externe adres voor een directe verbinding. TURN stuurt actief verkeer via zichzelf door. STUN veroorzaakt geen serverbelasting, TURN verbruikt bandbreedte. STUN werkt alleen met bepaalde NAT-typen, TURN werkt altijd, maar is duurder.

Hoeveel kost een TURN-server?

De kosten van een TURN-server zijn afhankelijk van de provider en het verkeersvolume. Twilio rekent ongeveer $0,005–0,01 per GB aan verkeer dat via TURN gaat. Xirsys — vanaf $0,007 per GB. Een eigen implementatie van coturn vereist een server met een bandbreedte van minimaal 100 Mb/s, waarvan de kosten afhangen van de hostingprovider.

Hoe configureer je je eigen TURN-server?

Je eigen TURN-server wordt geconfigureerd met behulp van coturn (open-source). De installatie omvat het configureren van poorten, authenticatie (shared secret), TLS-certificaten en firewall. Het basisconfiguratiebestand bevat de parameters listening-port, realm, user en fingerprint. Na configuratie wordt de server opgegeven in iceServers van WebRTC met het voorvoegsel turn: of turns: voor TLS.

Samenvatting

  • TURN Server — relayserver voor het doorsturen van mediaverkeer wanneer een directe P2P-verbinding tussen peers onmogelijk is.
  • Werkingsprincipe — de client maakt een toewijzing op de TURN-server, ontvangt een relay-transportadres en gebruikt dit om gegevens te verzenden en ontvangen via de tussenliggende server.
  • ICE-rol — TURN wordt geactiveerd als laatste redmiddel in het ICE-proces wanneer host- en srflx-kandidaten geen verbinding hebben kunnen maken.
  • Beperkingen — extra vertraging (50–200 ms), verbruik van serverbandbreedte (3–5 Mb/s per HD-oproep), verkeerskosten.
  • Vergelijking met STUN — TURN werkt met elk NAT-type, maar is duurder en langzamer. STUN heeft de voorkeur voor 80–85% van de verbindingen.
  • Hulpmiddelen — coturn (self-hosted open-source), Twilio NTS, Xirsys, Metered.ca voor commercieel gebruik van de TURN-server.
  • Aanbeveling — gebruik TURN alleen als fallback bij mislukking van STUN, monitor het percentage TURN-verbindingen en optimaliseer indien nodig.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook