Работа всех сетевых устройств зависит от службы DNS. Поэтому полезно уметь включить логирование DNS запросов, которые обрабатывает DNS сервис на Windows Server, и суметь после выполнить их анализ.
По умолчанию в Windows Server отключено логирование DNS всех пакетов. Чтобы его включить:
- запустите консоль DNS Manager (dnsmgmt.msc) и подключитесь к нужному DNS серверу;
- откройте его свойства и перейдите на вкладку Debug Logging;
- включите опцию Log packets for debugging.
Далее можно настроить параметры логирования: выбрать направление DNS пакетов, протокол (UDP и/или TCP), типы пакетов (простые dns запросы, запросы на обновление записей, уведомления). С помощью опцию Filter packets by IP address можно указать IP адреса, для которых нужно логировать отправленные или полученные пакеты (поможет существенно уменьшить размер лога). В поле Log file path and name укажите имя текстового файла, в который нужно записывать все события. По умолчанию размер DNS лога ограничен 500Мб. После достижения этого лимита старые события начнут перезатираться новыми.
Теперь выполните с любого компьютера DNS запрос к DNS-серверу, например:
nslookup winitpro.ru 192.168.13.10
Или выполните DNS запрос с помощью PowerShell:
Resolve-DnsName -Name winitpro.ru -Server 192.168.13.10
Данный запрос вернет клиенту IP адрес запрошенного сервера.
Проверим теперь, что этот запрос отобразился в логе DNS сервера. Для этого, выполним поиск в текстовом логе по IP адресу клиента (192.168.13.200). Можно открыть лог файл в блокноте, а можно выполнить поиск по нему с помощью PowerShell:
get-content "C:\Logs\dc01_dns.log" | Out-String -Stream | Select-String "192.168.1.200"
У автора поста по ссылке можно получить код функции Get-DNSDebugLog:
Get-DNSDebugLog -DNSLog "d:\tmp\DNS\dns_log.csv" | Where {$_.Client -like '*192.168.1.200'} | ft
Так можно выполнить поиск в логе по имени сервиса NTP:
Get-DNSDebugLog -DNSLog "d:\tmp\DNS\dns_log.csv" | Where {$_.Query -like '*ntp*'} | ft
Но можно вспомнить старый добрый LogParser и использовать его:
LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 `
"SELECT field8 AS IP, REVERSEDNS(IP) AS Name, count(IP) as QueryCount FROM 'd:\tmp\DNS\dns_log.csv' WHERE field10 = 'Q' GROUP BY IP ORDER BY QueryCount DESC"
Например тот же запрос что в Powershell теперь выглядит так:
LogParser.exe -i:TSV -nskiplines:30 -headerRow:off -iSeparator:space -nSep:1 -fixedSep:off -rtp:-1 `
"SELECT * FROM 'd:\tmp\DNS\dns_log.csv' WHERE field8 like '%192.168.1.200%'"
Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?