STUN Server: co to je, jak to funguje a kde se používá

Autor: IT Sectr Publikováno: 2026-06-02 Doba čtení: 8 min

STUN Server — je server protokolu Session Traversal Utilities for NAT (STUN), který umožňuje klientovi určit svou externí IP adresu a port, stejně jako typ Network Address Translation (NAT), za kterým se nachází. Podle IETF RFC 5389, 2008 je STUN povinnou součástí infrastruktury WebRTC, která zajišťuje vytvoření přímého peer-to-peer spojení mezi klienty za NAT.

Hlavní body

  • STUN Server — síťový uzel, který pomáhá klientovi určit jeho veřejnou IP adresu a typ NAT pro organizaci P2P spojení.
  • Princip — klient odešle požadavek STUN, server odpoví IP adresou a portem, z nichž požadavek přišel, a odhaluje externí adresní údaje klienta.
  • Role ve WebRTC — STUN server se používá ve fázi ICE Candidate Gathering pro shromažďování kandidátů a ověření možnosti přímého spojení.
  • Omezení — STUN nefunguje se symetrickým NAT (Symmetric NAT), kde se externí adresa mění pro každý cílový host.
  • Alternativa — při selhání STUN se používá TURN server, který přenáší provoz přes reléový uzel.

Co je STUN Server

STUN Server (Session Traversal Utilities for NAT) — je síťová služba pracující podle protokolu definovaného v RFC 5389 a aktualizovaného v RFC 8489. Hlavním úkolem STUN serveru je poskytnout klientovi informace o jeho vlastní veřejné IP adrese a portu viditelných z externí sítě, stejně jako určit typ NAT zařízení mezi klientem a internetem.

Architektura STUN zahrnuje dvě součásti: STUN klienta integrovaného v aplikaci (například prohlížeč nebo nativní WebRTC aplikace) a STUN server umístěný ve veřejné síti. Klient odešle STUN Binding Request na server, který v odpovědi uvádí IP adresu a port zdroje požadavku — tedy veřejné adresy klienta, které server vidí. Porovnáním těchto údajů s lokálními adresami může klient určit, jaký typ NAT se používá v jeho síti.

Protokol STUN

STUN pracuje přes UDP (port 3478 standardně) nebo TCP (port 3478 nebo 5349 pro TLS). STUN zpráva se skládá z 20bajtové hlavičky a proměnného počtu atributů. Hlavička obsahuje typ zprávy (Binding Request, Binding Response, Binding Error Response), délku a jedinečný identifikátor transakce (96 bitů), který umožňuje párování požadavků a odpovědí. Každá Binding Response obsahuje atribut XOR-MAPPED-ADDRESS — externí adresu klienta, zakódovanou maskováním pro ochranu proti útokům založeným na zachycování STUN provozu.

Jak funguje STUN server

STUN server pracuje podle jednoduchého protokolu požadavek-odpověď. Klient nacházející se za NAT vytvoří Binding Request a odešle jej na STUN server. Server přijme paket, extrahuje z UDP hlavičky zdrojovou IP adresu a port odesílatele, poté vytvoří Binding Response, zabalením této adresy do atributu XOR-MAPPED-ADDRESS. Odpověď je odeslána zpět na zdrojovou adresu požadavku.

Klient obdrží odpověď a extrahuje XOR-MAPPED-ADDRESS, který obsahuje externí IP adresu a port přidělené NAT zařízením. Poté klient porovná tuto adresu se svou lokální (RFC 1919 — privátní) adresou. Pokud se adresy shodují — klient není za NAT. Pokud se liší — klient je za NAT a externí adresa je použita jako kandidát pro ICE (Interactive Connectivity Establishment) ve WebRTC.

Proces detekce NAT (NAT Discovery)

STUN server umožňuje určení typu NAT pomocí sekvence testovacích požadavků. Klient odesílá požadavky s různými příznaky (CHANGE-REQUEST) a analyzuje odpovědi. Plný detekční cyklus zahrnuje odesílání požadavků na různé IP adresy a porty STUN serveru. Pokud server odpoví na požadavek se změněným portem — NAT typu Restricted Cone. Pokud neodpoví na požadavek se změněným portem a IP — NAT typu Symmetric. Tato informace je klíčová pro výběr strategie ICE ve WebRTC.

STUN server a typy NAT

STUN server je schopen určit čtyři hlavní typy NAT, z nichž každý jinak ovlivňuje možnost vytvoření P2P spojení. Typ NAT určuje, zda STUN může zajistit přímé spojení mezi dvěma klienty. Na typu NAT závisí, který ICE kandidát — host, server reflexive nebo relay — bude použit pro spojení.

Typ NATChováníSTUN fungujeICE Fallback
Full ConeJakýkoli externí host může odeslat paket klientoviAnoServer Reflexive
Restricted ConePouze hosté, kterým klient odesílal paketyAnoServer Reflexive
Port RestrictedJako Restricted, ale filtruje i podle zdrojového portuAnoServer Reflexive
Symmetric NATExterní adresa je jedinečná pro každý pár host:portNeRelay (TURN)

Symmetric NAT — jediný typ, se kterým si STUN neporadí. Při Symmetric NAT každý nový požadavek na nový cílový host získá jinou externí adresu (IP a/nebo port). Protože STUN server hlásí adresu pro spojení se samotným STUN serverem, tato adresa je nepoužitelná pro spojení s jiným klientem. V takových případech se ve WebRTC používá TURN server pro přenos provozu. Podle výzkumů (Ford et al., RFC 3489, 2003) je přibližně 8–10 % všech NAT zařízení na internetu symetrických.

Použití STUN serveru ve WebRTC

STUN server je integrován do WebRTC prostřednictvím konfigurace RTCPeerConnection. Prohlížeč nebo nativní aplikace používá STUN pro shromažďování ICE kandidátů, které jsou poté vyměňovány prostřednictvím Signaling Serveru. V konfiguraci WebRTC je STUN server zadán v poli iceServers s prefixem stun: pro UDP nebo stuns: pro TLS spojení.

Podívejme se na příklad konfigurace STUN serveru v JavaScriptu při vytváření RTCPeerConnection pro WebRTC aplikaci.

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 kandidát:", event.candidate.candidate);
    }
};

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

V tomto příkladu jsou použity veřejné STUN servery Google (stun.l.google.com:19302). Při vytváření offer nebo answer prohlížeč automaticky odešle STUN Binding Request na zadané servery, získá externí adresu (server reflexive candidate) a přidá ji do seznamu ICE kandidátů. Po shromáždění všech kandidátů jsou odesláni vzdálenému partnerovi prostřednictvím Signaling Serveru pro pokus o vytvoření přímého P2P spojení.

Typy ICE kandidátů a STUN

V procesu ICE existují tři typy kandidátů: host (lokální adresa), srflx (server reflexive — získaný od STUN) a relay (přenesený přes TURN). STUN server zajišťuje výskyt srflx kandidátů, které mají vyšší prioritu než relay, protože spojení přes STUN je přímé a nevyžaduje přenos. Proces ICE kontroluje všechny kombinace kandidátů (lokálních a získaných od STUN) obou stran, počínaje nejvyššími prioritami.

Omezení protokolu STUN

STUN server má základní omezení související s architekturou protokolu. Hlavním omezením je nemožnost práce se Symmetric NAT, kdy každý nový požadavek na externí host získá jedinečný externí port. V tomto případě nelze adresu získanou od STUN serveru použít pro spojení s jiným partnerem, protože NAT vytvořil vazbu pouze pro komunikaci se samotným STUN serverem.

Druhé omezení souvisí s tím, že STUN neposkytuje přenos dat. Pokud je přímé P2P spojení nemožné (oba partneři jsou za Symmetric NAT), STUN nenabízí alternativní cestu pro přenos dat. V tomto případě je vyžadován TURN server, který funguje jako přenašeč mediálního provozu mezi partnery, přijímá data od jednoho účastníka a odesílá je druhému prostřednictvím své veřejné IP adresy.

  • Symmetric NAT — STUN nefunguje se symetrickým NAT, protože externí adresa je jedinečná pro každý cílový host a nelze ji znovu použít pro P2P.
  • Firewall Deep Packet Inspection — některé firewally blokují STUN provoz na základě detekce signatur protokolu v UDP paketech na portu 3478.
  • IPv6 — v sítích IPv6 se NAT obvykle nepoužívá, proto STUN není nutný, ale WebRTC na IPv6 si vystačí s host kandidáty bez potřeby STUN nebo TURN.
  • Závislost na dostupnosti — STUN server musí být pro klienta dostupný ve fázi vytváření spojení, jinak nebudou srflx kandidáti shromážděni.
  • Bezpečnost — protokol STUN je zranitelný vůči zesilovacímu útoku (amplification attack), pokud je server nesprávně nakonfigurován a odpovídá na požadavky s padělanou zdrojovou adresou.

Navzdory omezením zůstává STUN server kritickou součástí infrastruktury WebRTC. Ve většině případů (80–90 %) lze přímé P2P spojení vytvořit pomocí STUN, což umožňuje vyhnout se nákladům na TURN přenos a snižuje zpoždění přenosu mediálních dat. Pro veřejné WebRTC aplikace se doporučuje používání kombinace STUN a TURN serverů s automatickým fallbackem pro záruku spojení ve všech síťových podmínkách.

Časté dotazy

Co je STUN server jednoduchými slovy?

STUN server — je zrcadlo na internetu, které říká klientovi jeho externí IP adresu. Když je počítač za routerem (NAT), nezná svou veřejnou adresu. STUN server pomáhá ji zjistit, aby se ostatní počítače mohly připojit přímo.

Jak se STUN server používá ve WebRTC?

Ve WebRTC je STUN server uveden v konfiguraci RTCPeerConnection. Prohlížeč odešle STUN požadavek pro získání externí adresy kandidáta (srflx). Tento kandidát je předán vzdálenému partnerovi prostřednictvím Signaling Serveru a ICE se pokouší vytvořit přímé spojení mezi nimi.

Jaký je rozdíl mezi STUN a TURN servery?

STUN pomáhá zjistit externí adresu pro přímé P2P spojení. TURN přenáší provoz prostřednictvím svého serveru, když P2P není možné. STUN je zrcadlo, TURN je prostředník. TURN vytváří zátěž na serveru a přidává zpoždění, proto je STUN preferovanější.

Jaké veřejné STUN servery lze použít?

Google poskytuje bezplatné STUN servery: stun.l.google.com:19302, stun1.l.google.com:19302. Twilio také poskytuje infrastrukturu STUN + TURN prostřednictvím služby Network Traversal Service. Pro produkční aplikace je lepší používat vlastní nebo komerční STUN/TURN servery se zaručenou dostupností.

Proč STUN nefunguje se Symmetric NAT?

Symmetric NAT vytváří jedinečné externí mapování portu pro každý pár lokální adresa:externí cílová adresa. Adresa, kterou klient získá od STUN serveru, je vázána na spojení s tímto STUN serverem. Když se jiný partner pokusí použít tuto adresu, Symmetric NAT paket zablokuje, protože mapování portu je pro novou cílovou adresu jiné.

Shrnutí

  • STUN Server — síťový uzel implementující protokol RFC 5389 pro určení externí IP adresy a portu klienta za NAT.
  • Princip fungování — klient odešle Binding Request, server odpoví XOR-MAPPED-ADDRESS obsahujícím veřejnou zdrojovou adresu požadavku.
  • Typy NAT — STUN funguje s Full Cone, Restricted Cone a Port Restricted NAT, ale neporadí si se Symmetric NAT.
  • Role ve WebRTC — STUN se používá ve fázi ICE Candidate Gathering pro tvorbu srflx kandidátů s externí adresou.
  • Omezení — nefunguje se Symmetric NAT, může být blokován DPI firewally, neposkytuje přenos dat.
  • Bezplatné servery — stun.l.google.com:19302 a další veřejné STUN servery jsou dostačující pro testování a většinu scénářů.
  • Doporučení — vždy používejte STUN v kombinaci s TURN serverem jako fallback pro záruku spojení ve všech síťových podmínkách.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také