Почему ваш прокси "светится": анализ WebRTC-утечек и DNS-запросов через IPv6
Содержание
- Анатомия утечки: как браузер обходит прокси
- IPv6: невидимый канал утечки
- DNS-запросы: тихий информатор
- Как IPv6-прокси решают проблему
- Техническая реализация: почему это работает
- Проверка полной маршрутизации через прокси
- Кейс: Chrome и WebRTC через IPv4-прокси
- Кейс: DNS-утечка при работающем прокси
- Кейс: IPv6-утечка при включённом VPN
- Блокировка IPv6 в конфигурации OpenVPN
- Практические проверки: что делать прямо сейчас
- Настройка браузеров: закрываем дыры
- Отключение WebRTC в Chrome через групповые политики
- Windows: реестр
- Как выбирать прокси: чек-лист
- Что в итоге
Анатомия утечки: как браузер обходит прокси
Вы настроили прокси, проверили IP на сайте — всё чисто. Но через минуту ваш реальный адрес уже в логах. Классика. Браузеры — это зоопарк технологий, и каждая тянет соединения по-своему.
WebRTC — главный виновник. Этот протокол для видеозвонков и файлообмена работает напрямую, игнорируя системные настройки прокси. Он использует STUN-серверы, чтобы узнать свой внешний IP. И вот тут начинается веселье: браузер отправляет запрос на STUN-сервер через ваш реальный сетевой интерфейс, а не через прокси.
```javascript
// Проверка WebRTC-утечки прямо в консоли браузера
const pc = new RTCPeerConnection({
iceServers: [{ urls: "stun:stun.l.google.com:19302" }]
});
pc.createDataChannel("test");
pc.onicecandidate = e => {
if (e.candidate) {
console.log(e.candidate.candidate);
}
};
pc.createOffer().then(o => pc.setLocalDescription(o));
```
Запустите этот код на странице с включённым прокси. Если увидите IP, который не совпадает с адресом прокси — всё, вы светитесь. Это работает даже в приватном режиме.
IPv6: невидимый канал утечки
IPv6 — отдельная песня. Многие прокси-серверы работают только на IPv4. Браузер получает IPv6-адрес от вашего провайдера и использует его для прямых соединений, даже когда прокси включён. Выглядит это так: основной трафик идёт через прокси на IPv4, а WebRTC или даже обычные HTTPS-запросы летят напрямую через IPv6.
Проверка простая:
```bash
curl -6 https://api6.ipify.org
```
Если команда вернула IP, отличный от адреса вашего прокси, — канал открыт. Большинство VPN-клиентов и браузерных расширений не блокируют IPv6-трафик. Они просто про него забывают.
DNS-запросы: тихий информатор
DNS — третья дыра. Когда вы вводите сайт в браузере, система сначала спрашивает DNS-сервер: "где живёт этот домен?". Если запрос уходит на DNS вашего провайдера, тот видит все посещённые вами сайты. Прокси тут ни при чём — он получает уже готовый IP-адрес.
Проверить просто. Смотрим, какой DNS-сервер используется:
```bash
cat /etc/resolv.conf
```
Или на Windows:
```powershell
nslookup example.com
```
Если в ответе виден адрес вашего провайдера (обычно что-то вроде 192.168.0.1 или 10.0.0.1) — ваш DNS-трафик не зашифрован и не проходит через прокси. Даже если сам прокси работает идеально, DNS-запросы выдают вас с головой.
Как IPv6-прокси решают проблему
Тут в игру вступают сервисы вроде lexic.ml. Их особенность — полная поддержка IPv6 на всех уровнях. Это значит, что и HTTP, и SOCKS5, и DNS-запросы идут через прокси-инфраструктуру, которая работает на обеих версиях протокола.
Когда ваш браузер пытается установить WebRTC-соединение через IPv6, он упирается в прокси-сервер, который обрабатывает и IPv6-трафик. Реального адреса в STUN-ответе нет — только адрес прокси. DNS-запросы тоже уходят через зашифрованный туннель, а не напрямую к провайдеру.
Техническая реализация: почему это работает
Разберём на примере. Стандартный прокси на IPv4 обрабатывает только входящие соединения по протоколу IPv4. IPv6-трафик либо отбрасывается, либо идёт в обход. Браузер Chrome, например, при включённом прокси для IPv4 продолжает использовать IPv6 для прямых соединений — это поведение зашито в коде.
IPv6-прокси решают проблему на уровне маршрутизации. Весь трафик — и IPv4, и IPv6 — заворачивается в туннель. Браузер видит только адрес прокси. WebRTC-кандидаты содержат только адреса прокси-серверов, а DNS-запросы уходят через зашифрованный канал.
```bash
Проверка полной маршрутизации через прокси
curl --socks5-hostname proxy.example.com:1080 https://api.ipify.org
curl -6 --socks5-hostname proxy.example.com:1080 https://api6.ipify.org
```
Обе команды должны вернуть IP-адрес прокси. Если вторая вернула ваш реальный IPv6 — прокси не поддерживает IPv6.
Кейс: Chrome и WebRTC через IPv4-прокси
Пример: сервер на nginx 1.24 с прокси-настройками для IPv4. Браузер Chrome 120. Включаем прокси в настройках системы. Открываем сайт с WebRTC-функционалом. Через 30 секунд в консоли видим:
```
candidate:1 1 UDP 2122260223 192.168.1.37 53142 typ host
candidate:1 1 UDP 2122260222 203.0.113.5 53143 typ srflx
```
Первый кандидат — локальный IP (192.168.1.37), второй — реальный внешний (203.0.113.5). Ни один не совпадает с адресом прокси. Утечка полная. Причина: WebRTC использует системные сетевые интерфейсы напрямую, игнорируя настройки прокси в браузере.
Решение — отключить WebRTC в настройках Chrome или использовать прокси с поддержкой WebRTC-перехвата. Такие прокси подменяют STUN-ответы, подставляя свои адреса. Работает это на уровне сетевого стека, поэтому браузер не может обойти перехват.
Кейс: DNS-утечка при работающем прокси
Ситуация: пользователь настроил SOCKS5-прокси в Firefox. IP-адрес проверен — всё сходится. Но провайдер присылает письмо о подозрительной активности. Выясняется: DNS-запросы уходили напрямую к DNS-серверу провайдера (192.168.1.1), а не через прокси.
Причина: Firefox по умолчанию использует системный DNS, который не маршрутизируется через SOCKS5. Решение — включить в Firefox параметр `network.proxy.socks_remote_dns` в значении `true`. После этого DNS-запросы пойдут через прокси.
```javascript
// Настройка Firefox для DNS через прокси
// about:config → network.proxy.socks_remote_dns → true
```
Но это работает только для Firefox. Chrome и Safari не имеют такой настройки. Для них нужен прокси, который перехватывает DNS-запросы на сетевом уровне.
Кейс: IPv6-утечка при включённом VPN
Пользователь подключил VPN-клиент на OpenVPN 2.6. Проверка IPv4 показала адрес VPN-сервера. Но через 10 минут работы сервис аналитики зафиксировал реальный IPv6-адрес пользователя.
Причина: OpenVPN по умолчанию не блокирует IPv6-трафик. Весь IPv6-трафик шёл напрямую через сетевой интерфейс провайдера. Решение — добавить в конфигурацию OpenVPN блокировку IPv6:
```
Блокировка IPv6 в конфигурации OpenVPN
pull-filter ignore "route-ipv6"
pull-filter ignore "ifconfig-ipv6"
```
Или использовать прокси с полной поддержкой IPv6, который маршрутизирует оба протокола через один туннель.
Практические проверки: что делать прямо сейчас
Проверьте свой прокси на утечки. Три теста за пять минут:
1. Откройте `https://browserleaks.com/webrtc` — покажет все кандидаты WebRTC.
2. Выполните `curl -6 https://api6.ipify.org` — покажет IPv6-адрес.
3. Используйте `https://dnsleaktest.com` — покажет DNS-серверы, которые видят ваши запросы.
Если хотя бы один тест показал ваш реальный IP или DNS-сервер провайдера — у вас утечка. Прокси работает только наполовину.
Настройка браузеров: закрываем дыры
Для Chrome и Firefox есть расширения, блокирующие WebRTC. Но они работают на уровне JavaScript — часть кандидатов всё равно утекает. Надёжнее отключить WebRTC через политики:
```bash
Отключение WebRTC в Chrome через групповые политики
Windows: реестр
reg add "HKLM\SOFTWARE\Policies\Google\Chrome" /v WebRTCIPHandlingPolicy /t REG_SZ /d "disable_non_proxied_udp" /f
```
Параметр `disable_non_proxied_udp` запрещает WebRTC использовать UDP-соединения, которые не идут через прокси. Но это ломает работу видеозвонков — они требуют UDP.
Как выбирать прокси: чек-лист
Критерии выбора прокси, который не светится:
| Критерий | Что проверять |
|----------|---------------|
| Поддержка IPv6 | Прокси-сервер должен иметь IPv6-адрес и маршрутизировать IPv6-трафик |
| DNS-маршрутизация | DNS-запросы должны идти через прокси, а не через системный DNS |
| WebRTC-перехват | Прокси должен подменять STUN-ответы и блокировать прямые кандидаты |
| Протоколы | SOCKS5 с поддержкой удалённого DNS, HTTP с CONNECT-методом |
Проверяйте не только скорость, но и эти параметры. Скорость бесполезна, если ваш реальный IP виден каждому сайту.
Что в итоге
Утечки через WebRTC, IPv6 и DNS — не баги, а особенности архитектуры. Браузеры и операционные системы так устроены. Прокси, который не учитывает эти особенности, — просто игрушка.
Настройте прокси правильно. Проверьте все три канала утечки. Если ваш прокси не поддерживает IPv6 и не маршрутизирует DNS — он не решает проблему приватности.