Почему браузер показывает реальный IP при включённом прокси: разбор утечек DNS и WebRTC
Содержание
- Корень проблемы: прокси не равен анонимности
- Утечка DNS: когда браузер спрашивает дорогу напрямую
- WebRTC: дыра, о которой все забыли
- Как устроен механизм утечки: технические детали
- QUIC и HTTP/3: новый протокол — новые дыры
- IPv6: двойной стек — двойные проблемы
- Расширения и плагины: дыры в дыре
- Как проверить утечки: пошаговая инструкция
- Настройка браузера: что можно сделать
- Прокси vs VPN: почему VPN надёжнее
- Настройка прокси для минимальных утечек
- Аппаратные и программные решения
- Разбор реальных кейсов
- Итог: что делать
Корень проблемы: прокси не равен анонимности
Включил прокси в настройках системы — и думаешь, что всё. Через пять минут заходишь на 2ip.ru, а там твой реальный адрес. Знакомая картина?
Дело в том, что системный прокси — это не VPN. Он не перехватывает весь трафик. Он лишь говорит приложениям: "ходи через этот адрес". Но не все приложения слушаются. Браузеры — особенно.
HTTP-прокси работает на уровне прикладного протокола. Он обрабатывает только те запросы, которые явно через него отправлены. Всё остальное — DNS-запросы, WebRTC-соединения, QUIC-трафик — уходит напрямую, минуя прокси.
Утечка DNS: когда браузер спрашивает дорогу напрямую
DNS — это телефонная книга интернета. Вы вводите `example.com`, браузер спрашивает у DNS-сервера: "где живёт этот сайт?" Если этот запрос идёт мимо прокси — утечка.
Большинство прокси передают DNS-запросы через туннель. Но есть нюанс: если в настройках системы прописан DNS-сервер провайдера, браузер может обратиться к нему напрямую. Особенно это касается Chrome и Firefox с включённой опцией "использовать системный DNS".
Проверить просто:
```bash
dig +short example.com
```
Если ответ приходит от адреса, который не принадлежит прокси — утечка.
WebRTC: дыра, о которой все забыли
WebRTC — технология для браузерных звонков и видеоконференций. Она устанавливает P2P-соединения напрямую между браузерами. Для этого браузер собирает все доступные IP-адреса устройства — включая реальный — и отправляет их на сервер.
Даже если весь HTTP-трафик идёт через прокси, WebRTC-запросы летят напрямую. Браузер считает: "это медиатрафик, ему нужна низкая задержка, прокси будет мешать".
Пример: открываете `browserleaks.com/webrtc` — и видите свой реальный IP, хотя прокси включён. Это не баг, это архитектура.
Как устроен механизм утечки: технические детали
Когда вы включаете прокси в настройках браузера, происходит следующее:
1. Браузер получает список адресов прокси (HTTP, HTTPS, SOCKS).
2. Для каждого запроса он решает: идти через прокси или напрямую.
3. DNS-запросы обрабатываются отдельно — часто системным резолвером.
4. WebRTC использует STUN-серверы для определения внешнего адреса.
STUN-сервер — это специальный сервис, который говорит браузеру: "твой внешний адрес — такой-то". Браузер отправляет STUN-запрос напрямую, не через прокси. Ответ содержит реальный IP.
```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));
```
Запустите это в консоли браузера — и увидите список адресов, включая реальный.
QUIC и HTTP/3: новый протокол — новые дыры
Протокол QUIC работает поверх UDP. Он не использует TCP-соединения, поэтому классические прокси его не обрабатывают. Если сайт поддерживает HTTP/3, браузер может переключиться на QUIC и отправить запрос напрямую.
Это особенно актуально для Chrome — он активно продвигает HTTP/3. Firefox тоже поддерживает, но менее агрессивно.
Решение: отключить QUIC в браузере или использовать прокси, который поддерживает UDP-туннелирование.
IPv6: двойной стек — двойные проблемы
Если у вас есть IPv6-адрес, а прокси работает только на IPv4 — утечка гарантирована. Браузер увидит, что сайт имеет IPv6-адрес, и попробует подключиться напрямую по IPv6, игнорируя прокси.
Особенно хитро это работает в Chrome: он может одновременно использовать IPv4 через прокси и IPv6 напрямую. Внешний сервис увидит оба адреса.
Реальный кейс: сервер на nginx 1.24 с `listen [::]:443;` и `listen 443 ssl;`. Клиент с включённым прокси подключается по IPv6 напрямую — nginx видит реальный IP. Адрес прокси даже не фигурирует в логах.
Расширения и плагины: дыры в дыре
Некоторые расширения обходят прокси по своей инициативе. Например, VPN-расширения, которые работают только для определённых сайтов. Или блокировщики рекламы, которые обращаются к своим серверам напрямую.
Пример: расширение для блокировки рекламы uBlock Origin отправляет запросы к спискам фильтров напрямую, не через прокси. Если эти запросы содержат ваш IP — утечка.
Как проверить утечки: пошаговая инструкция
Сначала проверьте DNS:
```bash
curl --proxy http://proxy.example.com:8080 https://api.ipify.org
```
Если ответ содержит IP прокси — HTTP-трафик идёт правильно. Теперь DNS:
```bash
dig @8.8.8.8 example.com
```
Если запрос уходит напрямую — утечка. Проверьте WebRTC через browserleaks.com или вручную через консоль. Проверьте IPv6:
```bash
curl -6 --proxy http://proxy.example.com:8080 https://api.ipify.org
```
Если ответ не приходит — прокси не поддерживает IPv6, и трафик уходит напрямую.
Настройка браузера: что можно сделать
В Firefox отключите WebRTC через `about:config`:
```
media.peerconnection.enabled = false
```
В Chrome это сложнее — придётся использовать расширения или политики. Для DNS в Firefox:
```
network.proxy.socks_remote_dns = true
```
Это заставит браузер отправлять DNS-запросы через SOCKS-прокси. В Chrome такой опции нет — только через флаги.
Прокси vs VPN: почему VPN надёжнее
VPN работает на сетевом уровне. Он перехватывает весь трафик — включая DNS, WebRTC, QUIC. Прокси работает на прикладном уровне — он видит только то, что ему явно передали.
Разница видна на цифрах: VPN добавляет 5-15 мс задержки из-за инкапсуляции. Прокси — 1-3 мс. Но VPN не пропускает утечки. Прокси — пропускает.
Исключение: SOCKS5-прокси с поддержкой UDP и удалённого DNS. Он ближе к VPN по поведению, но всё равно не перехватывает WebRTC.
Настройка прокси для минимальных утечек
Если без прокси никак, настройте его правильно. Используйте SOCKS5 с удалённым DNS. В Firefox:
```
network.proxy.socks = "127.0.0.1"
network.proxy.socks_port = 1080
network.proxy.socks_remote_dns = true
network.proxy.type = 1
```
В Chrome — через командную строку:
```bash
google-chrome --proxy-server="socks5://127.0.0.1:1080" --host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1"
```
Это заставит Chrome использовать прокси для всех запросов, включая DNS.
Аппаратные и программные решения
Есть прокси-серверы, которые умеют обрабатывать UDP и перехватывать WebRTC. Например, 3proxy с модулем `udppm`. Но это редкость.
Более надёжный вариант — связка прокси + VPN. Трафик сначала идёт через VPN, потом через прокси. Утечки исключены, но скорость падает.
Или используйте прокси на уровне маршрутизации. Например, `redsocks` — утилита, которая перенаправляет весь TCP-трафик через SOCKS-прокси. Она работает на уровне iptables, поэтому перехватывает всё.
Разбор реальных кейсов
**Кейс: Chrome показывает реальный IP на 2ip.ru при включённом прокси**
Проблема: пользователь настроил HTTP-прокси в системных настройках. Chrome показывает реальный IP, Firefox — IP прокси.
Причина: Chrome использует системный DNS-резолвер, который обращается к DNS-серверу провайдера напрямую. Firefox с `network.proxy.socks_remote_dns = true` отправляет DNS через прокси.
Решение: переключить Chrome на SOCKS5 с `--host-resolver-rules`. Проверка: `curl --socks5-hostname 127.0.0.1:1080 https://api.ipify.org` — должен вернуть IP прокси.
**Кейс: WebRTC-утечка на сайте видеоконференций**
Проблема: сайт видеоконференций видит реальный IP, хотя прокси включён.
Причина: WebRTC использует STUN-серверы для определения внешнего адреса. STUN-запросы идут напрямую, минуя прокси.
Решение: отключить WebRTC в Firefox через `about:config`. В Chrome — использовать расширение WebRTC Leak Prevent. Проверка: browserleaks.com/webrtc — не должен показывать реальный IP.
**Кейс: IPv6-утечка при использовании прокси на IPv4**
Проблема: сайт показывает оба адреса — IPv4 через прокси и IPv6 напрямую.
Причина: прокси работает только на IPv4. Браузер видит AAAA-запись в DNS и подключается по IPv6 напрямую.
Решение: отключить IPv6 в настройках сети или настроить прокси на IPv6. Проверка: `curl -6 https://api.ipify.org` — не должен возвращать адрес.
Итог: что делать
Прокси — не анонимизатор. Это инструмент для обхода блокировок и кеширования. Если нужна анонимность — используйте VPN или Tor.
Если прокси обязателен — настройте его правильно. SOCKS5 с удалённым DNS, отключение WebRTC, отключение IPv6. Проверяйте утечки после каждой смены настроек.
И помните: на сайте lexic.ml можно найти прокси с поддержкой SOCKS5 и удалённого DNS. Это снижает риск утечек, но не устраняет их полностью.
Анонимность — это процесс, а не состояние. Проверяйте, настраивайте, проверяйте снова.