WebRTC
WebRTC je protokol, který umožňuje dvěma prohlížečům komunikovat přímo mezi sebou – peer-to-peer, nízká latence, se zvukem, videem nebo daty. Díky tomu byly videohovory založené na prohlížeči životaschopné. Vytvořila také zcela novou kategorii úniku soukromí, protože aby se prohlížeče navzájem našly pomocí NAT, musí hledat své veřejné IP adresy způsobem, který je odhalí JavaScriptu.
Celé tělo článku je uvedeno níže v angličtině.
WebRTC (Web Real-Time Communication) je sada rozhraní API zabudovaná do každého moderního prohlížeče, která umožňuje webovým stránkám navazovat přímá spojení peer-to-peer mezi sebou navzájem nebo s nativními aplikacemi. Pohání Google Meet, Zoom v prohlížeči, hlasový chat Discordu, Twitter Spaces ve své době a bezpočet menších služeb. Bez WebRTC by video prohlížeče v reálném čase stále představovalo řešení typu Flash or bust.
Co obsahuje specifikace
WebRTC obsahuje tři hlavní rozhraní API:
- getUserMedia – přistupuje k fotoaparátu a mikrofon
- RTCPeerConnection — spravuje skutečné peer připojení: vyjednávání kodeku, šifrování, procházení NAT, řízení přetížení
- RTCDataChannel — odesílá libovolná textová data přes binární připojení peer-to-peer
Samotné připojení používá ICE (Interactive Connectivity Establishment) pro NAT traversal, DTLS pro šifrování handshake a SRTP pro šifrování médií. Celé připojení je ve výchozím nastavení šifrováno end-to-end; nelze jej vypnout.
Jak se kolegové navzájem nacházejí
Nejtěžší částí peer-to-peer je, že oba kolegové jsou obvykle za NAT. WebRTC používá ICE k odhalení možných síťových cest:
- Prohlížeč se zeptá serveru STUN "jak vypadá moje veřejná IP a port?" Server STUN odpoví zdrojovou adresou, kterou viděl – což je externí mapování NAT.
- Prohlížeč shromažďuje všechny své kandidátské adresy: místní IP adresy v LAN, STUNem zjištěnou veřejnou IP, volitelně TURN relay, pokud NAT nelze překročit. WebSocket na server aplikace).
- Zkouší se připojit při každé kombinaci, dokud se jedna nepodaří.
Problém s únikem IP
Krok shromažďování kandidátů je zdrojem úniku IP WebRTC. JavaScript může požádat prohlížeč, aby začal shromažďovat kandidáty ICE – a prohlížeč stránce odhalí výsledné veřejné a místní IP adresy. Stránka, která vás chce sledovat, můžete zavolat new RTCPeerConnection().createDataChannel(...), sklidit kandidáty a nyní zná vaši skutečnou IP bez ohledu na jakékoli zmatení na vrstvě HTTP.
To bylo objeveno v roce 2015 a rychle se stalo standardním nástrojem pro ochranu soukromí. Úniky WebRTC jsou důvodem, proč může osoba na VPN stále mít svou skutečnou IP viditelnou pro web, který se ptá správným způsobem.
Co se s tím udělalo
Dodavatelé prohlížečů reagovali postupným omezováním chování kandidátů, které stránka může vidět:XPL5PLZPLZ55moderní Chrome/Firefox/Safari má odhalovat pouze místní IP adresy (ty v síti LAN – obvykle 192.168.x nebo 10.x) bez výslovného povolení. Názvy hostitelů
192.168.1.42 používá náhodný prohlížeč lo. hostname.getUserMedia (např. skutečný videohovor), prohlížeč shromáždí úplné kandidáty včetně veřejné IP — v tom okamžiku jste stejně udělili oprávnění pro média.Výsledek: pasivní úniky IP WebRTC ve výchozím nastavení byly většinou uzavřeny. Stránky, které agresivně shromažďují kandidáty, stále existují a uživatelé se starými prohlížeči nebo uvolněným nastavením jsou stále zranitelní. Náš průvodce úniky WebRTC se zabývá ověřováním.
Proč záleží na peer-to-peer
U hovorů dvou osob odesílá WebRTC média přímo mezi peery, přičemž signální server se používá pouze pro nastavení připojení. Video neprochází servery aplikace. To je výrazně levnější na provoz (žádné náklady na šířku pásma pro média) a výrazně nižší latence (žádné další skoky). Skupinové hovory obvykle potřebují jednotku selektivního předávání (SFU) – server, který přenáší média – ale šifrování je stále kompletní, pokud je správně nakonfigurováno. WebCodecs (nezpracovaný přístup k hardwaru kodéru/dekodéru). Společně odemykají nové případy použití, jako je cloudové hraní, překódování videa s nízkou latencí v prohlížeči a hromadný přenos souborů peer-to-peer s lepší kontrolou zahlcení než RTCDataChannel.
Samotný WebRTC se také modernizuje — původní sémantika SDP plánu B je postupně vyřazována ve prospěch sjednoceného plánu a povrch API je pro vývojáře stále čistší.
Často kladené otázky
- Mohu úplně zakázat WebRTC?
- Ano, ve Firefoxu: about:config → <code>media.peerconnection.enabled</code> → false. Prohlížeče Chromium nevystavují přepínač bez rozšíření (uBlock Origin má nastavení, jiné je WebRTC Network Limiter od Google). Zakázání přeruší všechny stránky, které pro volání používají WebRTC.
- Chrání VPN před úniky WebRTC?
- Záleží na prohlížeči. Moderní prohlížeče neodhalí veřejnou IP JavaScriptu bez povolení médií, takže pasivní únik WebRTC přes VPN je ve výchozím nastavení vzácný. Pokud však stránka zavolá getUserMedia a uživatel to přijme, mohou shromáždění kandidáti zahrnovat veřejnou IP VPN – to se očekává – nebo skutečnou IP, pokud kolem VPN uniká zásobník IPv6.
- Co je STUN server a kdo je provozuje?
- Servery STUN pouze odrážejí zdrojovou IP a port, který vidí – malé, bezstavové, volně spustitelné. Google provozuje veřejný server STUN na adrese stun.l.google.com:19302; Twilio, Mozilla a další provozují své. Mnoho aplikací používá ve výchozím nastavení Google. Servery STUN vidí pouze to, že došlo k požadavku; nevidí média, která proudí poté.
- Je WebRTC šifrováno?
- Vždy podle spec. DTLS handshake odvozuje klíče pro SRTP, které šifruje média. Datový kanál je šifrován DTLS. Šifrování nelze zakázat. End-to-end šifrování je samostatná vlastnost – skupinová volání přes SFU mohou být E2EE pouze v případě, že je aplikace explicitně implementuje (Zoom, Signal ano; mnoho jednodušších aplikací ne).
- Proč je nyní video z prohlížeče do prohlížeče tak dobré ve srovnání s před deseti lety?
- Hardwarová akcelerace kodeků (AV1, VP9, H.264 na GPU), řízení přetížení přizpůsobené pro média v reálném čase (algoritmus řízení přetížení společnosti Google) a lepší procházení NAT, které umožňuje častěji přímé cesty. Všechny jsou uvnitř WebRTC.