What happens
In un file di zona, un nome non terminato da punto viene completato con il nome della zona stessa. Scrivendo in zona esempio.it la riga "www IN CNAME www.altrodominio.net" (senza il punto finale) il record diventa www.altrodominio.net.esempio.it, che non esiste. Il risultato e' NXDOMAIN su www.esempio.it.
Perche' fa perdere tempo: non c'e' nessun errore da nessuna parte. named-checkzone risponde OK, perche' sintatticamente il record e' valido; la zona carica; il serial si incrementa; rndc reload non protesta. L'unico sintomo e' che il nome non risolve, e chi indaga tende a cercare nella propagazione, nella cache dei resolver o nel firewall, cioe' ovunque tranne che nella riga scritta poco prima. Nel mio caso il sito e' rimasto irraggiungibile per ore, mentre il dominio senza www continuava a funzionare, il che rendeva ancora meno sospetta la zona.
Aggravante: chi lo scopre e aggiunge il punto puo' cadere in un secondo problema, perche' il target puo' essere a sua volta sbagliato (nel mio caso puntava a 127.0.0.1). Un CNAME verso un nome fuori zona merita un controllo anche sul valore, non solo sulla sintassi.
Proposta: named-checkzone dovrebbe segnalare come warning i CNAME e gli altri record il cui target, dopo l'espansione, cade dentro la zona stessa pur assomigliando a un nome esterno (contiene un punto e un TLD noto). E' un caso quasi sempre involontario, ed e' distinguibile automaticamente.
How to reproduce it
Nel file di zona di esempio.it aggiungere:
www IN CNAME www.altrodominio.net (senza punto finale)
Incrementare il serial, poi:
named-checkzone esempio.it /etc/bind/db.esempio.it -> OK
rndc reload esempio.it -> nessun errore
dig +short www.esempio.it @localhost -> www.altrodominio.net.esempio.it. e NXDOMAIN
Expected
Un warning da named-checkzone su un target che, espanso, finisce dentro la zona pur sembrando un nome pienamente qualificato.
Actual
named-checkzone risponde OK, la zona carica senza errori, e l'unico sintomo e' NXDOMAIN in produzione.