MAATRIX / Блог / DNS leak: как проверить и закрыть утечку DNS через VPN

DNS leak: как проверить и закрыть утечку DNS через VPN

MAATRIX

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

  1. Подключите VPN, убедитесь, что туннель поднят (ip a — должен появиться wg0/tun0 с адресом из диапазона VPN).
  2. Откройте dnsleaktest.com и запустите Extended test — он надёжнее Standard, ловит утечки, которые Standard пропускает, если у провайдера и VPN совпадает ASN.
  3. Смотрите результат: хорошо, если в списке один 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:confignetwork.trr.mode = 5.

Chrome: chrome://settings/securityUse 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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →