Cuando implementamos soluciones de seguridad como Cortex XSIAM o centralizamos registros con Elasticsearch mediante Filebeat, uno de los requisitos más comunes es ingerir la actividad de resolución de nombres de nuestros Domain Controllers (DCs).
Para lograr esto, el primer paso fundamental es habilitar el DNS Debug Logging en la configuración del servidor DNS de Windows. Sin embargo, esto no es simplemente marcar una casilla; hay consideraciones técnicas y de infraestructura críticas que debes conocer antes de aplicarlo en producción.
¿Por qué el log de depuración de DNS está desactivado por defecto?
Si administras servidores Windows, habrás notado que el Debug Logging de DNS viene completamente deshabilitado de fábrica. Esto se debe a dos razones principales:
- Impacto en el rendimiento (CPU y RAM): Registrar cada paquete de consulta y respuesta DNS (Query/Response) requiere que el servicio DNS procese y escriba activamente a disco cada transacción. En un entorno corporativo con miles de endpoints, esto genera una carga de trabajo adicional considerable para el servidor.
- Alta generación de I/O (Lectura/Escritura en disco): El volumen de logs que genera un servidor DNS es masivo. Si estuviera activado por defecto, los discos duros se llenarían en cuestión de horas o días, causando un fallo catastrófico en el sistema operativo del Domain Controller.
¿Dónde se ven usualmente estos logs?
A diferencia de los eventos tradicionales de Windows que revisas en el Event Viewer (Visor de eventos), el Debug Logging de DNS se escribe en un archivo de texto plano (.log).
Tú eres quien define la ruta exacta donde se guardará este archivo al momento de habilitarlo. Usualmente, los administradores configuran la ruta en:
C:\Windows\System32\dns\dns.log o en una carpeta dedicada como D:\DNSLogs\dns_debug.log.
Una vez generado, se puede abrir con cualquier editor de texto (como Notepad o Notepad++), aunque debido a su enorme tamaño, la práctica habitual es que un agente como Filebeat lo lea en tiempo real y lo envíe directamente a Elasticsearch para su parseo e indexación.
Consideraciones críticas de espacio en disco
Antes de habilitar esta opción, es obligatorio tomar estas precauciones para no tumbar tu Domain Controller:
- Establece un límite de tamaño (File Size Limit): Windows te permite configurar un tamaño máximo para el archivo de log (por ejemplo, 500 MB o 1 GB). Cuando el archivo alcanza este límite, el servidor sobrescribe los eventos más antiguos (comportamiento de buffer circular). Nunca dejes esta opción ilimitada.
- Usa una partición o disco secundario: De ser posible, no guardes este log en el disco
C:\donde reside el sistema operativo. Si el log crece descontroladamente y llena el disco de sistema, el servidor Windows colapsará (pantallazo azul o servicios caídos). - Filtra lo que necesitas: No selecciones todas las casillas a menos que sea estrictamente necesario. Usualmente, para soluciones de SIEM, solo necesitas registrar paquetes de tipo “Queries/Transfers”, “Updates” y “Request/Response”.
Habilitar DNS Debug Logging en el servidor DNS de Windows
Para activar este log y prepararlo para la ingesta de Filebeat (dependiendo de la herramienta que consumirá los logs), sigue estos pasos en tu Domain Controller:
- Abre el DNS Manager (Administrador de DNS) en tu servidor Windows (
dnsmgmt.msc). - Haz clic derecho sobre el nombre de tu servidor DNS y selecciona Properties (Propiedades).

- Ve a la pestaña Debug Logging (Registro de depuración).
- Marca la casilla Log packets for debugging (Registrar paquetes para depuración).
- En la sección Packet direction, selecciona ambas: Outgoing y Incoming.
- En Packet contents, asegúrate de marcar al menos Queries/Transfers. (Ajusta las demás casillas según los requerimientos exactos de ingesta de tu conector).
- En la sección inferior File and path, especifica la ruta completa del archivo, por ejemplo:
c:\Windows\System32\dns\DNS.log. - En Maximum size (bytes), ingresa un límite seguro. Por ejemplo, para 500 MB escribe
500000000.

- Haz clic en Apply y luego en OK.
A partir de este momento, el archivo de texto comenzará a llenarse con las consultas DNS y estará listo para que el agente de Filebeat lo lea y lo envíe a tu cluster de Elasticsearch.
Como habilitar DNS Debug al resto de DCs con PowerShell
# 1. Import the Active Directory module (assumes your local machine has this for Get-ADComputer)
Import-Module ActiveDirectory
# 2. Define the Target OU for Domain Controllers
$SearchBase = "OU=Domain Controllers,DC=YOURDOMAIN,DC=com"
# 3. Fetch Domain Controllers, filtering for Windows OS only
$DCs = Get-ADComputer -SearchBase $SearchBase -Filter "OperatingSystem -like '*Windows*'"
Write-Host "⚙️ Found $($DCs.Count) Windows DCs. Starting remote deployment via Invoke-Command..." -ForegroundColor Cyan
# 4. Iterate through each server and execute the ScriptBlock remotely
foreach ($DC in $DCs) {
$Server = $DC.Name
Write-Host "Processing $Server..." -NoNewline
try {
# Execute the DNS cmdlet directly on the target Domain Controller
Invoke-Command -ComputerName $Server -ErrorAction Stop -ScriptBlock {
Set-DnsServerDiagnostics `
-SendPackets $true `
-ReceivePackets $true `
-UdpPackets $true `
-TcpPackets $true `
-Queries $true `
-Updates $true `
-QuestionTransactions $true `
-Answers $true `
-LogFilePath "c:\Windows\System32\dns\DNS.log" `
-MaxMBFileSize 500000000
}
Write-Host " [SUCCESS]" -ForegroundColor Green
}
catch {
Write-Host " [FAILED] - $($_.Exception.Message)" -ForegroundColor Red
}
}

¿Cómo validar que la configuración se haya aplicado?
# 1. Import the Active Directory module
Import-Module ActiveDirectory
# 2. Define the Target OU for Domain Controllers
$SearchBase = "OU=Domain Controllers,DC=YOURDOMAIN,DC=com"
# 3. Fetch only Windows-based Domain Controllers
$DCs = Get-ADComputer -SearchBase $SearchBase -Filter "OperatingSystem -like '*Windows*'"
Write-Host "🔍 Auditing DNS Debug Logging remotely across $($DCs.Count) Windows DCs..." -ForegroundColor Cyan
# 4. Iterate and build a custom report object for each server
$AuditReport = foreach ($DC in $DCs) {
$Server = $DC.Name
try {
# Fetch DNS Diagnostics configuration using PowerShell Remoting
$RemoteConfig = Invoke-Command -ComputerName $Server -ErrorAction Stop -ScriptBlock {
$DNS = Get-DnsServerDiagnostics
# Return a simple object from the remote session to the local session
[PSCustomObject]@{
IsDebugEnabled = $DNS.EnableLoggingForDebugging
LogFilePath = $DNS.LogFilePath
MaxFileSize = $DNS.MaxMBFileSize
}
}
# Build the final output object in the local session
[PSCustomObject]@{
ServerName = $Server
IsDebugEnabled = $RemoteConfig.IsDebugEnabled
LogFilePath = $RemoteConfig.LogFilePath
MaxFileSize = $RemoteConfig.MaxFileSize
Status = "OK"
}
}
catch {
# Handle WinRM network issues or access denied errors
[PSCustomObject]@{
ServerName = $Server
IsDebugEnabled = "N/A"
LogFilePath = "N/A"
MaxFileSize = "N/A"
Status = "Failed"
}
}
}
# 5. Display the results in a formatted table
$AuditReport | Format-Table -AutoSize

Conclusión
Habilitar el DNS Debug Logging es un paso indispensable para darle visibilidad a tu equipo de Seguridad y alimentar herramientas analíticas como Cortex XSIAM o Elasticsearch. Sin embargo, como administradores de infraestructura, nuestra prioridad número uno siempre debe ser la estabilidad, rendimiento y disponibilidad de los Controladores de Dominio.
Al seguir las mejores prácticas —estableciendo límites estrictos de tamaño y ubicando el log en una ruta controlada— logramos el equilibrio perfecto: entregamos datos vitales para la ciberseguridad de la empresa sin poner en riesgo la red. Una vez configurado esto de manera segura, el balón pasa a la cancha del equipo de Seguridad para que desplieguen Filebeat y comiencen la recolección.
Reflexión final: Si administras una infraestructura global con decenas de DCs, recuerda que hacer esto manualmente a través de la interfaz gráfica no es escalable. Aprovecha el poder de PowerShell Remoting (Invoke-Command) para automatizar y estandarizar esta configuración en toda tu flota en cuestión de segundos. ¡Trabaja de manera inteligente, no más duro!