Monitorare DNS di Windows via SNMP: perché il DNS‑SERVER‑MIB non funziona e le alternative migliori

Ecco perché snmpget/snmpwalk su DNS Windows 2012 R2/2016/2019 rispondono “No Such Object” per gli OID del DNS‑SERVER‑MIB e come ottenere comunque metriche affidabili con Performance Counter, WMI/PowerShell, log analitici o agenti SNMP di terze parti.

Indice

Panoramica del problema

Un amministratore vuole interrogare un server DNS Windows (edizioni Server 2012 R2, 2016 o 2019) tramite SNMP per misurare contatori previsti nel DNS‑SERVER‑MIB—per esempio l’OID 1.3.6.1.2.1.32.1.1.3.2, spesso citato come “numero di risposte noname”. Qualsiasi tentativo di snmpget o snmpwalk restituisce:

iso.3.6.1.2.1.32 = No Such Object available on this agent at this OID

La domanda naturale è: manca qualche configurazione? Oppure Windows non espone proprio quei contatori via SNMP?

Risposta breve

  • I server DNS Microsoft non espongono il DNS‑SERVER‑MIB tramite il servizio SNMP nativo di Windows.
  • Il servizio SNMP incluso in Windows fornisce soltanto MIB‑II, Host Resources e alcune estensioni Microsoft generiche, non i contatori specifici del ruolo DNS.
  • Quindi l’errore No Such Object è atteso: l’OID non è implementato dall’agente.

Perché compare “No Such Object”

Capire i codici di errore SNMP aiuta a diagnosticare correttamente:

Messaggio SNMPSignificatoCausa tipica su DNS Windows
No Such ObjectL’oggetto (OID) non esiste nell’agente.Il DNS‑SERVER‑MIB non è implementato: l’albero OID non è presente.
No Such InstanceIl tipo di oggetto esiste ma l’istanza richiesta no (es. indice tabella assente).Non applicabile qui: manca proprio la MIB, non solo l’istanza.
End of MIB viewFine della vista MIB durante uno walk.Si verifica quando si “cammina” in un ramo inesistente o terminato.

In breve: non c’è alcuna estensione SNMP “DNS” da attivare nello stack SNMP di Windows. Se l’OID non è implementato, la query fallirà sempre.

Cosa supporta realmente l’SNMP di Windows

  • MIB‑II (1.3.6.1.2.1): sistema, interfacce, IP, TCP, UDP, ecc.
  • Host Resources (1.3.6.1.2.1.25): CPU, memoria, dischi, processi.
  • Estensioni Microsoft generiche: alcune chiavi di registro/performance non specifiche del DNS.

Inoltre, il servizio SNMP “classico” di Windows Server 2012–2019 parla SNMP v1/v2c e non SNMPv3. Ciò lo rende ancora meno adatto per ambienti che richiedono autenticazione e cifratura nativa.

Obiettivo: metriche DNS affidabili senza DNS‑SERVER‑MIB

Buone notizie: Windows DNS espone statistiche ricche attraverso altre interfacce native. Di seguito trovi le alternative più efficaci, con esempi pratici pronti all’uso.

Alternative consigliate (riassunto operativo)

EsigenzaFonte consigliataEsempio pratico
Conteggio query, risposte, timeout, erroriPerformance Counter / PowerShellGet-DnsServerStatistics, Get-Counter, Get-CimInstance
Dettagli di eventi e anomalieDNS Analytical Logging / Event Logwevtutil, Get-WinEvent
Integrazione SNMP “pura”Agente SNMP di terze parti + scriptNet‑SNMP extend/pass_persist ↔ PowerShell
Esperienza lato client (latenza, esiti)Probe attive su porta 53 (UDP/TCP)Resolve-DnsName, dig, test sintetici

Performance Counter, WMI e PowerShell

Il ruolo DNS espone contatori sia come Performance Counter sia tramite il modulo PowerShell DnsServer. È il percorso più diretto per ottenere metriche affidabili e granulose.

Scoprire i contatori disponibili

# Elenca i set di contatori che contengono "DNS"
Get-Counter -ListSet DNS | Select-Object CounterSetName, Paths | Format-List

In base alla versione/ruolo, potresti vedere set come “DNS Server”, “DNS64” o simili. I nomi precisi possono variare: il comando qui sopra li individua tutti senza doverli ricordare.

Raccolta rapida di tutti i contatori DNS

$paths = (Get-Counter -ListSet DNS).Paths
Get-Counter -Counter $paths -SampleInterval 5 -MaxSamples 12 |
    Export-Counter -Path "C:\temp\dns_perf.blg" -FileFormat BLG

Questo costruisce un file di log Performance Monitor (.blg) con un campionamento ogni 5 secondi per 1 minuto.

Statistiche sintetiche del server DNS

# Richiede il modulo DnsServer (ruolo DNS installato o RSAT)
Get-DnsServerStatistics -ComputerName localhost | Format-List *

Get-DnsServerStatistics fornisce un riepilogo di query per tipo, errori, aggiornamenti dinamici, trasferimenti di zona, cache hit/miss e altro. È ideale come base per dashboard e alert mirati.

Lettura via WMI/CIM (formato “FormattedData”)

# Trova le classi prestazionali legate al DNS
Get-CimClass -Namespace root\cimv2 -ClassName Win32_Perf* |
  Where-Object CimClassName -Match 'DNS' |
  Select-Object CimClassName

Esempio di lettura (sostituisci con il nome individuato)

Get-CimInstance -Namespace root\cimv2 -ClassName Win32PerfFormattedDataDNSServer* |
Select-Object * 

Il vantaggio di CIM: puoi interrogare in remoto in modo affidabile via WinRM (HTTPs 5986), con autenticazione e cifratura.

Esempio: funzione PowerShell pronta per NMS

function Get-DnsMetrics {
  [CmdletBinding()]
  param(
    [string]$ComputerName = 'localhost'
  )
  $stats = Get-DnsServerStatistics -ComputerName $ComputerName
  [pscustomobject]@{
    ComputerName               = $ComputerName
    TimeStamp                  = (Get-Date).ToUniversalTime()
    TotalQueries               = $stats.TotalQueryReceived
    RecursiveQueries           = $stats.RecursiveQueries
    QueryErrors                = $stats.ServerFailure + $stats.FormatErrors + $stats.NameErrors
    CacheHits                  = $stats.CacheHits
    CacheMisses                = $stats.CacheMisses
    ZoneTransfersInProgress    = $stats.ZoneTransferRequestsIn
    ZoneTransfersOut           = $stats.ZoneTransferRequestsOut
    DynamicUpdates             = $stats.DynamicUpdateReceived
    TcpConnections             = $stats.TCPConnections
    UdpQueries                 = $stats.UDPQueries
  }
}

Uso:

Get-DnsMetrics | ConvertTo-Json -Depth 4 

Questa funzione restituisce un oggetto pulito, facilmente esportabile verso il tuo sistema di monitoraggio (via REST collector, file, gateway, ecc.).

DNS Analytical Logging ed Event Log

Quando servono dettagli puntuali per il troubleshooting (tipi di query, risposta, esito, client, ecc.), il DNS Analytical Logging è insostituibile. Puoi abilitarlo sia da Event Viewer sia da riga di comando.

Abilitare il canale analitico

# Trova il nome esatto del canale (varia tra versioni)
wevtutil el | Select-String -Pattern 'DNS-Server|DNSServer' | Select-Object -ExpandProperty Line

Esempio di abilitazione del canale "Analytical"

wevtutil sl "Microsoft-Windows-DNS-Server/Analytical" /e:true 

Una volta attivo, puoi consumare gli eventi in tempo reale:

Get-WinEvent -LogName "Microsoft-Windows-DNS-Server/Analytical" -MaxEvents 100 |
  Select-Object TimeCreated, Id, LevelDisplayName, Message

Se l’obiettivo è estrarre statistiche (ad es. percentuale di NXDOMAIN), filtra e aggrega i messaggi con PowerShell o con il tuo collector preferito.

Agente SNMP di terze parti: esportare metriche DNS come OID privati

Se il tuo NMS richiede strettamente SNMP, puoi installare un agente SNMP esterno (es. Net‑SNMP) e “ponticellare” le metriche DNS di Windows tramite script PowerShell. L’idea è semplice: lo script legge i contatori nativi e l’agente li espone come OID privati sotto il tuo enterprise number.

Passi architetturali

  1. Installa un agente SNMP compatibile con extend o pass_persist.
  2. Crea uno script PowerShell che produce le metriche richieste.
  3. Mappa lo script a OID privati attraverso la configurazione dell’agente.
  4. Interroga quegli OID dal tuo NMS come se fossero contatori SNMP nativi.

Esempio di script PowerShell per Net‑SNMP (extend)

# File: C:\Scripts\dns-metrics.ps1
$metrics = Get-DnsMetrics
Output "chiave=valore" facile da parsare
$metrics.PSObject.Properties | ForEach-Object {
  "{0}={1}" -f $.Name, $.Value
}

Configurazione illustrativa (snmpd.conf)

# Esempio: OID privato 1.3.6.1.4.1.55555.1.1.*
Estende SNMP con l'output dello script
extend dnsmetrics powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\dns-metrics.ps1"

Con extend otterrai l’output come stringhe. Per valori numerici “puri” e/o aggiornamenti continui, considera pass_persist e un piccolo wrapper che risponda ai GET/GETNEXT. In entrambi i casi, documenta gli OID in una tua MIB privata (es. MY-DNS-METRICS-MIB con radice 1.3.6.1.4.1.<enterprise>).

Template di MIB privata (estratto)

MY-DNS-METRICS-MIB DEFINITIONS ::= BEGIN

IMPORTS enterprises, Integer32 FROM SNMPv2-SMI;

myCompany      OBJECT IDENTIFIER ::= { enterprises 55555 }
dnsMetrics     OBJECT IDENTIFIER ::= { myCompany 1 }
totalQueries   OBJECT-TYPE
SYNTAX      Integer32
MAX-ACCESS  read-only
STATUS      current
DESCRIPTION "Query totali rilevate dal server DNS Windows"
::= { dnsMetrics 1 }

recursiveQueries OBJECT-TYPE
SYNTAX      Integer32
MAX-ACCESS  read-only
STATUS      current
DESCRIPTION "Query ricorsive"
::= { dnsMetrics 2 }

END 

Con questa struttura puoi interrogare, ad esempio, 1.3.6.1.4.1.55555.1.1 per totalQueries e ...1.2 per recursiveQueries.

Monitoraggio dalla rete: misurare ciò che vede il client

Le metriche lato server non raccontano tutto. Probe sintetiche aiutano a misurare latenza ed errori come li sperimentano i client.

Esempi pratici

# Round-trip e risoluzioni via PowerShell
1..10 | ForEach-Object {
  Measure-Command { Resolve-DnsName -Server 192.0.2.10 -Name www.contoso.test -Type A } |
    Select-Object -ExpandProperty TotalMilliseconds
}
# Con dig (se disponibile)
dig @192.0.2.10 www.contoso.test A +tries=1 +stats +nocmd +nocomments

Automatizza questi test e invia i risultati (tempo mediano/percentile, tasso di fallimenti) al tuo NMS per allarmi basati sull’esperienza reale.

Guida operativa: dal “vorrei il DNS‑SERVER‑MIB” al “ho le metriche giuste”

  1. Conferma l’obiettivo: quali KPI ti servono davvero? (es. Queries/sec, NXDOMAIN, cache hit ratio, timeout, trasferimenti di zona).
  2. Mappa i KPI alle fonti (tabella sotto) e scegli l’interfaccia più stabile e sicura disponibile nel tuo ambiente.
  3. Automatizza la raccolta con PowerShell/CIM; se devi usare SNMP, costruisci OID privati via agente esterno.
  4. Definisci soglie e finestre di aggregazione sensate (es. P95 latenza, errori su 5 minuti, saturazione cache).
  5. Testa e valida con carichi noti (es. script che inviano query sintetiche) per tarare gli allarmi.

Mappa “esigenza → metrica → fonte → comando”

EsigenzaMetricaFonteEsempio
Volume totaleQuery totali/secDnsServer/PerfCounter(Get-DnsServerStatistics).TotalQueryReceived
RicorsioneRecursive/secDnsServer(Get-DnsServerStatistics).RecursiveQueries
QualitàNXDOMAIN, SERVFAILEvent Log / DnsServerFiltra eventi o somma ServerFailure/NameErrors
CacheCacheHits / CacheMissesDnsServer(Get-DnsServerStatistics).CacheHits
TrasferimentiAXFR/IXFRDnsServerZoneTransferRequestsIn/Out
EsperienzaLatenza, timeout clientProbeResolve-DnsName o dig schedulati

Integrazione con i sistemi di monitoraggio

  • Collector WMI/CIM: ideali se il tuo NMS parla nativamente WinRM/CIM; espongono le stesse metriche dei contatori.
  • Agent‑based: installa un agente (ad es. Windows agent della tua piattaforma) e invia performance/telemetria via plugin PowerShell.
  • SNMP “bridge”: se devi restare su SNMP, crea OID privati come illustrato; così non dipendi da MIB che non esistono.

FAQ

Esiste un modo “nascosto” per abilitare il DNS‑SERVER‑MIB su Windows?

No. Il servizio SNMP nativo non fornisce quella MIB e non esistono toggle o feature aggiuntive che la abilitino.

Posso installare un’estensione SNMP Microsoft per il DNS?

Non è disponibile un’estensione ufficiale. L’approccio consigliato è usare Performance Counter/PowerShell, oppure un agente SNMP di terze parti con OID privati.

E SNMPv3?

Il servizio SNMP “legacy” di Windows Server 2012–2019 non supporta nativamente v3. Se ti serve v3, usa un agente esterno o evita SNMP e usa WinRM/HTTPS con autenticazione integrata.

Quali permessi servono per leggere le metriche?

Per Get-DnsServerStatistics servono privilegi amministrativi sul server DNS o deleghe RSAT appropriate. Per WMI/CIM, un account con diritti di lettura sulle classi di performance; per i log, l’accesso al canale eventi.

Best practice e sicurezza

  • Evita SNMPv2c quando puoi: la community string è in chiaro. Preferisci WinRM/HTTPS o SNMPv3 via agente esterno.
  • Firewall: apri solo le porte necessarie (UDP 161/162 per SNMP; 5985/5986 per WinRM; 53 UDP/TCP per probe).
  • Quota di logging: l’Analytical Logging è dettagliato e può essere verboso; abilitalo quando serve e ruota i log.
  • Aggrega e normalizza: crea un unico punto di verità (es. API interna) che esponga i KPI usati da dashboard e allarmi.

Troubleshooting rapido

SNMP

# Verifica che l'agente SNMP risponda (MIB-II)
snmpwalk -v2c -c <community> <host> 1.3.6.1.2.1.1

Esempio che fallirà (DNS-SERVER-MIB non implementata)

snmpwalk -v2c -c   1.3.6.1.2.1.32 

PowerShell

# Il modulo DnsServer è presente?
Get-Module -ListAvailable DnsServer

Il comando statistiche funziona?

Get-DnsServerStatistics -ComputerName localhost | Select-Object -First 1 

Event Log

# Elenca canali DNS e controlla se c'è l'Analytical
wevtutil el | Select-String -Pattern 'DNS-Server|DNSServer'

Quando preferire probe di rete anziché metriche interne

  • Filiali/Edge: misurare da dove vivono i client è spesso più predittivo di misurare al centro stella.
  • CDN/Anycast: la destinazione effettiva può cambiare per politica di routing; raccogliere P95/P99 di latenza per tipo di query aiuta a prevenire regressioni.
  • Servizi critici: definisci SLO e monitora l’error budget con test sintetici continui.

Indicatori e soglie: suggerimenti

  • Queries/sec: baseline per nodo e fascia oraria; allarme su deviazioni di +/−40% prolungate.
  • Errori (SERVFAIL, NXDOMAIN): soglia su incremento relativo, non assoluto (es. +100% su 10 min).
  • Cache hit ratio: monitora trend; un calo improvviso può indicare problemi upstream o flush non previsti.
  • Latenza P95 (probe): soglia dinamica (es. +30% rispetto a mediana delle ultime 24 ore).

Conclusione

Non hai saltato alcun passaggio: Windows non implementa il DNS‑SERVER‑MIB, quindi gli OID relativi al DNS non sono disponibili tramite l’agente SNMP nativo. Per ottenere metriche DNS affidabili adotta Performance Counter, WMI/PowerShell, DNS Analytical Logging o, se necessario, un agente SNMP esterno che esponga OID privati. In ambienti misti, puoi anche valutare un resolver BIND o Knot per esigenze di contatori SNMP “canonici”, mantenendo il DNS Windows come back‑end AD‑integrato. Così ottieni dati solidi, automazione pulita e sicurezza migliore rispetto a forzare una MIB non supportata.


Appendice: esempio di raccolta periodica

# Esempio di scheduler locale per inviare metriche a un endpoint
$payload = Get-DnsMetrics | ConvertTo-Json -Depth 4
Invoke-RestMethod -Uri "https://collector.internal.example/ingest/dns" `
  -Method Post -Body $payload -ContentType "application/json"

Collega questo snippet a una Scheduled Task per un flusso di telemetria affidabile e sicuro, senza dipendere dall’SNMP legacy.

Hai ora una guida completa per passare dall’aspettativa di “leggere il DNS‑SERVER‑MIB” alla pratica efficace di monitorare il DNS di Windows con strumenti supportati, sicuri e automatizzabili.

Indice