Vuoi mantenere l’inoltro di tutto il dominio abc.com
verso un forwarder esterno ma rispondere localmente per un solo host? In questa guida ti mostro come creare un’eccezione DNS pulita e affidabile su Windows Server, con procedure passo‑passo, comandi PowerShell e best practice operative.
Scenario e obiettivo
In molte infrastrutture si usa un conditional forwarder (o il forwarder predefinito) per inviare tutti i nomi di abc.com
a un resolver esterno (ISP, provider SaaS, DNS pubblico). A volte, però, occorre forzare un singolo record, ad esempio far sì che host1.abc.com
risolva su un IP interno, senza toccare o duplicare l’intera zona abc.com
e senza interrompere il forwarding del resto dei nomi.
Soluzione in sintesi
La strategia più semplice e robusta è creare una piccola zona autorevole dedicata al solo FQDN da eccezionare (host1.abc.com
). In questo modo:
- Il tuo DNS diventa autorevole solo per
host1.abc.com
e può rispondere con l’IP interno desiderato. - Le query per
*.abc.com
che non appartengono alla micro‑zona continuano a essere inoltrate al forwarder esterno, senza modifiche al meccanismo esistente.
Confronto approcci (panoramica operativa)
Approccio | Come funziona | Vantaggi | Limitazioni / Note |
---|---|---|---|
Zona autonoma “host1.abc.com” (consigliata) | Crea una Forward Lookup Zone primaria chiamata host1.abc.com . Nella zona, aggiungi un record A all’apice (nome: “@”) con l’IP interno da pubblicare. | Autorevolezza limitata al solo FQDN. Non interferisce con il forwarder per tutti gli altri nomi abc.com . Compatibile con tutte le versioni di Windows Server. | Non richiede toccare la zona abc.com né replicarla. Perfetta per una o poche eccezioni statiche. |
DNS Policies (Windows Server 2016+) | Usa Query Resolution Policy e (se serve) Recursion Scopes per gestire eccezioni, logging, instradamento per subnet, ecc. In genere si combina comunque con la micro‑zona host1.abc.com per fornire la risposta locale all’host. | Gestione granulare via PowerShell (Add‑DnsServerQueryResolutionPolicy ). Utile quando servono regole per client/subnet/orari o forwarder diversi. | Richiede Server 2016 o superiore. Configurazione più articolata. Nota: non creare una zona abc.com “vuota” se non controlli l’intera zona: diventando autorevole la interromperesti il forwarding dei restanti nomi. |
Hosts file / DHCP / NRPT | Distribuisci l’IP di host1.abc.com nei client (file hosts o opzioni DHCP/NRPT). | Semplice, non tocca il DNS server. | Gestione e scalabilità complesse; rischio di incoerenze e cache “appiccicate”. |
Perché la “micro‑zona” è la via maestra
Nel resolver di Windows, l’ordine di risoluzione privilegia le zone locali rispetto ai forwarder. Se esiste una zona che corrisponde esattamente al nome richiesto (qui host1.abc.com
), il server risponde autorevolmente da quella zona. Per tutti i nomi dove non esiste alcuna zona locale (ad esempio www.abc.com
, api.abc.com
, sip.tls.abc.com
), la risoluzione segue il percorso precedente (conditional o default forwarder), senza interventi aggiuntivi.
Procedura dettagliata – Zona autonoma “host1.abc.com”
Prerequisiti
- Un server DNS Windows già in produzione (membro o DC) che inoltra
abc.com
a un forwarder esterno. - Permessi amministrativi sul servizio DNS.
- L’IP interno destinato a
host1.abc.com
(IPv4 e, se serve, IPv6).
Passi da GUI (DNS Manager)
- Apri DNS Manager (
dnsmgmt.msc
). - Espandi il server → Forward Lookup Zones → New Zone….
- Tipo di zona: Primary zone.
Se il server è DC e vuoi replicare in AD, spunta Store the zone in Active Directory (replicherà in base all’ambito scelto). - Zone name:
host1.abc.com
. - Dinamic update: in genere Do not allow dynamic updates (non serve aggiornamento dinamico per un singolo record statico).
- Conferma la creazione.
- Nella nuova zona, fai clic destro → New Host (A or AAAA)….
- Lascia il Name vuoto (equivale a “@”), inserisci l’IP address interno e imposta (se vuoi) un TTL specifico.
Suggerimento: TTL 5–30 min è un buon punto di partenza per un override. - Salva. Se usi anche IPv6, aggiungi un record AAAA omologo.
Passi da PowerShell
Esegui PowerShell come amministratore sul DNS server:
# 1) Crea la zona primaria (file-backed). Su DC puoi usare -ReplicationScope Domain o Forest
Add-DnsServerPrimaryZone -Name "host1.abc.com" -ZoneFile "host1.abc.com.dns"
2) Aggiungi il record A all'apice della zona (TTL facoltativo)
Add-DnsServerResourceRecordA -ZoneName "host1.abc.com" -Name "@" -IPv4Address 10.10.20.50 -TimeToLive 00:15:00
(facoltativo) record AAAA
Add-DnsServerResourceRecordAAAA -ZoneName "host1.abc.com" -Name "@" -IPv6Address "fd00::50" -TimeToLive 00:15:00
Attenzione: all’apice di una zona (host1.abc.com
) non usare CNAME
. Per standard DNS, un CNAME
non può coesistere con SOA
/NS
dell’apice di zona. Usa record A
/AAAA
.
Verifica e cache
- Dal client:
ipconfig /flushdns
per svuotare la cache del resolver. - Dal server DNS (facoltativo):
Clear-DnsServerCache -Force
. - Test:
nslookup host1.abc.com <IPDNSSERVER> resolve-dnsname host1.abc.com -server <IPDNSSERVER> -type A -DnsOnly
- Verifica che
www.abc.com
o altri nomi*.abc.com
continuino a risolversi via forwarder.
Rollback
Per rimuovere l’eccezione:
Remove-DnsServerZone -Name "host1.abc.com" -Force
In alternativa, elimina solo il record e lascia la zona vuota (non necessario di solito).
Varianti e accorgimenti pratici
AD‑Integrated o file‑backed?
- AD‑integrated: comoda in ambienti con più DNS; scegli la Replication Scope (Domain o Forest) per distribuire automaticamente la micro‑zona su tutti i DNS che devono applicare l’eccezione.
- File‑backed: semplice e locale; buona se hai un singolo DNS o non vuoi replicare.
TTL: scegli la finestra di coerenza
- TTL breve (5–15 min): più flessibilità nel cambiare target, più query verso il DNS.
- TTL lungo (1–4 ore): più cache, meno query, giro più “pigro” nelle modifiche.
IPv6 e applicazioni “dual‑stack”
Se i client preferiscono IPv6, pubblica anche il record AAAA
; altrimenti le applicazioni potrebbero provare IPv6 e fare fallback lento.
SPF, MX, SRV e record speciali
La micro‑zona host1.abc.com
riguarda solo quell’FQDN. Non influenza MX
, TXT
o SRV
della radice abc.com
, che continueranno a essere risolti via forwarder. Evita di creare per errore una zona abc.com
completa sul tuo DNS: diventerebbe autorevole e bloccherebbe l’inoltro.
DNS Policies: quando e come usarle davvero
Le DNS Policies (da Windows Server 2016) sono utili quando, oltre all’eccezione per host1.abc.com
, vuoi policy di risoluzione avanzate: logging mirato, instradamento per subnet/client, forwarder diversi per orario o rete, split‑view interno/esterno di una zona che controlli.
Punto chiave: Se non gestisci la zona abc.com
(es. è pubblica presso un provider), non creare una zona abc.com
“vuota” sul tuo DNS: il server diventerebbe autorevole per il dominio e smetterebbe di inoltrare le query rimanenti. In questo scenario, continua a usare la micro‑zona per host1.abc.com
e mantieni il conditional forwarder esistente per abc.com
.
Esempio A – Eccezione + routing per subnet con Recursion Scope
Obiettivo: rispondere localmente a host1.abc.com
(micro‑zona) ma, per tutte le altre query *.abc.com
, usare un forwarder specifico diverso in base alla subnet del client.
- Crea la micro‑zona come da procedura (passo imprescindibile per avere l’IP locale di
host1.abc.com
). - Definisci le subnet client (per esempio, SedeA e SedeB):
# Subnet dei client
Add-DnsServerClientSubnet -Name "SedeA" -IPv4Subnet "10.10.0.0/16"
Add-DnsServerClientSubnet -Name "SedeB" -IPv4Subnet "10.20.0.0/16"
- Crea Recursion Scopes con forwarder diversi:
# Scope di ricorsione con forwarder dedicati
Add-DnsServerRecursionScope -Name "Fwd-A" -Forwarder 203.0.113.10
Add-DnsServerRecursionScope -Name "Fwd-B" -Forwarder 198.51.100.10
- Instrada solo le query di
*.abc.com
verso gli scope corretti, in base alla subnet del client:
# Policy di risoluzione per dominio abc.com (esclude host1 perché già coperto dalla zona locale)
Add-DnsServerQueryResolutionPolicy -Name "abcA" -Action ALLOW -FQDN "Suffix,abc.com" -ClientSubnet "EQ,SedeA" -RecursionScope "Fwd-A"
Add-DnsServerQueryResolutionPolicy -Name "abcB" -Action ALLOW -FQDN "Suffix,abc.com" -ClientSubnet "EQ,SedeB" -RecursionScope "Fwd-B"
Le richieste per host1.abc.com
troveranno la micro‑zona e verranno risolte localmente; tutte le altre *.abc.com
seguiranno il forwarder assegnato per subnet.
Esempio B – Split‑view (solo se possiedi la zona abc.com
)
Se gestisci entrambe le viste (interna/esterna) di abc.com
sul tuo DNS, puoi usare Zone Scope per risposte diverse. Questo non sostituisce il forwarder; in pratica elimina il forwarding perché diventi autorevole per la zona.
- Crea la zona
abc.com
(interna) sul tuo DNS. - Crea due Zone Scope, ad esempio
Internal
eExternal
:
Add-DnsServerZoneScope -ZoneName "abc.com" -Name "Internal"
Add-DnsServerZoneScope -ZoneName "abc.com" -Name "External"
- Inserisci in
Internal
il recordA
dihost1
(e gli altri record interni necessari). InExternal
inserisci i record “pubblici” (se li controlli/replichi). - Crea le policy per inviare le subnet interne al
ZoneScope Internal
e le altre alZoneScope External
:
Add-DnsServerQueryResolutionPolicy -Name "abc-internal" -Action ALLOW -FQDN "Suffix,abc.com" -ClientSubnet "EQ,SedeA" -ZoneScope "abc.com,Internal"
Add-DnsServerQueryResolutionPolicy -Name "abc-external" -Action ALLOW -FQDN "Suffix,abc.com" -ClientSubnet "NE,SedeA" -ZoneScope "abc.com,External"
Nota: questo modello è corretto solo se replichi o controlli i record di abc.com
all’interno del tuo DNS. Se i record pubblici sono gestiti da terzi, evita questo approccio, perché il tuo server smetterà di inoltrare e diverrà l’autorità per l’intero dominio.
Alternative client‑side (quando usarle con cautela)
- File hosts: utile per test, ma ingestibile su larga scala; attenzione a endpoint non Windows.
- DHCP opzioni custom: puoi distribuire un mapping solo per alcuni client, ma resta fragile e difficile da auditare.
- NRPT (Name Resolution Policy Table): via GPO puoi forzare DNS diversi per specifici namespace (solo client Windows). È potente ma è client‑side e introduce un piano di controllo aggiuntivo.
Debug, validazione e operatività
Checklist rapida dopo la modifica
- Cache del client svuotata:
ipconfig /flushdns
. - Cache del server, se serve:
Clear-DnsServerCache -Force
. - Query di test:
nslookup host1.abc.com <dns-interno> nslookup www.abc.com <dns-interno> resolve-dnsname host1.abc.com -server <dns-interno> -DnsOnly resolve-dnsname www.abc.com -server <dns-interno> -DnsOnly
- Se usi condizionali, conferma:
Get-DnsServerConditionalForwarderZone -Name abc.com
.
Risoluzione problemi comuni
Sintomo | Causa probabile | Soluzione |
---|---|---|
host1.abc.com non risolve all’IP interno | Record A mancante o TTL vecchio in cache (client/server) | Controlla record nella zona, riduci TTL, ipconfig /flushdns , Clear-DnsServerCache |
Altri nomi *.abc.com non si risolvono | Creata per errore una zona abc.com locale | Elimina la zona locale abc.com o rimuovi la delega errata; lascia attivi i forwarder |
Intermittenza tra IP interno ed esterno | DNS multipli con configurazioni diverse o ordine server DNS sui client | Allinea la configurazione su tutti i DNS autorevoli; verifica l’ordine dei DNS nei client |
Le app preferiscono IPv6 e ignorano l’IPv4 interno | Manca il record AAAA coerente | Aggiungi AAAA nella micro‑zona o disabilita IPv6 solo se giustificato |
Risoluzione lenta al primo tentativo | Timeout verso forwarder o MTU/firewall sul percorso | Verifica reachability del forwarder, latenza, firewall/ACL e frammentazione |
Strumenti di logging
- DNS Analytical Log: abilitalo in Event Viewer → Applications and Services Logs > Microsoft > Windows > DNS‑Server.
- Diagnostica DNS:
Get-DnsServerDiagnostics | Format-List *
- Verifica zone e record:
Get-DnsServerZone Get-DnsServerResourceRecord -ZoneName "host1.abc.com"
Sicurezza, compliance e governance
- Change management: documenta l’eccezione (chi, perché, TTL, data di revisione).
- Least privilege: limita chi può creare zone/record DNS; un errore su
abc.com
può interrompere servizi critici (es. mail, VoIP). - Monitor: crea un controllo sintetico (ping/HTTP) verso
host1.abc.com
da più sedi, per verificare latenza e reachability. - Audit periodico: elenca micro‑zone presenti e confrontale con l’inventario servizi.
FAQ operative
Posso creare l’eccezione se uso un conditional forwarder per abc.com
?
Sì. La micro‑zona host1.abc.com
ha precedenza perché è una corrispondenza più specifica. Il conditional forwarder continuerà a gestire tutti gli altri nomi *.abc.com
.
Devo creare record NS
o una delega?
No. Non stai delegando un sotto‑dominio a un autoritativo separato: stai semplicemente diventando autoritativo per l’intero FQDN host1.abc.com
mediante una zona “single‑label”. Bastano SOA/NS di default della micro‑zona e il record A
/AAAA
all’apice.
Serve aggiornamento dinamico?
Di norma no: il record è statico. Tienilo disabilitato per ridurre il rischio di modifiche accidentali.
Posso limitare l’eccezione a una sola subnet di client?
Non in modo puro con la sola micro‑zona: se la crei, il server risponde autorevolmente per host1.abc.com
a tutti i client che la interrogano. Se devi fare per‑subnet, considera DNS Policies in combinazione con views e (in scenari complessi) DNS server separati o load balancer DNS‑aware.
E se ho più eccezioni (host2
, host3
…)?
Puoi creare una micro‑zona per ciascun FQDN (host2.abc.com
, host3.abc.com
, …). In alternativa, se il numero cresce, valuta DNS Policies o la gestione split‑horizon sull’intera zona abc.com
solo se la controlli.
Procedura rapida: da “zero” a produzione
- Raccogli i requisiti: IP target, TTL, IPv6 sì/no, server DNS coinvolti, sedi impattate.
- Backup: esporta la configurazione DNS o scatta una snapshot/backup del server.
- Crea la micro‑zona
host1.abc.com
e il recordA
/AAAA
. - Verifica:
nslookup
,resolve-dnsname
, test applicativi. - Monitora: metrics e alert sul nome (reachability, latenza, errori DNS).
- Documenta: change log, owner del servizio, scadenza/ricontrollo.
Raccomandazioni finali
- Per una singola eccezione e ambienti misti o precedenti al 2016, la micro‑zona
host1.abc.com
è la scelta più rapida e a prova di errore. - Per più eccezioni o requisiti avanzati (filtri per subnet, logging, orari, forwarder differenziati), DNS Policies offrono un controllo fine; evita però di creare una zona
abc.com
locale se non la gestisci integralmente. - Dopo la modifica, svuota la cache (
ipconfig /flushdns
) e verifica connslookup host1.abc.com
da un client e da più reti. - Se
abc.com
ospita record critici (es.MX
) che non vuoi risolvere localmente, assicura che nessuno crei accidentalmente una zonaabc.com
completa sul tuo DNS: bloccherebbe l’inoltro.
Esempi pratici pronti all’uso
Script PowerShell completo (file‑backed)
# Parametri
$Fqdn = "host1.abc.com"
$IPv4 = "10.10.20.50"
$TTL = New-TimeSpan -Minutes 15
Crea zona primaria file-backed
if (-not (Get-DnsServerZone -Name $Fqdn -ErrorAction SilentlyContinue)) {
Add-DnsServerPrimaryZone -Name $Fqdn -ZoneFile "$Fqdn.dns"
Write-Host "Zona $Fqdn creata."
} else {
Write-Host "Zona $Fqdn già esistente."
}
Aggiungi/aggiorna record A all'apice
$existing = Get-DnsServerResourceRecord -ZoneName $Fqdn -RRType "A" -ErrorAction SilentlyContinue |
Where-Object { $_.HostName -eq "@" }
if ($existing) {
Aggiorna TTL e IP se necessario
Remove-DnsServerResourceRecord -ZoneName $Fqdn -RRType "A" -RecordData $existing.RecordData -Name "@" -Force
Add-DnsServerResourceRecordA -ZoneName $Fqdn -Name "@" -IPv4Address $IPv4 -TimeToLive $TTL
Write-Host "Record A aggiornato in $IPv4 (TTL $($TTL.TotalMinutes) min)."
} else {
Add-DnsServerResourceRecordA -ZoneName $Fqdn -Name "@" -IPv4Address $IPv4 -TimeToLive $TTL
Write-Host "Record A creato per $Fqdn = $IPv4."
}
Pulisci cache del server (opzionale)
Clear-DnsServerCache -Force
Write-Host "Cache server DNS pulita."
Comandi di test rapidi
ipconfig /flushdns
nslookup host1.abc.com
resolve-dnsname host1.abc.com -DnsOnly
nslookup www.abc.com
Policy di routing per subnet (facoltativo)
# Solo se vuoi usare forwarder diversi per abc.com in base alla subnet:
Add-DnsServerClientSubnet -Name "HQ" -IPv4Subnet "10.0.0.0/16"
Add-DnsServerRecursionScope -Name "Fwd-HQ" -Forwarder 203.0.113.10
Add-DnsServerQueryResolutionPolicy -Name "abc-hq" -Action ALLOW -FQDN "Suffix,abc.com" -ClientSubnet "EQ,HQ" -RecursionScope "Fwd-HQ"
Conclusione
Per un override puntuale di host1.abc.com
in un ambiente che inoltra il resto di abc.com
verso un forwarder, la zona autonoma è la soluzione più pulita, sicura e reversibile. È “a prova di futuro”, funziona su tutte le versioni di Windows Server, non richiede refactoring dei forwarder e ti consente di scalare a poche ulteriori eccezioni con minima complessità. Le DNS Policies diventano preziose quando la realtà operativa richiede routing e telemetria più avanzati; usale con cognizione, evitando di far diventare autorevole il tuo DNS per intere zone che non gestisci.
Template decisionale in 10 secondi
- Devo cambiare solo host1? Micro‑zona
host1.abc.com
. - Devo cambiare anche il comportamento per subnet/orari? Micro‑zona + DNS Policies (Recursion Scope).
- Gestisco io la zona
abc.com
interna ed esterna? Valuta Zone Scope/Views (niente forwarder).
Se pianifichi più eccezioni, crea una convenzione (naming, TTL, owner, scadenza di revisione) ed evita duplicazioni. Un DNS “curato” è invisibile agli utenti: e questo è il miglior complimento per il tuo lavoro.