Wat een WebRTC-kandidatenlijst over je VPN verraadt
Een host-, server-reflexieve of relay-kandidaat zegt waar een adres vandaan komt. Alleen het gekozen ICE-paar zegt welk pad de media werkelijk heeft gebruikt.
Wanneer een WebRTC-testpagina 172.20.4.15 afdrukt, heeft die geleerd dat er op dat netwerk een lokale interface bestaat. Dat is een echte onthulling, en het is niet dezelfde bevinding als ‘de media verlieten de VPN-uitgang’. Kandidaten ontdekken en pakketten routeren zijn gescheiden mechanismen, en de meeste lekrrapporten smelten ze samen tot één oordeel. Welk van de twee je ziet, bepaalt de oplossing.
Verzamelen gebeurt voordat er iets wordt verzonden
De browser somt lokale interfaces op, stuurt een bindingsverzoek naar een STUN-server en vraagt een TURN-server om een toewijzing, en schrijft de resultaten vervolgens als kandidaatregels in de sessiebeschrijving. Dat alles rondt af zonder gesprek, zonder media en zonder tegenpartij. Een kandidatenlijst is dus een verslag van ontdekking, niet van transport.
Moderne browsers kunnen het letterlijke adres van een hostkandidaat vervangen door een mDNS-naam .local, zodat de pagina het privé-IP niet kan lezen. Het lokale netwerk ziet de multicast-query’s die die naam oplossen nog steeds, dus het adres wordt voor de toepassing verborgen in plaats van van de kabel verwijderd.
De volgorde is ook belangrijk: een nieuwe paginalading verzamelt een nieuwe set, met een andere TURN-toewijzing en mogelijk een andere reflexieve mapping. Twee runs die van elkaar verschillen zijn niet noodzakelijk twee verschillende configuraties.
Drie soorten kandidaten, drie soorten bewijs
Elke regel komt uit een andere waarneming. Elk type beantwoordt een andere vraag, en de tabel scheidt ze op wat ze wel en niet kunnen vaststellen.
| Candidate | Derived from | What it establishes | What it cannot establish |
|---|---|---|---|
| Host | An interface on the device | A local address exists in that network | That the peer can reach it |
| Server-reflexive | A STUN binding response | How a NAT mapped this source | Which exit the media will use |
| Peer-reflexive | A connectivity check that arrived | An address seen by the far side | That it was ever advertised |
| Relay | A TURN allocation | The relay server accepted the session | That the relay carries the call |
Een relaykandidaat wordt geregeld aangezien voor het internetadres van de gebruiker. Hij hoort bij de TURN-server, en de aanwezigheid ervan toont dat er een relay beschikbaar was, niet dat de browser die heeft gekozen. Dezelfde verwarring loopt de andere kant op bij hostkandidaten, waar een mDNS-naam het adres voor de pagina verbergt terwijl het netwerk de query’s nog draagt. Lees het type voordat je de waarde leest.
Het gekozen paar beantwoordt de routeringsvraag
ICE paart elke lokale kandidaat aan elke externe, voert verbindingscontroles uit op elk paar en nomineert een winnaar. Dat genomineerde paar, zichtbaar in de eigen diagnostiek van de browser, draagt de media. Al het andere op de lijst is een mogelijkheid die verloor.
De winnaar vertelt je de vorm van het pad. Relay naar relay gaat via de TURN-server, een hostpaar blijft op het lokale netwerk, en een server-reflexief paar gaat rechtstreeks via NAT. Dat is het feit dat een VPN-controle nodig heeft, en het is een ander feit dan de adressenlijst. Twee gesprekken met identieke kandidatenlijsten kunnen verschillende paren nemen.
Niet-gekozen kandidaten werden toch verzameld, en verzamelen is netwerkverkeer dat de machine verlaat. Een gesprek dat uiteindelijk de relay gebruikte, betekent niet dat niets werd onthuld terwijl de lijst werd opgebouwd.
Bedieningselementen horen bij doelen, niet bij een lekscore
De WebRTC-specificatie voor IP-afhandeling beschrijft verschillende beleidsregels: alleen de interface gebruiken die de standaardroute draagt, alle interfaces gebruiken, en niet-geproxiede UDP uitschakelen zodat verkeer via een relay of proxy moet. Elk ruilt connectiviteit en latentie tegen een ander soort blootstelling. Welke een browser implementeert, en onder welke naam, verschilt per platform en versie.
Kies het beleid op basis van het doel. Lokale adressen voor een pagina verbergen is één doel; direct peer-to-peerverkeer voorkomen is een ander; elk pakket in de tunnel houden is een derde. Het eerste gaat vooral over wat de toepassing leert, het tweede over welk pad is toegestaan, en het derde moet ook aan de grens van het platform of de VPN worden afgedwongen.
Welk bedieningselement je ook kiest, verifieer beide helften: voer de verzameltest uit en noteer de kandidatentypen, en inspecteer daarna het gekozen paar tijdens een echte sessie. Een schone adressenlijst met een direct mediapad is nog steeds een pad dat je niet bedoelde.