In questa lezione impari a
- distinguere DNS Resolver e DNS Forwarder
- configurare il DNS Resolver (Unbound)
- creare nomi locali con gli host override
- verificare e proteggere il servizio DNS
Il DNS traduce i nomi in indirizzi. pfSense può farlo per tutta la rete, e così controllare anche quali nomi si risolvono.
Cos'è il DNS?
Il DNS (Domain Name System) è il "phonebook di Internet" - traduce nomi di dominio leggibili dall'uomo (come www.google.com) in indirizzi IP numerici (come 172.217.16.142) che i computer usano per comunicare. Senza DNS, dovresti ricordare l'indirizzo IP di ogni sito web.
Come funziona il DNS
Esempio: Browser richiede www.google.com 1. Client Query Browser → DNS Resolver pfSense "Qual è l'IP di www.google.com?" 2. Cache Check pfSense controlla cache locale Se presente → risposta immediata (veloce!) Se assente → continua query 3. Root Server Query pfSense → Root DNS Server (.com, .org, .it, etc.) "Chi gestisce il dominio .com?" Risposta: "Chiedi ai server .com autoritativi" 4. TLD Server Query pfSense → TLD Server (.com) "Chi gestisce google.com?" Risposta: "Chiedi ai nameserver di Google" 5. Authoritative Server Query pfSense → Google's Nameserver "Qual è l'IP di www.google.com?" Risposta: "172.217.16.142" 6. Response to Client pfSense → Browser "www.google.com = 172.217.16.142" 7. Cache Storage pfSense salva in cache per TTL specificato Prossime query = risposta istantanea! Tempo totale: 50-200ms (prima query) / 1-5ms (cache hit)
Vantaggi cache DNS locale. Avere pfSense come DNS locale con cache offre enormi vantaggi:
- Velocità: Risposte in ~1ms invece di 50-200ms per query ripetute
- Riduzione latenza: Navigazione web più fluida
- Minor carico WAN: Query cache = zero traffico Internet
- Funziona offline: Domini in cache accessibili anche senza Internet (temporaneamente)
- Privacy: Query non inviate direttamente a DNS pubblici
DNS resolver vs DNS forwarder
pfSense offre DUE servizi DNS distinti. È fondamentale capire la differenza per scegliere quello giusto.
DNS resolver (Unbound): CONSIGLIATO
Il DNS Resolver (basato su Unbound) è un resolver DNS ricorsivo completo. Interroga direttamente i root server e segue la gerarchia DNS fino a ottenere la risposta autoritativa.
- DNSSEC Validation – Verifica crittografica autenticità risposte DNS
- DNS over TLS (DoT) – Query cifrate verso upstream DNS
- Cache Avanzata – Algoritmi intelligenti per cache ottimale
- Massima Privacy – Query dirette ai root - nessun intermediario
DNS forwarder (dnsmasq)
Il DNS Forwarder (basato su dnsmasq) è più semplice: inoltra tutte le query a DNS esterni (Google, Cloudflare, OpenDNS) senza risoluzione diretta.
| Caratteristica | DNS Resolver (Unbound) | DNS Forwarder (dnsmasq) |
|---|---|---|
| Metodo | Ricorsivo (query dirette root) | Forward (inoltra a DNS esterni) |
| DNSSEC | Supporto completo | Non supportato |
| DNS over TLS | Supportato | Non supportato |
| Privacy | Massima (no intermediari) | Dipende da DNS upstream |
| Performance | Ottima con cache | Buona |
| Complessità | Media | Bassa (più semplice) |
| Integrazione DHCP | Registra hostname DHCP | Registra hostname DHCP |
| Caso d'uso | Reti aziendali, massima sicurezza | Reti semplici, SOHO |
Non usare entrambi contemporaneamente. IMPORTANTE: DNS Resolver e DNS Forwarder NON possono essere attivi insieme - sono servizi alternativi.
Abilitare entrambi causa conflitti sulla porta 53 e problemi di risoluzione DNS.
Raccomandazione: Usa DNS Resolver (Unbound) - è più moderno, sicuro e performante.
Configurazione DNS resolver (Unbound)
Configuriamo il DNS Resolver step-by-step per ottenere risoluzione DNS sicura e performante.
- Verifica DNS Forwarder disabilitato
Vai in Services → DNS Forwarder
Assicurati che "Enable DNS Forwarder" sia DESELEZIONATO
Se attivo, disabilita e Save - Accedi a DNS Resolver
Vai in Services → DNS Resolver - Abilita DNS Resolver
Enable DNS Resolver - Configura opzioni base
Listen Port: 53 (default - NON modificare!) Network Interfaces: ☑ LAN (192.168.1.1) ☑ DMZ (se presente) ☑ Localhost (127.0.0.1) ☐ WAN (NEVER! Mai esporre DNS su WAN!) Outgoing Network Interfaces: ☑ WAN (pfSense usa WAN per query verso Internet) Strict Outgoing Network Interface Binding: ☐ Lascia deselezionato (default OK per maggior parte casi) System Domain Local Zone Type: transparent (default - permette risoluzione dominio locale)
- Configura DNSSEC
☑ Enable DNSSEC Support (ALTAMENTE CONSIGLIATO!) Cosa fa DNSSEC: - Valida crittograficamente le risposte DNS - Previene DNS poisoning/spoofing - Garantisce che la risposta provenga dal server autoritativo - Protegge da attacchi man-in-the-middle DNS Nota: Alcuni domini molto vecchi potrebbero non supportare DNSSEC e risultare irraggiungibili. È RARO, ma puoi disabilitare se problemi.
- Configura DNS over TLS (opzionale ma consigliato)
☑ Enable Forwarding Mode (Solo se vuoi usare DNS over TLS verso upstream) ☑ Use SSL/TLS for outgoing DNS Queries to Forwarding Servers DNS Query Forwarding: Aggiungi server DNS che supportano DoT: Server 1: IP: 1.1.1.1 Port: 853 Hostname: cloudflare-dns.com Server 2: IP: 8.8.8.8 Port: 853 Hostname: dns.google Vantaggi DNS over TLS: ✅ Query cifrate (ISP non vede cosa cerchi) ✅ Privacy migliorata ✅ Previene intercettazione query DNS Nota: Non obbligatorio - Unbound può lavorare senza DoT
- Registrazione hostname DHCP
☑ Register DHCP leases in the DNS Resolver (CONSIGLIATO!) ☑ Register DHCP static mappings in the DNS Resolver (CONSIGLIATO!) Effetto: I dispositivi LAN con hostname DHCP diventano risolvibili per nome: - ping laptop-mario → funziona! - ssh stampante-ufficio → funziona! - \\nas-server\share → funziona! Super comodo per accesso dispositivi interni!
- Opzioni avanzate (opzionali)
Scorri in basso per opzioni aggiuntive:- Prefetch Support: Pre-carica query popolari (migliora performance)
- Prefetch DNS Key Support: Pre-carica chiavi DNSSEC
- Harden DNSSEC data: Extra validazione (solo se problemi)
- Message Cache Size: 4-16 MB (default 4 OK per SOHO)
- Salva e applica
Scroll down → Save
DNS Resolver attivo e operativo.
Video: ▶ Guarda: DNS Forwarder/Resolver pfSense
Host overrides (DNS locale)
Gli Host Overrides permettono di creare record DNS custom per la tua rete interna. Estremamente utile per:
- Server interni: mail.azienda.local → 192.168.1.10
- Servizi locali: intranet.azienda.local → 192.168.1.20
- Split DNS: www.azienda.com → IP interno (non pubblico)
- Blocco domini: facebook.com → 127.0.0.1 (blocco DNS)
Creare host override
- Accedi a Host Overrides
Vai in Services → DNS Resolver
Scroll down a Host Overrides - Aggiungi override
Clicca Add - Esempio 1: Server Mail Interno
Host: mail Parent domain of host: azienda.local IP Address: 192.168.1.10 Description: Exchange Server Interno Risultato: mail.azienda.local → 192.168.1.10 Client configurato con "mail.azienda.local" come server mail raggiunge automaticamente il server interno!
Clicca Save
- Esempio 2: Split DNS (Sito Aziendale)
Host: www Parent domain: azienda.com IP Address: 10.0.10.5 (server DMZ interno) Description: Sito web aziendale - versione interna Scenario Split DNS: - Da Internet: www.azienda.com → 203.0.113.50 (IP pubblico) - Da LAN interna: www.azienda.com → 10.0.10.5 (server DMZ diretto) Vantaggi: ✅ Accesso diretto interno (no hairpin NAT) ✅ Più veloce ✅ Meno carico firewall
- Esempio 3: Blocco Dominio
Host: (lascia vuoto per wildcard) Parent domain: facebook.com IP Address: 127.0.0.1 Description: Blocco Facebook Risultato: facebook.com → 127.0.0.1 (localhost) www.facebook.com → 127.0.0.1 m.facebook.com → 127.0.0.1 Tutti i subdomain Facebook bloccati! Nota: Metodo semplice ma limitato. Per blocco avanzato usa pfBlockerNG (vedi Cap. 11)
Domain overrides (inoltro selettivo)
I Domain Overrides inoltrano query per domini specifici a server DNS alternativi. Utile per:
- Active Directory: Inoltra dominio AD a DC Windows
- Filiali remote: Inoltra dominio filiale a DNS locale filiale
- Partner/VPN: Inoltra dominio partner a loro DNS
Services → DNS Resolver → Domain Overrides → Add Domain: ad.azienda.local IP Address: 192.168.1.5 (Domain Controller Windows) Description: Active Directory DNS Risultato: Tutte le query per *.ad.azienda.local vengono inoltrate al Domain Controller invece di essere risolte da pfSense. Permette risoluzione corretta nomi AD, GPO, etc.
Test e verifica DNS
Dopo aver configurato DNS, è fondamentale testare che funzioni correttamente.

Test da pfSense
- Test integrato pfSense
Vai in Diagnostics → DNS Lookup - Esegui test
Hostname: www.google.com Resolution Type: A (IPv4 address) DNS Server: 127.0.0.1 (usa Resolver locale) Clicca Lookup Output atteso: www.google.com. 300 IN A 172.217.16.142 Verifica: ✅ Ricevi un IP valido ✅ Tempo risposta < 50ms (prima query) / < 5ms (cache) ✅ No errori
- Test host override
Se hai creato host override (es: mail.azienda.local):Hostname: mail.azienda.local Resolution Type: A Output atteso: mail.azienda.local. 3600 IN A 192.168.1.10 Verifica che ritorni l'IP configurato nell'override!
Test da client (Windows)
# Apri CMD o PowerShell # Verifica configurazione DNS ipconfig /all Output atteso: DNS Servers: 192.168.1.1 (pfSense) # Test risoluzione Google nslookup www.google.com Output atteso: Server: pfsense.azienda.local Address: 192.168.1.1 Non-authoritative answer: Name: www.google.com Address: 172.217.16.142 # Test risoluzione host override nslookup mail.azienda.local Output atteso: Server: pfsense.azienda.local Address: 192.168.1.1 Name: mail.azienda.local Address: 192.168.1.10 # Flush cache DNS locale (se modifiche non viste) ipconfig /flushdns
Test da client (Linux/macOS)
# Verifica configurazione DNS cat /etc/resolv.conf Output atteso: nameserver 192.168.1.1 # Test risoluzione con dig (più dettagliato) dig www.google.com Output atteso: ;; Query time: 2 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) www.google.com. 300 IN A 172.217.16.142 # Test veloce con nslookup nslookup mail.azienda.local # Flush cache DNS (macOS) sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder # Linux (varia per distro) sudo systemd-resolve --flush-caches # systemd sudo nscd -i hosts # nscd
Monitoraggio DNS
Log DNS
Per vedere query DNS in tempo reale (utile per debugging):
- Abilita logging avanzato
Services → DNS Resolver
Scroll down a Advanced Settings☑ Log Queries (Logga tutte le query DNS - ATTENZIONE: genera MOLTI log!) Log level: 1 (informativo) 0 = solo errori 1 = operazioni base 2 = dettagliato 3 = molto verboso 4-5 = debug estremo
Save
- Visualizza log
Vai in Status → System Logs → System → DNS Resolver - Analizza log
Jan 3 16:45:23 unbound[12345]: info: 192.168.1.100 www.google.com. A IN Jan 3 16:45:23 unbound[12345]: info: response for www.google.com. A IN Jan 3 16:45:24 unbound[12345]: info: 192.168.1.100 mail.azienda.local. A IN Interpretazione: - 192.168.1.100 = IP client che fa query - www.google.com = dominio richiesto - A = tipo query (Address record IPv4) - IN = Internet class Usa filtri per trovare: - Query da IP specifico - Query a dominio specifico - Errori (NXDOMAIN = dominio non esiste)
- Disabilita logging quando finito
IMPORTANTE: Log DNS generano MOLTISSIMI dati
Disabilita "Log Queries" dopo debugging per non riempire disco.
Statistiche cache
Per vedere statistiche cache DNS:
Diagnostics → Command Prompt Esegui comando: unbound-control stats_noreset Output interessante: total.num.queries=15234 total.num.cachehits=12456 total.num.cachemiss=2778 mem.cache.rrset=4194304 Calcolo hit rate: Hit rate = (cachehits / queries) * 100 = (12456 / 15234) * 100 = 81.7% Interpretazione: ✅ 81.7% query servite da cache (ottimo!) ✅ Solo 18.3% query escono verso Internet ✅ 4MB cache utilizzata
Sicurezza DNS
Prevenzione DNS Poisoning/Spoofing
- DNSSEC abilitato: Valida crittograficamente risposte
- DNS Resolver non esposto su WAN: Solo interfacce interne
- Firewall blocca DNS esterno dalla LAN: Forza uso DNS pfSense
- DNS over TLS: Query cifrate (privacy)
Forzare uso DNS pfSense (blocco DNS bypass)
Alcuni dispositivi/malware tentano di bypassare DNS locale usando DNS pubblici diretti (8.8.8.8, 1.1.1.1). Bloccalo con regole firewall.
- Crea alias DNS pubblici
Firewall → Aliases → IP → AddName: Public_DNS_Servers Type: Network(s) Networks: 8.8.8.8/32 | Google Primary 8.8.4.4/32 | Google Secondary 1.1.1.1/32 | Cloudflare Primary 1.0.0.1/32 | Cloudflare Secondary 9.9.9.9/32 | Quad9 208.67.222.222/32 | OpenDNS
- Crea regola blocco
Firewall → Rules → LAN → Add (in CIMA!)Action: Reject Interface: LAN Protocol: TCP/UDP Source: LAN net Destination: Single host or alias → Public_DNS_Servers Destination Port: DNS (53) Description: Blocca DNS pubblici - forza uso pfSense DNS ☑ Log packets Risultato: Client che tentano di usare 8.8.8.8 o altri DNS vengono bloccati e devono usare 192.168.1.1 (pfSense)
- Eccezione per pfSense stesso
SOPRA la regola di blocco, aggiungi:Action: Pass Interface: LAN Protocol: TCP/UDP Source: This Firewall Destination: any Destination Port: DNS (53) Description: Permetti pfSense stesso a usare DNS esterni Importante: Questa regola DEVE essere SOPRA il blocco! Altrimenti pfSense stesso non può risolvere domini.
DNS filtering (parental control / malware block)
Puoi usare DNS pubblici con filtering integrato:
| Servizio | IP Server | Caratteristiche |
|---|---|---|
| Cloudflare for Families | 1.1.1.3 (malware) 1.1.1.2 (malware+adult) | Blocco malware, phishing, adult content |
| Quad9 | 9.9.9.9 | Blocco malware, threat intelligence |
| OpenDNS FamilyShield | 208.67.222.123 208.67.220.123 | Parental control preconfigurato |
| CleanBrowsing | 185.228.168.168 185.228.169.168 | Filtering adult, sicurezza |
Per usarli: Services → DNS Resolver → Enable Forwarding Mode → Aggiungi IP sopra come server upstream
Risoluzione dei problemi DNS
Problema: navigazione non funziona
- Verifica DNS Resolver attivo
Services → DNS Resolver
"Enable DNS Resolver" deve essere selezionato - Test risoluzione da pfSense
Diagnostics → DNS Lookup → www.google.com
Se funziona = problema client
Se non funziona = problema pfSense - Verifica client usa DNS pfSense
Windows: ipconfig /all → DNS Servers: 192.168.1.1 Linux: cat /etc/resolv.conf → nameserver 192.168.1.1 Se diverso: - Rinnova DHCP: ipconfig /renew (Windows) - Verifica configurazione DHCP server pfSense
- Verifica connettività WAN
Diagnostics → Ping → 8.8.8.8
Se fallisce = problema connessione Internet (non DNS!)
Problema: alcuni domini non risolvono
Sintomo: La maggior parte siti funziona, ma alcuni domini specifici no Causa probabile: DNSSEC validation failure Test: 1. Services → DNS Resolver 2. ☐ Deseleziona "Enable DNSSEC Support" temporaneamente 3. Save 4. Riprova dominio problematico Se funziona = problema DNSSEC del dominio (non tuo!) - Contatta proprietario dominio - Oppure lascia DNSSEC disabilitato (meno sicuro) Se non funziona = problema diverso
Problema: DNS lentissimo
Verifica cache hit rate: Diagnostics → Command Prompt → unbound-control stats Se cache hit rate < 50%: ✅ Aumenta cache size (Services → DNS Resolver → Advanced) Message Cache Size: 16-32 MB Se query tempo > 100ms consistentemente: ✅ Abilita prefetch ✅ Verifica connessione WAN stabile ✅ Considera DNS over TLS a server più vicini geograficamente
Buone pratiche DNS
- Usa DNS Resolver, non Forwarder - Più sicuro e moderno
- Abilita DNSSEC - Fondamentale per sicurezza
- Registra hostname DHCP - Comodo per accesso dispositivi
- Forza uso DNS pfSense - Blocca bypass con regole firewall
- Non esporre DNS su WAN - Solo interfacce interne.
- Usa host overrides - Per server interni e split DNS
- Monitoring periodico - Verifica cache hit rate mensile
- DNS filtering opzionale - Cloudflare/Quad9 per famiglie
Esercizi
Esercizio 1 – Chi risponde?. Da un client esegui nslookup www.google.it e poi nslookup www.google.it 1.1.1.1. Quale server risponde nei due casi? Che differenza noti?
Esercizio 2 – Un nome per il NAS. Crea un Host Override nas.lab.local → 192.168.1.20 e verifica dal client con nslookup e ping.
Esercizio 3 – Resolver o Forwarder?. Scrivi tre differenze tra DNS Resolver (Unbound) e DNS Forwarder (dnsmasq). Quale sceglieresti per la rete della scuola, e perché?
Esercizio 4 – Niente DNS esterni. Crea le regole che permettono la porta 53 solo verso pfSense e la bloccano verso qualsiasi altro server. Prova con nslookup example.com 8.8.8.8: deve fallire. Questo basta a impedire ogni bypass? Pensa al DNS over HTTPS.