Вы думаете, что включили DNS-over-HTTPS (DoH) в настройках Windows 11, поставили галочку в браузере и теперь ваши запросы надежно зашифрованы?
Поздравляю, вы попали в классическую ловушку «Fallback Loop».
Пока вы читаете этот абзац, системная служба Dnscache в фоновом режиме уже могла трижды попытаться отправить ваш запрос на корпоративный или банковский сайт в открытом, незашифрованном виде через UDP 53. Почему? Потому что ваш DoH-провайдер «моргнул» на 200 миллисекунд, а архитектура Windows по умолчанию считает, что какой-то ответ лучше, чем защищенный ответ.
Я потратил сотни часов на анализ ETW-логов и форумы команды Microsoft Sysinternals, чтобы понять, где именно система срезает углы. Сегодня мы не будем делать «косметический ремонт». Мы выключим эту функцию на уровне ядра и построим настоящий DNS Zero-Trust.
⚠️ Дисклеймер: Материал уровня "ИНЖЕНЕР". Мы будем лезть в реестр и брандмауэр. Если вы не уверены в своих действиях, остановитесь. Но если вы хотите реального контроля, добро пожаловать.
Часть 1. Архитектурный сдвиг Windows 11 24H2+: почему старые методы больше не работают
Прежде чем мы начнем «ломать» систему, нужно понять фундаментальное изменение, которое Microsoft внесла в Windows 11 24H2 и закрепила в 25H2.
Критический факт: Начиная с Windows 11 24H2, служба DNS Client (Dnscache) стала критически зависимой для работы всего DNS-стека. Если раньше вы могли остановить эту службу через services.msc и DNS продолжал работать (просто без кэша), то теперь остановка Dnscache полностью отключает резолвинг доменов. Интернет «ляжет» мгновенно.
Это означает, что все старые гайды с командами Stop-Service Dnscache теперь не просто устарели — они опасны. Мы будем использовать только безопасные методы очистки кэша, которые не затрагивают саму службу.
Часть 2. Три «тихих убийцы» вашей приватности в Windows
Вот три архитектурных компромисса Windows, о которых молчат 99% гайдов в интернете.
1. Проклятие «Parallel A and AAAA» (SMHNR)
Windows по умолчанию отправляет запросы IPv4 (A) и IPv6 (AAAA) параллельно по всем активным сетевым адаптерам.
Сценарий утечки: Вы настроили DoH на основном Wi-Fi. Но у вас стоит виртуальный адаптер от VMware, VirtualBox или корпоративный VPN, в настройках которого прописан обычный DNS-сервер. Windows отправит запрос туда в plaintext, игнорируя ваш DoH.
Решение: Принудительное отключение параллельных запросов через реестр.
2. Ловушка «Serve Stale» (RFC 8767)
Чтобы ускорить загрузку, Windows может отдавать устаревшие (stale) записи из кэша, если DoH-сервер не отвечает вовремя. Это хорошо для uptime, но смертельно для безопасности. Это открывает ворота для DNS Rebinding-атак, когда злоумышленник ждет истечения TTL, чтобы подменить IP-адрес банка на свой сервер.
3. Агрессивный Negative Cache
Если вы ошиблись в одной букве домена, Windows запоминает ответ NXDOMAIN (домен не существует) на 5 минут (300 секунд). В корпоративных средах или при использовании динамических DoH-провайдеров это приводит к каскадным сбоям, которые лечатся только полной очисткой кэша.
Часть 3. Детектор лжи: как поймать Windows на утечке (ETW Tracing)
Не верьте ipconfig /displaydns. Эта команда показывает только верхушку айсберга. Чтобы увидеть, как Windows предает вас, нужно спросить само ядро через Event Tracing for Windows (ETW).
Откройте PowerShell от имени администратора и выполните этот код. Он создаст скрытую сессию трассировки, которая запишет каждое движение резолвера:
$SessionName = "DNS_Hardcore_Trace"
# Запускаем трассировку с максимальным уровнем детализации (0xFF) и фокусом на кэш и ошибки
logman create trace $SessionName -ow -o C:\Windows\Temp\dns_trace.etl -p "{1C95126E-7EEA-49A9-A3FE-A378B03DDB4D}" 0x8000000000000003 0xFF -nb 16 16 -bs 1024 -mode Circular -f bincirc -max 100 -ets
Write-Host "[+] ETW Tracing запущен. Поработайте в сети 2-3 минуты, затем выполните команду остановки." -ForegroundColor Green
# КОМАНДА ДЛЯ ОСТАНОВКИ (выполнить позже):
# logman stop $SessionName -ets
Как читать результат: Откройте полученный файл dns_trace.etl через бесплатную утилиту PerfView или Get-WinEvent. Ищите строки с DNS_ERROR_RCODE_SERVER_FAILURE или Fallback to UDP. Если вы их видите, ваш «защищенный» браузер только что слил домен в открытом виде.
Часть 4. Боевой комплект: DNS Zero-Trust Hardening Script v2.1
СТОП. Прежде чем идти дальше, проверьте текущее состояние. Введите в PowerShell:
Get-DnsClientDohServerAddress
Если в ответе AllowFallbackToUdp стоит True – вы уязвимы.
Ниже представлен скрипт «выжженной земли». Он не просто включает DoH, он физически блокирует возможность утечки через старые протоколы. Обратите внимание на параметр -AutoUpgrade $true — без него Windows будет игнорировать ваш DoH-шаблон и продолжать отправлять запросы в открытом виде через UDP 53.
#Requires -RunAsAdministrator
Write-Host "=== Инициализация DNS Zero-Trust Hardening v2.1 ===" -ForegroundColor Cyan
# 1. УБИЙЦА УТЕЧЕК: Отключаем параллельные запросы IPv4/IPv6
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name "DisableParallelAandAAAA" -Value 1 -Type DWORD -Force
# 2. КОНТРОЛЬ КЭША: Ограничиваем максимальный TTL до 5 минут (защита от Serve Stale атак)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name "MaxCacheTtl" -Value 300 -Type DWORD -Force
# 3. ДВОЙНОЙ КОНТРОЛЬ НЕГАТИВНОГО КЭША: Базовое время + максимальный ограничитель
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name "NegativeCacheTime" -Value 60 -Type DWORD -Force
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name "MaxNegativeCacheTtl" -Value 120 -Type DWORD -Force
# 4. ПРИНУДИТЕЛЬНЫЙ DoH (Policy 2 = Require DoH, без фоллбэка)
$RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient"
if (!(Test-Path $RegPath)) { New-Item -Path $RegPath -Force | Out-Null }
Set-ItemProperty -Path $RegPath -Name "DoHPolicy" -Value 2 -Type DWORD -Force
Set-ItemProperty -Path $RegPath -Name "DoHTemplate" -Value "https://dns.quad9.net/dns-query{?dns}" -Type String -Force
Set-ItemProperty -Path $RegPath -Name "EnableAutoDoh" -Value 0 -Type DWORD -Force
# 5. КРИТИЧЕСКИ ВАЖНО: Настройка DoH с AutoUpgrade
# Без -AutoUpgrade $true Windows не будет использовать DoH даже с настроенным шаблоном
$Servers = @("9.9.9.9", "149.112.112.112", "2620:fe::fe", "2620:fe::9")
$Template = "https://dns.quad9.net/dns-query{?dns}"
foreach ($IP in $Servers) {
Set-DnsClientDohServerAddress -ServerAddress $IP -AllowFallbackToUdp $false -AutoUpgrade $true -DohTemplate $Template
}
# 6. ВЫЖЖЕННАЯ ЗЕМЛЯ: Блокировка Plain DNS на уровне Windows Filtering Platform (WFP)
# Это делает фоллбэк физически невозможным. Запросы либо идут через DoH, либо падают.
New-NetFirewallRule -DisplayName "[SEC] Block Plain DNS (UDP 53)" -Direction Outbound -Protocol UDP -RemotePort 53 -Action Block -Profile Domain,Private,Public -Enabled True | Out-Null
New-NetFirewallRule -DisplayName "[SEC] Block Plain DNS (TCP 53)" -Direction Outbound -Protocol TCP -RemotePort 53 -Action Block -Profile Domain,Private,Public -Enabled True | Out-Null
# 7. БЕЗОПАСНАЯ очистка кэша (БЕЗ остановки службы Dnscache!)
# В Windows 11 24H2+ остановка Dnscache полностью отключает DNS
Clear-DnsClientCache
ipconfig /flushdns
Register-DnsClient
Write-Host "[+] Система защищена. Fallback на UDP 53 невозможен." -ForegroundColor Green
Write-Host "[!] ВАЖНО: Служба Dnscache НЕ была остановлена (это сломало бы DNS в 24H2+)." -ForegroundColor Yellow
*Примечание: В качестве шаблона использован Quad9 из-за его строгой политики no-logging и поддержки современных стандартов. Вы можете заменить URI на Cloudflare (https://cloudflare-dns.com/dns-query{?dns}) или NextDNS.*
Часть 5. Аварийный парашют (Rollback Script)
Жесткие политики DoH имеют обратную сторону. Если ваш выбранный провайдер испытывает сбои, или вы зашли в сеть корпоративного прокси с глубоким инспектором трафика (DPI), который режет DoH, ваш интернет «ляжет» полностью.
Вы должны держать этот скрипт в «Блокноте» на рабочем столе. Он вернет всё в заводское состояние за 5 секунд.
#Requires -RunAsAdministrator
Write-Host "=== ЭКСТРЕННЫЙ ОТКАТ DNS НАСТРОЕК ===" -ForegroundColor Red -BackgroundColor Black
# Сброс политик реестра
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name "DoHPolicy","DoHTemplate","EnableAutoDoh" -ErrorAction SilentlyContinue
Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" -Name "DisableParallelAandAAAA","MaxCacheTtl","NegativeCacheTime","MaxNegativeCacheTtl" -ErrorAction SilentlyContinue
# Удаление правил фаервола
Remove-NetFirewallRule -DisplayName "[SEC] Block Plain DNS (UDP 53)" -ErrorAction SilentlyContinue
Remove-NetFirewallRule -DisplayName "[SEC] Block Plain DNS (TCP 53)" -ErrorAction SilentlyContinue
# Сброс настроек DoH для всех серверов
Get-DnsClientDohServerAddress | Remove-DnsClientDohServerAddress
# Сброс адаптеров и кэша (безопасный метод)
Get-NetAdapter | Where-Object Status -eq "Up" | Set-DnsClientServerAddress -ResetServerAddresses
Clear-DnsClientCache
ipconfig /flushdns
netsh winsock reset | Out-Null
Write-Host "[+] Откат завершен. Требуется перезагрузка для сброса Winsock." -ForegroundColor Yellow
Часть 6. Атомарная очистка и валидация кэша (безопасный метод)
Если вам нужно просто очистить кэш без применения жестких политик, используйте этот безопасный скрипт. Он не останавливает службу Dnscache, что критично для Windows 11 24H2+.
#Requires -RunAsAdministrator
Write-Host "Performing Safe Resolver Reset..." -ForegroundColor Yellow
# 1. БЕЗОПАСНАЯ очистка кэша (без остановки службы)
Clear-DnsClientCache
ipconfig /flushdns
# 2. Сброс сокетов и стека (на случай повреждения Winsock)
netsh winsock reset | Out-Null
netsh int ip reset | Out-Null
# 3. Удаление скрытых кэш-файлов (если присутствуют артефакты)
Remove-Item -Path "C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\INetCache\*" -Recurse -Force -ErrorAction SilentlyContinue
# 4. Принудительная перерегистрация DNS
Register-DnsClient
# 5. Валидация: запрос к DoH-провайдеру
Write-Host "Validating DoH Resolution..." -ForegroundColor Cyan
Resolve-DnsName -Name "dns.quad9.net" -Type A -DnsOnly | Format-Table Name, IPAddress, Status
Резюме:
Безопасность — это не галочка в настройках браузера. Это контроль над каждым байтом, покидающим ваш сетевой стек. Применив эти настройки, вы переводите Windows из режима «удобный, но протекающий» в режим «строгий Zero-Trust».
Ключевые изменения в Windows 11 25H2, которые нужно помнить:
- Никогда не останавливайте Dnscache — это полностью отключит DNS. Используйте только Clear-DnsClientCache.
- Всегда указывайте -AutoUpgrade $true при настройке DoH — без этого параметра Windows будет игнорировать ваш шаблон.
- Используйте двойной контроль негативного кэша (NegativeCacheTime + MaxNegativeCacheTtl) для полного контроля.
Что делать дальше?
Если после применения этих настроек у вас перестал открываться конкретный сайт (например, старый корпоративный портал или сайт банка с кривой конфигурацией TLS), не паникуйте. Это значит, что защита сработала и заблокировала небезопасное соединение.
Не забудьте сохранить скрипты. И да пребудет с вами пинг менее 20 мс.
С уважением Александр. Канал "Настройки Windows"