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:
| Nome | TTL | Tipo | Valore |
@ | 3600 | A | 198.51.100.10 |
www | 3600 | CNAME | example.com. |
@ | 3600 | MX | 10 mail.example.com. |
@ | 3600 | TXT | "v=spf1 mx -all" |
missus._domainkey | 3600 | TXT | "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.