Короткий ответ
Не верьте «VPN подключён» и сайту leak-test вслепую. Смотрите пакеты: с какого NIC уходит UDP/TCP 53 и куда (бытовой резолвер vs 10.0.10.10). На Windows 11 добавьте NRPT и отключите DoH в браузере политикой, если внутренние зоны не должны утекать. На Linux — resolvectl query + tcpdump. Утечка ≠ «DNS сломан»: часто split намеренно шлёт интернет-DNS на ISP, а утечка — это внутренние имена contoso.example на публичный резолвер.
Снимите параллельно dump на wg0 и на Wi-Fi в момент Resolve-DnsName fileserver.contoso.example.
Симптомы и как отличить
- В логах публичного DNS появляются
dc01.contoso.example. nslookupпоказывает Server 8.8.8.8 при живом VPN.- Браузер резолвит иначе, чем PowerShell (DoH).
Починка резолвера, когда имена не резолвятся — DNS через VPN. Здесь — куда ушёл успешный или неуспешный запрос.
Возможные причины
- Нет NRPT, split tunnel, системный DNS = роутер
192.168.1.1. - Chrome/Edge Secure DNS / DoH на 1.1.1.1.
systemd-resolvedбез~contoso.exampleнаwg0.- IPv6 DNS на бытовом NIC при IPv4 split.
- smart multi-homed Windows (DNS на всех интерфейсах параллельно).
- OpenVPN не применил
dhcp-option DNS. - «Leak test» путают с ожидаемым split (интернет-имена на ISP — норма).
Диагностика
1. Кто сервер с точки зрения ОС
Get-DnsClientServerAddress -AddressFamily IPv4,IPv6
Get-DnsClientNrptPolicy
Get-VpnConnection | Format-List Name, ConnectionStatus, SplitTunneling
Resolve-DnsName fileserver.contoso.example | Format-Listresolvectl status
resolvectl query fileserver.contoso.example2. Куда ушёл пакет
Linux:
tcpdump -n -i wg0 port 53 or port 853
tcpdump -n -i wlan0 port 53 or port 853Запрос contoso.example на wlan0 → leak. На wg0 к 10.0.10.10 → ок для внутренней зоны.
Windows (pktmon / внешний захват): смотрите Interface Index из Get-NetIPInterface. Не отключайте firewall ради захвата: pktmon умеет фильтр порта 53.
Get-NetIPInterface -AddressFamily IPv4 | Format-Table ifIndex, InterfaceAlias, ConnectionState3. DoH
Если на 53 тишина, а имя резолвится — TCP 443 к резолверу DoH. Политика браузера, Get-Process. Корпоративный Edge: «DNS поверх HTTPS» = off или на внутренний DoH.
4. IPv6
tcpdump -n -i wlan0 ip6 and port 53AAAA-путь часто забывают в split.
Решение
Сценарий A. Ожидаемый split + внутренние зоны
NRPT .contoso.example → 10.0.10.10. Linux: resolvectl domain wg0 ~contoso.example и DNS на интерфейсе туннеля. Маршрут до 10.0.10.10 должен существовать (маршруты).
Сценарий B. Политика «весь DNS через офис»
Full DNS: единственный резолвер 10.0.10.10, рекурсия наружу на DC/resolver. Тогда leak-тест должен показать офисный IP. Цена — нагрузка и зависимость от VPN для любого сайта. См. full tunnel/DNS статьи.
Сценарий C. DoH
GPO/Intune: отключить недоверенный DoH на рабочих браузерах. Либо корпоративный DoH, куда уходят и внутренние зоны.
Сценарий D. OpenVPN 2.6
Проверьте, что push DNS применяется (resolv-conf hook). Иначе ovpn «подключён», DNS как до VPN.
Сценарий E. Windows multi-homed
Повысьте метрику VPN DNS / NRPT. Иногда помогает Disable-NetAdapterBinding на IPv6 бытового NIC только если это согласовано — не как вечный костыль без IPv6-плана.
Стенд: три резолвера в один момент
Откройте fileserver.contoso.example и example.com при живом split. Параллельно:
tcpdump -n -c 30 -i any 'port 53 or port 853'Внутреннее имя к 10.0.10.10 на wg0. Внешнее — к ISP на wlan0 если так задумано. Если внутреннее на 8.8.8.8 — leak. Если внешнее на 10.0.10.10 — full DNS, не leak; тогда DC должен рекурсировать.
Windows:
Get-DnsClientNrptPolicy
Resolve-DnsName fileserver.contoso.example
# DevTools браузера: Secure DNSDoH: тишина на 53 при успешном имени. Политика Edge/Chrome. Не лечите leak сайтом «dnsleaktest» как единственным критерием AD-зоны.
IPv6 RA на домашнем роутере раздаёт DNS2001: уходит мимо NRPT IPv4. Снимите Get-DnsClientServerAddress -AddressFamily IPv6.
Корпоративный Android/iOS часто игнорирует NRPT Windows-статей. На мобильном смотрите split DNS вендора WG/OpenVPN и захват с точки доступа (отдельный VLAN стенда). DoH в приложении почты — ещё один обход. Политика MDM «запретить частный DNS» там, где это поддерживается. Не обещайте «leak закрыт», проверив только один ПК админа.
Get-DnsClientServerAddress
Resolve-DnsName dc01.contoso.exampleЕсли dc01 ушёл на 8.8.8.8 и пришёл NXDOMAIN — это и leak, и поломка входа в домен. Тогда сначала NRPT, потом спор про split.
Повторите проверку после сна ноутбука и после смены Wi-Fi: NRPT иногда жив, а маршрут к 10.0.10.10 уже нет, и запросы таймаутятся, клиент уходит на второй DNS Nic — выглядит как leak. Это ступень маршрута, не «браузер злой». Снимите ip route get 10.0.10.10 в тот же момент, что tcpdump :53.
Как проверить, что проблема устранена
Повтор tcpdump: запрос fileserver.contoso.example только к 10.0.10.10 на туннельном NIC. Публичное имя example.com — по политике (ISP или офис). Браузер и Resolve-DnsName совпадают. IPv6 не обходит.
Resolve-DnsName fileserver.contoso.example
Get-DnsClientNrptPolicytcpdump -n -c 20 -i any port 53Если не помогло
- Только одно приложение утекает — вшитый DNS (некоторые мессенджеры).
- Корпоративный MDM не доехал до ПК.
- Резолвер
10.0.10.10сам форвардит внутреннюю зону наружу — это утечка сервера, не клиента; чините DNS AD, не VPN.
Профилактика
- NRPT в золотом образе.
- Запрет DoH на managed Chrome.
- Периодический tcpdump канарейки.
- Не учить пользователей «проверьте leak на сайте» как единственный метод.
FAQ
Split без NRPT всегда leak?
Для внутренних имён — да, они уйдут на ISP и станут NXDOMAIN плюс утечка факта имени. Для google.com — это не leak, а split.
Помогает ли full tunnel против DoH?
Не всегда: DoH на 443 может идти уже через туннель на 1.1.1.1, минуя корпоративный DNS. Нужна политика браузера или firewall к публичным DoH.
port 853
DNS over TLS. Смотрите его так же, как 53.
Можно ли hosts-файлом закрыть leak?
Точечно, не масштабируется, маскирует проблему резолвера.
Get-VpnConnection не меняет DNS
RAS может не выставлять DNS. NRPT/GPO надёжнее, чем надежда на VPN NIC.