Vai al contenuto

Il DNS

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.

CaratteristicaDNS Resolver (Unbound)DNS Forwarder (dnsmasq)
MetodoRicorsivo (query dirette root)Forward (inoltra a DNS esterni)
DNSSECSupporto completoNon supportato
DNS over TLSSupportatoNon supportato
PrivacyMassima (no intermediari)Dipende da DNS upstream
PerformanceOttima con cacheBuona
ComplessitàMediaBassa (più semplice)
Integrazione DHCPRegistra hostname DHCPRegistra hostname DHCP
Caso d'usoReti aziendali, massima sicurezzaReti 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.

  1. Verifica DNS Forwarder disabilitato
    Vai in Services → DNS Forwarder
    Assicurati che "Enable DNS Forwarder" sia DESELEZIONATO
    Se attivo, disabilita e Save
  2. Accedi a DNS Resolver
    Vai in Services → DNS Resolver
  3. Abilita DNS Resolver
    Enable DNS Resolver
  4. 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)
  5. 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.
  6. 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
  7. 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!
  8. 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)
  9. 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

  1. Accedi a Host Overrides
    Vai in Services → DNS Resolver
    Scroll down a Host Overrides
  2. Aggiungi override
    Clicca Add
  3. 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

  4. 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
  5. 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 nslookup DNS
Output del comando nslookup per verificare risoluzione DNS tramite pfSense

Test da pfSense

  1. Test integrato pfSense
    Vai in Diagnostics → DNS Lookup
  2. 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
  3. 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):

  1. 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

  2. Visualizza log
    Vai in Status → System Logs → System → DNS Resolver
  3. 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)
  4. 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.

  1. Crea alias DNS pubblici
    Firewall → Aliases → IP → Add
    Name: 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
  2. 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)
  3. 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:

ServizioIP ServerCaratteristiche
Cloudflare for Families1.1.1.3 (malware)
1.1.1.2 (malware+adult)
Blocco malware, phishing, adult content
Quad99.9.9.9Blocco malware, threat intelligence
OpenDNS FamilyShield208.67.222.123
208.67.220.123
Parental control preconfigurato
CleanBrowsing185.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

  1. Verifica DNS Resolver attivo
    Services → DNS Resolver
    "Enable DNS Resolver" deve essere selezionato
  2. Test risoluzione da pfSense
    Diagnostics → DNS Lookup → www.google.com
    Se funziona = problema client
    Se non funziona = problema pfSense
  3. 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
  4. 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

⭐ Facile

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?

⭐⭐ Medio

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.

⭐⭐ Medio

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é?

⭐⭐⭐ Sfida

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.