Короткий ответ

Сначала отделите «нет маршрута до DNS 10.0.10.10» от «запрос уходит на бытовой резолвер». Для Windows 11 смотрите NRPT и DNS-суффикс подключения, не только ipconfig /flushdns. Для Linux — resolvectl / resolv.conf после wg-quick или OpenVPN dhcp-option DNS. Имя fileserver.contoso.example не появится из воздуха, если клиент спрашивает публичный DNS, а суффикс contoso.example не добавляется к короткому имени.

Не прописывайте 8.8.8.8 единственным DNS на NIC доменной машины. Не отключайте Windows Firewall, чтобы «починить DNS».

Симптомы и как отличить

  • Test-NetConnection 10.0.10.10 успешен, Resolve-DnsName fileserver.contoso.example — NXDOMAIN или таймаут.
  • Короткое имя fileserver не дополняется суффиксом.
  • Браузер открывает внешние сайты, внутренние порталы — нет (split tunnel + DNS leak).

Другие проблемы:

  • Нет ping даже по IP — LAN или маршруты.
  • Хотите проверить утечку на ISP DNS — утечка DNS.
  • RDP ругается на имя/NLA при живом IP — RDP.

Возможные причины

  1. DNS-сервер 10.0.10.10 недоступен (нет маршрута, нет FORWARD, DNS слушает только LAN NIC без VPN).
  2. Клиент не получил DNS через VPN: нет DNS = в WireGuard, нет push "dhcp-option DNS", Windows не регистрирует NRPT.
  3. NRPT/суффикс не покрывают contoso.example, запросы идут на DHCP бытовой сети.
  4. Split tunnel + «умный» DNS (DoH в браузере) обходит Nic.
  5. Поиск только коротких имён без Connection-specific DNS suffix.
  6. OpenVPN 2.6 на Linux без update-resolv-conf/resolved script — push DNS игнорируется.
  7. Windows error 868: имя vpn.example.com само не резолвится ещё до туннеля — это endpoint, не внутренний DNS.

Диагностика

1. IP жив, имя нет

Test-NetConnection 10.0.10.10 -Port 53
Resolve-DnsName fileserver.contoso.example -Server 10.0.10.10
Resolve-DnsName fileserver.contoso.example
Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientNrptPolicy
Get-DnsClientGlobalSetting | Select-Object SuffixSearchList
Get-VpnConnection | Format-List Name, ConnectionStatus, DnsSuffix

Если -Server 10.0.10.10 работает, а без -Server нет — резолвер Nic не тот. Если и с -Server таймаут — сеть/firewall до DNS, не суффикс.

Linux:

ip route get 10.0.10.10
dig @10.0.10.10 fileserver.contoso.example +short
resolvectl status
resolvectl query fileserver.contoso.example

2. Куда уходит запрос

На шлюзе:

tcpdump -n -i wg0 port 53
tcpdump -n -i eth1 port 53

На клиенте без VPN-DNS пакеты на 192.168.1.1:53 (домашний роутер) при открытии внутренней ссылки — leak/split.

Get-NetUDPEndpoint -LocalPort 53 -ErrorAction SilentlyContinue
# захват:
pktmon filter add -p 53

Достаточно tcpdump на VPN-интерфейсе и бытовом NIC параллельно.

3. Суффикс и короткое имя

Get-VpnConnection -Name 'Office' | Format-List DnsSuffix, SplitTunneling
ipconfig /all

Нужен Connection-specific DNS Suffix contoso.example либо NRPT namespace .contoso.example10.0.10.10.

OpenVPN server:

push "dhcp-option DNS 10.0.10.10"
push "dhcp-option DOMAIN contoso.example"

WireGuard (wg-quick):

DNS = 10.0.10.10, contoso.example

Без script/resolved на systemd это поле может не примениться — проверьте resolvectl status после wg-quick up.

Решение

Сценарий A. DNS недоступен по сети

Верните маршрут к 10.0.10.0/24 и FORWARD, разрешите 53/udp и 53/tcp к 10.0.10.10 с 10.8.0.0/24. Служба DNS на Windows Server должна слушать соответствующий интерфейс (не только «только localhost»).

Сценарий B. Windows без NRPT при split

Add-DnsClientNrptRule -Namespace '.contoso.example' -NameServers '10.0.10.10'
Set-VpnConnection -Name 'Office' -DnsSuffix 'contoso.example'

Проверьте, что правило не перекрыто более широким . с публичными DNS. GPO NRPT может перезаписывать ручное правило — тогда правьте GPO, не «гонку» на клиенте.

Сценарий C. Linux OpenVPN 2.6 не применяет DNS

Используйте поддерживаемый hook (openvpn-systemd-resolved или update-resolv-conf), не копируйте resolv.conf руками в обход resolved. После коннекта:

resolvectl dns tun0 10.0.10.10
resolvectl domain tun0 ~contoso.example

Постоянно — через dhcp-option и скрипт, не одноразовую команду.

Сценарий D. WireGuard DNS в wg-quick

Убедитесь, что wg-quick вызывает resolvconf/resolved. Если Table = off, DNS в конфиге может примениться, а маршрута к 10.0.10.10 нет — получите таймаут. Добавьте AllowedIPs для LAN.

Сценарий E. DoH в браузере

Для корпоративных имён отключите «Secure DNS» в политике браузера на рабочих местах или включите DoH на внутреннем резолвере. Иначе NRPT для системного резолвера не поможет Chrome.

Стенд: Windows 11 + WireGuard + NRPT

На клиенте Windows 11 после wg-quick/GUI туннель с DNS = 10.0.10.10 часто не пишет NRPT. Тогда Get-DnsClientServerAddress показывает бытовой DHCP, а Resolve-DnsName fileserver.contoso.example -Server 10.0.10.10 зелёный. Это не «сломанный DNS сервера», а отсутствие политики имени.

Get-DnsClientNrptRule | Format-List Namespace, NameServers, Comment
Add-DnsClientNrptRule -Namespace '.contoso.example' -NameServers '10.0.10.10' -Comment 'vpn-office'
ip route 2>$null

На Linux тот же смысл через routing domain resolved: ~contoso.example только на wg0. Если повесить ~. на туннель при недоступном рекурсоре — умрут внешние сайты и заявка превратится в «интернет пропал».

Проверьте TCP 53: часть контроллеров режет UDP-фрагменты. Test-NetConnection 10.0.10.10 -Port 53 проверяет TCP. Для UDP смотрите tcpdump -n port 53 на DC и на wg0.

Не используйте nslookup fileserver как единственный критерий: на Windows он может взять другой сервер, чем Resolve-DnsName. В заявке приложите оба вывода и Get-VpnConnection.

Как проверить, что проблема устранена

Resolve-DnsName fileserver.contoso.example
Resolve-DnsName fileserver
Test-NetConnection fileserver.contoso.example -Port 445
Get-DnsClientNrptPolicy

Linux:

resolvectl query fileserver.contoso.example
dig fileserver.contoso.example +short

На tcpdump интерфейса туннеля видны запросы к 10.0.10.10:53, на бытовом NIC — нет внутренних зон. Короткое имя резолвится за счёт суффикса.

Если не помогло

  • Только один клиент: кэш, hosts-файл, старый NRPT. Get-Content C:\Windows\System32\drivers\etc\hosts.
  • Весь сайт: зона на DC, forwarding, условные зоны — не VPN.
  • Имя VPN-сервера vpn.example.com не резолвится с улицы — это публичный DNS, почините A-запись, иначе клиент не подключится (868).
  • Есть DNS, нет Kerberos — время и SPN, не эта статья.

Профилактика

  • Шаблон клиента: DNS 10.0.10.10, суффикс contoso.example, NRPT только на внутренние зоны.
  • Мониторинг: резолв тестового имени с канарейки в туннеле.
  • Не смешивать публичный DNS как единственный на доменных ПК.
  • Документировать split DNS vs full DNS через VPN.

FAQ

Почему nslookup показывает 8.8.8.8 после коннекта?

Потому что Nic/NRPT не перехватили запрос. nslookup без указания сервера берёт системный список; на Windows это не всегда VPN-DNS первым.

Нужно ли flushdns после каждого коннекта?

Нет как ритуал. После смены NRPT — один раз. Постоянный flush скрывает, что резолвер не тот.

Можно ли пустить все имена на 10.0.10.10?

Да, это full DNS. Тогда резолвер должен рекурсировать интернет. Если DC без рекурсии наружу — внешние сайты умрут. Лучше NRPT на contoso.example.

Linux ping по имени работает, браузер нет

Браузер DoH. Проверьте настройки DNS-over-HTTPS, не resolv.conf.

Get-VpnConnection без DnsSuffix

Задайте -DnsSuffix или NRPT. RAS не угадает AD-зону по ServerAddress vpn.example.com.