DNS leak: как проверить и закрыть утечку DNS через VPN
VPN поднят, IP в браузере показывает нужную страну — а DNS-запросы всё равно уходят провайдеру напрямую. Это DNS leak: самая частая причина, по которой «настроенный VPN» на деле не скрывает, какие сайты вы открываете. Ниже — как проверить это за пару минут и закрыть на Linux, Windows, macOS, Android и в браузере.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое DNS leak и откуда он берётся
DNS-запрос — это обращение «переведи домен example.com в IP». Даже если весь остальной трафик идёт через зашифрованный туннель, DNS может уходить в обход него — напрямую на DNS-сервер провайдера. В итоге провайдер получает список посещённых доменов, хотя содержимое трафика скрыто.
Причины почти всегда одни из трёх: сетевой стек ОС не переключил DNS на адрес из туннеля и продолжает резолвить через физический интерфейс; конкурируют несколько сетевых интерфейсов (например, при split tunneling); DNS-over-HTTPS (DoH) в браузере обращается к своему зашитому серверу напрямую по HTTPS, минуя и системные настройки, и VPN.
Отдельно стоит IPv6 leak: если VPN туннелирует только IPv4, а IPv6 включён, сайты по IPv6 могут открываться в обход VPN целиком. Подробнее — в IPv6 и доступ к ИИ: почему VPN не помогает.
Как проверить: dnsleaktest.com и ipleak.net
- Подключите VPN, убедитесь, что туннель поднят (
ip a— должен появитьсяwg0/tun0с адресом из диапазона VPN). - Откройте dnsleaktest.com и запустите Extended test — он надёжнее Standard, ловит утечки, которые Standard пропускает, если у провайдера и VPN совпадает ASN.
- Смотрите результат: хорошо, если в списке один DNS-провайдер, соответствующий локации VPN-сервера. Плохо — если виден DNS вашего домашнего или мобильного провайдера.
Дублируйте проверку на ipleak.net — он показывает отдельно IPv4, IPv6 и список DNS. Если в блоке IPv6 виден адрес не от VPN — это утечка через IPv6.
Проверяйте после каждого изменения конфига и после перезагрузки — DNS-настройки слетают при обновлении сетевого менеджера или конфликте с другим VPN-подключением, см. второй туннель на телефоне: конфликт VPN.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверПринудительный DNS на Linux
WireGuard — укажите DNS прямо в [Interface]:
[Interface]
PrivateKey = <ключ>
Address = 10.8.0.2/24
DNS = 10.8.0.1, 1.1.1.1
wg-quick up wg0 пропишет эти адреса через resolvconf/systemd-resolved и вернёт исходные при отключении. Если этого не происходит — проверьте resolvectl status: раздел wg0 с нужным DNS должен присутствовать.
OpenVPN — на сервере пушим DNS клиенту:
push "dhcp-option DNS 10.8.0.1"
push "redirect-gateway def1 bypass-dhcp"
На клиенте нужен скрипт применения DNS и строки в конфиге:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Без них OpenVPN получает DNS от сервера, но не применяет его к системе. Базовая установка туннелей — в OpenVPN на VPS и WireGuard на VPS.
Жёсткая блокировка утечки — правило iptables, запрещающее DNS мимо туннеля:
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j DROP
iptables -A OUTPUT -o wg0 -p udp --dport 53 -j ACCEPT
Принудительный DNS на Windows
На Windows чаще всего физический адаптер продолжает отвечать на DNS параллельно с VPN-адаптером — Windows использует более быстрый ответ.
OpenVPN GUI — добавьте в конфиг директиву (доступна с версии 2.4+):
block-outside-dns
Она программно блокирует DNS-запросы от других интерфейсов на время сессии — самое надёжное решение под Windows.
WireGuard применяет DNS из поля DNS = автоматически. Если утечка есть — проверьте в свойствах адаптера, что метрика интерфейса VPN ниже физического; при равных метриках Windows может резолвить через оба.
Закрепить DNS вручную через PowerShell:
Set-DnsClientServerAddress -InterfaceAlias "WireGuard" -ServerAddresses ("10.8.0.1")
Подробнее по смежным сценариям — в автозапуск VPN при старте Windows.
macOS, iOS и Android
macOS. Клиенты WireGuard и OpenVPN (Tunnelblick, OpenVPN Connect) сами перезаписывают DNS через scutil. Проверка: scutil --dns | grep nameserver. Если после подключения виден DNS провайдера — в Системные настройки → Сеть через Set Service Order поднимите VPN-сервис выше Wi-Fi.
iOS. Официальные приложения WireGuard/OpenVPN Connect берут DNS под контроль через Network Extension — ручной правки без приложения нет.
Android. Проверьте Настройки → Сеть и интернет → Приватный DNS — если там задан DNS-провайдер (например, dns.google), это работает как DoH и может обходить туннель. На время теста временно отключите приватный DNS.
DoH в браузере как отдельный источник утечки
Даже при идеально настроенной системе браузер может создавать собственную утечку: Firefox и Chrome в части конфигураций включают DNS-over-HTTPS по умолчанию и резолвят через жёстко заданный сервер (обычно Cloudflare) по HTTPS — это не всегда попадает под блокировку порта 53. Механику разбирали в DNS поверх HTTPS (DoH) и доступ к ИИ.
Firefox: about:preferences → General → Network Settings → снять Enable DNS over HTTPS, либо about:config → network.trr.mode = 5.
Chrome: chrome://settings/security → Use secure DNS → выключить, либо выбрать Custom и указать DNS туннеля вручную.
Для диагностики отключайте DoH на время теста, прогоняйте dnsleaktest.com, затем решайте — оставить выключенным или включить повторно с явным DNS туннеля.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
DNS leak test показывает несколько разных стран — это всегда утечка?
Не всегда: у Cloudflare и Google anycast-серверы распределены географически. Смотрите на организацию (ISP), а не на страну — если это ваш домашний провайдер, а не VPN или публичный DNS, это утечка.
Нужны ли обе проверки — dnsleaktest.com и ipleak.net?
Необязательно, но полезно как перекрёстная сверка: иногда один сервис не ловит утечку через IPv6, а другой ловит.
Правило iptables с блокировкой порта 53 не сломает интернет без VPN?
Сломает, если применить его отдельно от подключения — оно блокирует DNS на физическом интерфейсе постоянно. Используйте его при always-on VPN либо оборачивайте в скрипты up/down клиента.
DoH отключён, DNS в системе верный, а утечка всё равно есть?
Проверьте WebRTC — он раскрывает IP независимо от DNS. Также убедитесь, что не осталось второго активного сетевого подключения (например, Wi-Fi и USB-модем одновременно).
Как проверить утечку без графического интерфейса, с сервера по SSH?
dig +short whoami.akamai.net @<DNS-туннеля> покажет резолвер, обработавший запрос — сравните с ожидаемым сервером.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →