Qué revela una lista de candidatos WebRTC sobre tu VPN
Un candidato de host, reflexivo de servidor o de retransmisión dice de dónde vino una dirección. Solo el par ICE seleccionado dice qué ruta usaron realmente los medios.
Cuando una página de prueba WebRTC imprime 172.20.4.15, ha aprendido que existe una interfaz local en esa red. Eso es una revelación genuina y no es el mismo hallazgo que «los medios salieron por la salida de la VPN». El descubrimiento de candidatos y el enrutamiento de paquetes son mecanismos separados, y la mayoría de los informes de fugas los fusionan en un solo veredicto. Cuál de los dos estés mirando decide la solución.
La recopilación ocurre antes de que se envíe nada
El navegador enumera las interfaces locales, envía una solicitud de vinculación a un servidor STUN y pide una asignación a un servidor TURN, y después escribe los resultados en la descripción de la sesión como líneas de candidatos. Todo eso termina sin llamada, sin medios y sin interlocutor. Una lista de candidatos es, por tanto, un registro del descubrimiento, no del transporte.
Los navegadores modernos pueden sustituir la dirección literal de un candidato de host por un nombre mDNS .local, de modo que la página no puede leer la IP privada. La red local sigue viendo las consultas de multidifusión que resuelven ese nombre, así que la dirección se oculta a la aplicación en lugar de eliminarse del cable.
El orden también importa: una carga nueva de la página recopila un conjunto nuevo, con otra asignación TURN y posiblemente otro mapeo reflexivo. Dos ejecuciones que no coinciden no son necesariamente dos configuraciones distintas.
Tres tipos de candidatos, tres clases de pruebas
Cada línea procede de una observación distinta. Cada tipo responde a una pregunta distinta, y la tabla los separa por lo que pueden y no pueden establecer.
| 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 |
Un candidato de retransmisión se confunde a menudo con la dirección de internet del usuario. Pertenece al servidor TURN, y su presencia muestra que había una retransmisión disponible, no que el navegador la eligiera. La misma confusión va en sentido contrario con los candidatos de host, donde un nombre mDNS oculta la dirección a la página mientras la red sigue transportando las consultas. Lee el tipo antes de leer el valor.
El par seleccionado responde a la pregunta de enrutamiento
ICE empareja cada candidato local con cada uno remoto, ejecuta comprobaciones de conectividad sobre cada par y nombra un ganador. Ese par nombrado, visible en los diagnósticos del propio navegador, transporta los medios. Todo lo demás de la lista es una posibilidad que perdió.
El ganador te dice la forma de la ruta. De retransmisión a retransmisión pasa por el servidor TURN, un par de host se queda en la red local y un par reflexivo de servidor va directo por NAT. Ese es el hecho que necesita una comprobación de VPN, y es un hecho distinto del de la lista de direcciones. Dos llamadas con listas de candidatos idénticas pueden tomar pares diferentes.
Los candidatos no seleccionados se recopilaron igualmente, y la recopilación es tráfico de red que sale de la máquina. Una llamada que al final usó la retransmisión no significa que no se revelara nada mientras se construía la lista.
Los controles responden a objetivos, no a una puntuación de fugas
La especificación de gestión de IP de WebRTC describe varias políticas: usar solo la interfaz que lleva la ruta predeterminada, usar todas las interfaces y desactivar el UDP sin proxy para que el tráfico tenga que pasar por una retransmisión o un proxy. Cada una cambia conectividad y latencia por un tipo distinto de exposición. Cuál implementa un navegador, y con qué nombre, varía según la plataforma y la versión.
Elige la política según el objetivo. Ocultar las direcciones locales a una página es un objetivo; impedir el tráfico directo entre pares es otro; mantener cada paquete dentro del túnel es un tercero. El primero trata sobre todo de lo que aprende la aplicación, el segundo de qué ruta se permite, y el tercero debe imponerse también en el límite de la plataforma o de la VPN.
Sea cual sea el control que elijas, verifica las dos mitades: ejecuta la prueba de recopilación y anota los tipos de candidatos, y luego inspecciona el par seleccionado durante una sesión real. Una lista de direcciones limpia con una ruta de medios directa sigue siendo una ruta que no querías.