Guida utente

DNS autoritativo senza scrivere zone file a mano. Da una Debian fresca alla tua prima zona firmata, con blocklist RPZ attive, in circa dieci minuti.

1. Prerequisiti

  • Una macchina Debian 12 (bookworm) o Debian 13 (trixie) pulita: VPS, Pi 4/5 con SSD, oppure un container LXC su Proxmox. nomina + BIND sono leggeri — 512 MB di RAM bastano per un piccolo homelab; 2 GB se carichi feed RPZ grossi.
  • IPv4 pubblico (e idealmente IPv6) raggiungibile su 53/udp e 53/tcp. Tutto il senso di un DNS autoritativo è essere raggiungibile da qualsiasi resolver su Internet.
  • Un dominio che controlli davvero — cioè puoi cambiare i record NS al registrar e farli puntare alla macchina dove stai installando. Senza questo, niente di quello che servi da nomina sarà visibile al mondo.
Un nameserver vs due: la spec DNS vuole almeno due record NS per zona. Per un homelab con un solo server puoi registrarli entrambi sullo stesso IP (funziona, un po' fragile) — oppure abbinare nomina a un secondario gratuito tipo BuddyNS / Hurricane Electric via la feature delle zone slave (qui sotto).

2. Installa nomina

curl -fsSL https://apt.netforge.it/free/key.gpg \
    | sudo gpg --dearmor -o /usr/share/keyrings/netforge.gpg
echo "deb [signed-by=/usr/share/keyrings/netforge.gpg] https://apt.netforge.it/free stable main" \
    | sudo tee /etc/apt/sources.list.d/netforge.list
sudo apt update
sudo apt install nomina

sudo nomina admin create iltuonome
sudo systemctl start nomina

L'install tira dentro BIND9 e dnsutils. Il postinst crea /srv/nomina/ (zone, feed RPZ, chiavi DNSSEC, backup, admins.json), genera un session secret a 256 bit, e cabla /etc/bind/named.conf per includere /srv/nomina/named.conf.local — così non modifichi mai BIND a mano.

3. Primo login

nomina si lega a 127.0.0.1:8053 — il pannello è privato. SSH-tunnel per raggiungerlo la prima volta:

ssh -L 8053:127.0.0.1:8053 root@tuo-server
# poi apri http://127.0.0.1:8053/ nel browser

Login, attiva 2FA su /account. Il pannello è praticamente vuoto finché non aggiungi una zona — la prima volta è di proposito così.

4. Prima zona master

Vai su /zones, click su + Nuova zona. Scegli:

  • Nome: example.com (senza punto finale)
  • Tipo: master — sei tu l'autorità della zona
  • Email SOA: hostmaster@example.com (convenzione RFC; ti ci possono scrivere quando c'è un problema DNS)
  • NS primario: ns1.example.com. (col punto finale — è un FQDN). Questo è il nome che i client vedono nel record SOA.

Al salvataggio, nomina scrive /srv/nomina/zones/example.com.db con un SOA fresco + un singolo record NS all'apex, registra la zona in BIND via named.conf.local, lancia named-checkconf + rndc reconfig.

Al registrar: cambia gli NS di example.com per puntare all'IP della macchina (e a eventuali secondari che hai impostato). Permetti fino a 48 h perché il TTL della zona padre scada e il mondo veda la nuova autorità.

5. Aggiungi record

Nella pagina della zona, click su + Aggiungi record. Ogni record ha quattro campi:

NomeTTLTipoValore
@3600A198.51.100.10
www3600CNAMEexample.com.
@3600MX10 mail.example.com.
@3600TXT"v=spf1 mx -all"
missus._domainkey3600TXT"v=DKIM1; k=rsa; p=…"

Usa @ per l'apex (il nome della zona stessa). I punti finali contano sui valori che sono hostname — senza, BIND appende il nome della zona. nomina lancia named-checkzone dopo ogni save e fa rollback automatico se il risultato non parsifica, quindi non puoi rompere una zona live con un typo.

Dalla CLI: nomina zones record add example.com www A 198.51.100.10. Stessa validazione, stesso auto-rollback, stesso bump del serial SOA.

6. DNSSEC

Nella pagina della zona, click DNSSEC → Abilita. nomina attiva KASP (il key/signing manager moderno di BIND) per la zona — BIND genera KSK + ZSK, firma la zona, e ruota la ZSK ogni trimestre senza il tuo intervento.

La tab DNSSEC mostra i record DS che devi incollare al registrar per chiudere la chain of trust. Sono fatti così:

example.com.  IN  DS  12345 13 2  ABCD1234EF…

Aggiungili al registrar, dai un'ora o due, poi verifica su dnsviz.net o DNSSEC Analyzer. Una volta verde, la tua zona è firmata DNSSEC end-to-end.

Le chiavi DNSSEC sono stato operatore critico. Vivono in /srv/nomina/dnssec/<zona>/ con mode 0700, possedute da root. Sono incluse in nomina backup. Le perdi e non puoi più firmare la zona — devi disabilitare DNSSEC al registrar (rimozione DS) e ricominciare con chiavi nuove.

7. Blocklist RPZ

RPZ (Response Policy Zones) lascia BIND mentire ai client su nomi specifici — restituire NXDOMAIN per domini noti come cattivi a prescindere da quello che dicono i loro authoritative veri. Se usi anche questo BIND come resolver ricorsivo per una LAN / rete domestica, RPZ diventa un blocco ad/threat in stile Pi-hole built-in nel server DNS.

Su /rpz, abilita i feed curati che vuoi. nomina ne shippa:

  • URLhaus (abuse.ch) — C2 malware attivi + phishing
  • Hagezi threat / pro tier — più ampio ads, tracker, malware
  • OISD big — community-curated ads / tracker / malware
  • Mining NetForge — pool cryptominer

Ogni feed mostra l'impatto RAM stimato, così non carichi 5 GB di feed su un Pi 4. Le tab whitelist e custom block ti lasciano sovrascrivere le decisioni dei feed per nome.

Il timer systemd nomina-rpz-update aggiorna i feed abilitati ogni 12 h (ogni feed ha la sua refresh policy nel catalogo). I feed sono scritti in /srv/nomina/rpz/<feed>.zone, poi BIND riceve rndc reload.

8. Zone slave e forward

Le zone slave replicano un master che vive altrove. Usale per: abbinare nomina a un secondario gratuito (BuddyNS, HE), tenere un server di backup, o ombreggiare la zona di un upstream. Aggiungi l'IP del master e (opzionale) una chiave TSIG; nomina configura BIND per fare AXFR/IXFR su NOTIFY.

Le zone forward non memorizzano dati — delegano la risoluzione di un sotto-tree a resolver upstream specifici. Utile per split-horizon (il tuo example.lan interno risolve a IP della LAN via un resolver privato, il resto del mondo a IP pubblici).

9. Verifica propagazione

Su /propagation, scrivi un nome e click su Verifica. nomina interroga il nome in parallelo su:

  • Cloudflare 1.1.1.1, 1.0.0.1, 1.1.1.2 (security)
  • Quad9 9.9.9.9, 149.112.112.112
  • Google 8.8.8.8, 8.8.4.4
  • AdGuard 94.140.14.14
  • Il tuo resolver di sistema

Puoi anche incollare un IP resolver arbitrario. La tabella dei risultati mostra risposta, TTL, e un indicatore verde/giallo/rosso se il resolver non concorda con la tua risposta autoritativa — utile per scoprire cache-poisoning o ritardi del registrar durante una migrazione.

10. Backup e migrazione

Tutto quello che nomina gestisce vive in /srv/nomina/ come file (no SQLite). Il backup è rsync.

sudo rsync -aHAX --delete /srv/nomina/ backup-host:/srv/nomina-snapshot/

# nuova macchina, dopo `apt install nomina`
sudo rsync -aHAX backup-host:/srv/nomina-snapshot/ /srv/nomina/
sudo nomina rehydrate

nomina rehydrate rigenera named.conf.local + response-policy.conf dai file di zona su disco e lancia rndc reconfig.

Per restore granulari la pagina /backup impacchetta un tarball con manifest completo. Il restore può colpire una sola zona, un solo feed RPZ, o l'intero tree.

11. Troubleshooting

Prima fermata:

sudo nomina check

Cammina su filesystem, install BIND, named-checkconf, admins.json, e riporta ogni passo ✓ / ! / ✗.

Log dei demoni:

sudo journalctl -u named   -n 100 --no-pager
sudo journalctl -u nomina  -n 100 --no-pager

Sonde "la zona è servita?":

# BIND locale
dig @127.0.0.1 example.com SOA
dig @127.0.0.1 example.com DNSKEY +dnssec

# Risoluzione pubblica
dig @1.1.1.1 example.com SOA
dig @8.8.8.8 example.com DNSKEY +dnssec
Se devi rifare nomina da zero: apt purge nomina di proposito non cancella /srv/nomina/. Zone file e chiavi DNSSEC private sono stato operatore critico — anche le purge a cascata da rimozione di pacchetti non collegati le lasciano stare. Per cancellare davvero, rimuovi le directory a mano — sudo rm -rf /srv/nomina /etc/nomina — è un'azione esplicita e deliberata che devi prendere tu.