Come configurare dns server master-slave con bind

Condividi:

In questo articolo vedremo come configurare una coppia di server dns in configurazione master-slave con bind su debian 9

Nell’esempio utilizzeremo come master un server con nome ns1.intranet ed indirizzo ip 10.0.0.1, come slave un server con nome ns2.intranet. ed indirizzo 10.0.0.2, una zona denominata intranet. che risolve i nomi della rete interna 10.0.0.0 ed una denominata 0.0.10.in-addr.arpa che esegue la risoluzione inversa. Utilizzeremo una terza macchina per interrogare i due dns che risponderà al nome host.intranet. con indirizzo 10.0.0.3

I trasferimenti di zona e l’inserimento di resource record nel server master verranno autenticati tramite chiavi tsig

Su entrambi i nodi inseriamo localhost come resolver principale

Nell’host di test

Chiavi di autenticazione

Sul nodo master utilizziamo tsig-keygen per creare due diverse chiavi tsig

La prima verrà installata solo nel dns master e ci servirà far autenticare nsupdate con cui amministreremo la zona intranet. inserendo e cancellando i resource record

La seconda verrà installata su entrambi i server e servirà per autenticare i trasferimenti di zona in modo da impedire che chiunque possa inserire  record nei server slave fingendo di essere il master

Per semplicità copiamo la chiave sul dns slave via ssh, ma ogni altro metodo equivalente va comunque bene

Configurazione Master

Per prima cosa creiamo il file zones.intranet che conterrà le dichiarazione della zona intranet. de della zona 0.0.10.in-addr.arpa. Con le due include inseriamo nella configurazione di bind le due chiavi che abbiamo creato prima. Nelle due zone dichiariamo che sono di tipo master e identifichiamo qual’è il loro file di zona contenuto in /dev/cache/bind. Con allow-update dichiariamo qual’è la chiave con cui autorizziamo gli aggiornamenti della zona master ( intranet-admin.key ), con allow-transfer quali sono gli indirizzi ip che possono richiedere il trasferimento di zona ( il o i server slave ) e con quale chiave di autenticazione ( intranet.key ). Infine con also-notify, diciamo a quali server comunicare che c’è stato un aggiornamento nella zona, in modo che i server slave si allineino con il master senza attendere la scadenza del time to live dichiarato nel record SOA

Includiamo il file zones.internet appena creato nel config file di bind named.conf.local ( notare cat >> e non cat > )

Infine i due file contenuti in /var/cache/bind con i resource record delle zone. Prima la definizione di intranet.

E poi la definizione di 0.0.10.in-addr.arpa

 Configurazione Slave

La dichiarazione delle due zone nel dns slave è molto simile. Abbiamo una include con cui inseriamo in bind la stessa chiave intranet.key presente sul master con cui autorizziamo i trasferimenti di zona. Il type qui sarà slave, dobbiamo dire chi è il dns master, quale indirizzo ip è autorizzato ad inviare i messaggi NOTIFY ( il master )

Aggiungiamo il file zones.intranet nella configurazione di bind

Nel nodo slave non è necessario creare i file in /var/cache/bind perchè sarà bind stesso a crearli chiedendoli al master. I file che verranno creati non saranno nemmeno leggibili con un editor di testo come invece avviene con gli omologhi sul master

Avvio

Verifica trasferimento di zona

Dopo il riavvio dei due servizi, possiamo già leggere nei log di sistema che le due zone sono state correttamente trasferite

Nello slave vediamo qualcosa del genere

E sul master

Possiamo quindi interrogare i due dns con dig

Inserimento host tramite nsupdate

Abbiamo già creato la chiave tsig, quindi non dobbiamo fare altro che inserire in un file i comandi da far eseguire a nsupdate. Notare che poichè dobbiamo aggiornare due zone diverse ( intranet. e 0.0.10.in-addr.arpa ) non possiamo inviare i comandi tutti insieme altrimenti bind non farà niente, dobbiamo inviare prima i comandi relativi ad una zona e poi all’altra, questo spiega la presenza delle due send

Inviamo le modifiche di zona

Come possiamo vedere dai log, il master ha aggiornato la zona, ha inviato la notifica allo slave il quale ha iniziato il trasferimento dal master

Interroghiamo i due dns

Come possiamo verificare, utilizzando solo una volta nsupdate abbiamo inserito host su entrambe le zone sia sul master che sullo slave ( ma gli slave potrebbero essere anche più di uno )