Fexyn
Fexyn
All posts

WebRTC-утечки: как браузер сдаёт твой настоящий IP

Fexyn Team··6 min read

Ты подключаешься к VPN. Статус-бар говорит, что ты защищён. Открываешь сайт. Сайт молча просит у твоего браузера твой настоящий IP-адрес — не VPN'овский, а тот, который реально присвоил провайдер. Браузер его отдаёт. Ты не видишь промпта, ты не видишь предупреждения, и VPN делает ровно то, что обещал.

Это WebRTC-утечка. Виноват браузер, не VPN. И работает она в каждом современном браузере, пока ты её не выключишь.

Что такое WebRTC

WebRTC (Web Real-Time Communication) — это браузерный API, который обеспечивает голос и видео в браузере. Google Meet, голосовые каналы Discord, Slack huddles, Whereby, in-browser-часть Zoom — все используют WebRTC. Им же пользуются прямые передачи файлов, screen sharing и кнопки «нажми чтобы позвонить» на страницах поддержки.

Чтобы peer-to-peer соединения работали, браузеру нужно знать твой публичный IP. Так до тебя дотянется другая сторона. WebRTC решает это через STUN-сервер: браузер спрашивает публичный STUN-сервер «с какого адреса я к тебе пришёл?». STUN-сервер отвечает тем IP, который видит. Браузер кеширует это и отдаёт любой странице, которая спросит через WebRTC API.

Архитектура имела смысл в 2011-м, когда WebRTC проектировался. Latency-sensitive peer-to-peer был use case. Приватность от произвольных сайтов в дизайн-документ не входила.

Почему VPN это не лечит

VPN туннелирует твой сетевой трафик. STUN-обмен WebRTC работает поверх этого, но ответ, который кеширует браузер — это твой настоящий IP, не туннельный, в двух случаях:

Случай 1: STUN был запрошен до подключения VPN. Браузер узнал твой настоящий IP при старте или в предыдущей сети. Закешировал. Страница спрашивает WebRTC IP-адреса и получает закешированное настоящее значение.

Случай 2: VPN не туннелирует UDP к STUN-серверу. В некоторых VPN-конфигурациях есть edge-кейсы маршрутизации. STUN-пакет уходит из туннеля.

Даже при правильно протуннелированном VPN STUN-кеш на уровне браузера — это поверхность атаки. Страницам не нужно самим запрашивать STUN; они просто спрашивают у WebRTC те IP-адреса, которые браузер уже знает.

Exposed против leaking

Терминология имеет значение, потому что реакция разная.

Exposed. Ты не на VPN, открываешь страницу, страница видит твой настоящий IP. Это ожидаемое поведение. Это не утечка, это работа интернета как задумано.

Leak (утечка). Ты НА VPN, страница должна видеть только VPN'овский IP, но WebRTC всё равно отдаёт твой настоящий. Это утечка. Приватность, которую ты считал имеешь, сломана.

Тест WebRTC-утечек Fexyn показывает, в каком случае ты находишься. С подключённым VPN публичный IP, который покажется, должен быть IP сервера Fexyn. Если там твой домашний IP — ты течёшь.

Что атакующий видит из утечки

То же, что и без VPN:

  • Твой настоящий публичный IP
  • Грубая геолокация (обычно до города, иногда до района для residential провайдеров)
  • Твой провайдер
  • Постоянный идентификатор, который можно коррелировать с другими визитами и другими сайтами

Хуже, чем без VPN: утечка даёт им и твой настоящий IP, и VPN'овский. Они могут коррелировать их между сессиями, построить профиль, который следует за тобой включён ли VPN или нет, и использовать сам VPN'овский IP как fingerprint.

Для threat-моделей, где геолокация важна — журналисты, активисты, любой кто прячется от сталкера, любой кто использует VPN, чтобы избежать юрисдикционно-специфичного трекинга — WebRTC-утечка молча сводит защиту на нет.

Фиксы по браузерам

Лечение живёт в браузере, не в VPN. Каждый браузер обрабатывает WebRTC по-разному.

Firefox — полное отключение

Самый чистый вариант. Firefox даёт отключить WebRTC полностью:

  1. Открой новую вкладку и иди на about:config. Прими предупреждение.
  2. Найди media.peerconnection.enabled.
  3. Поставь в false.
  4. Перезапусти Firefox.

Цена: видеозвонки в любых браузерных приложениях перестают работать. Slack huddles, Google Meet, Discord voice в браузере — мертвы, пока не вернёшь обратно. Для большинства privacy-focused пользователей это допустимо; звонки делаются в десктоп-приложении.

Brave — встроенный тумблер

Brave идёт с настройкой, ориентированной на приватность:

  1. Открой brave://settings.
  2. Найди «WebRTC».
  3. Поставь «WebRTC IP Handling Policy» в Disable non-proxied UDP.

Это самая сильная настройка, которая не ломает WebRTC полностью. Звонки работают; STUN-трафик ограничен путём через прокси. Для пользователей Brave на VPN — правильная настройка.

Chrome и Edge — нужно расширение

Ни в Chrome, ни в Edge нет встроенного WebRTC-тумблера в UI настроек. Нужно расширение. Установи одно из:

  • uBlock Origin с включённым фильтром «Prevent WebRTC from leaking local IP addresses». uBlock Origin в любом случае правильный ad-blocker; это бесплатный бонус.
  • WebRTC Network Limiter (опубликован самим Google). Single-purpose, ограничивает WebRTC путём через прокси.

Избегай рандомных расширений «WebRTC fix» с одной звездой в Chrome Web Store. Категория притягивает низкокачественные и иногда вредоносные расширения. Держись uBlock Origin или того, что от Google.

Safari

Safari реализует WebRTC, но не выставляет тумблер. Если ты в Safari и WebRTC-утечки тебя волнуют — переключись на Brave (Webkit-based, есть тумблер) или Firefox (Gecko-based, полное отключение).

Как Fexyn это обрабатывает

Fexyn не пытается monkey-патчить твой браузер. Поведение WebRTC в браузере — это уровень браузера, и за пределами того, что VPN может или должен переопределять.

Что Fexyn делает:

  • Туннелирует весь UDP-трафик, включая STUN, когда протокол позволяет. WireGuard туннелирует всё по умолчанию. Конфигурации VLESS Reality и OpenVPN туннелируют UDP по тому же пути.
  • Рекомендует конкретные настройки браузера на странице поддержки.
  • Предоставляет инструмент проверки, чтобы можно было проверить конкретное сочетание браузер/настройка.

Сочетание — туннель STUN через VPN плюс отключённый или ограниченный WebRTC на стороне браузера — закрывает утечку.

Перепроверь после фикса

После смены настроек браузера перезапусти браузер и снова прогоняй тест на fexyn.com/tools/webrtc-leak-test. Публичный IP, который покажется, должен совпадать с сервером Fexyn. Локальный IP должен быть либо пустым, либо показывать только адрес адаптера VPN-туннеля.

Если всё ещё видишь свой настоящий публичный IP — изменение не применилось. Проверь, что:

  • Браузер реально перезапустился (закрыть вкладки недостаточно; выйти из приложения)
  • Для Brave настройка «Disable non-proxied UDP», а не «Disable non-proxied UDP and force proxy»
  • Для Chrome/Edge расширение включено, а не просто установлено

Чем WebRTC-утечка не является

WebRTC-утечки конкретно про экспозицию IP через браузерный API. Они не:

  • Влияют на не-браузерные приложения. Native десктоп-приложение на VPN не имеет этой проблемы.
  • Влияют на мобильные приложения, у которых своя сеть. iOS/Android приложения, не встраивающие webview, обычно не выставляют VPN'овский IP через WebRTC.
  • Указывают, что сам VPN-туннель сломан. Туннель в порядке; браузер добровольно сдаёт информацию выше уровня туннеля.

Связанное чтение

Попробуй Fexyn бесплатно 7 дней. Туннель делает свою часть; браузерные фиксы — это разовая настройка.

WebRTC-утечки: как браузер сдаёт твой настоящий IP | Fexyn VPN