Come Creare un DNS Primario con CentOS

Ogni dominio in produzione ha almeno due server DNS, un primario (ns1) e un secondario (ns2). Questo per assicurare un minimo di alta affidabilità (ha) in maniera tale che se uno dei due dovesse smettere di funzionare c’è sempre a disposizione l’altro. Meccanismi più sofisticati mettono in gioco bilanciatori di carico hardware, firewall e clusterizzazioni varie.

Tutte le entry DNS di un particolare dominio sono inserite sempre sul nodo primario. Il secondario si sincronizza con il primario in maniera automatica, basandosi su un contatore.

Questo tutorial descriverà il modo per creare un DNS PRIMARIO su CentOS (ma in linea di massima vale per tutte le distribuzioni Linux). Bisogna però sottolineare il fatto che questo tutorial spiega come si crea un DNS Pubblico, ciò vuol dire che risponderà alle query richieste da tutti gli indirizzi IP. In futuro verrà spiegato il modo per limitare l’accesso al suddetto server.

Prima di cominciare, vorrei specificare il fatto che un DNS volendo può essere configurato in un ambiente chroot.

OBIETTIVO
Configureremo un server DNS in un ambiente di test per il dominio esempio.tst. In questo dominio sono presenti i seguenti server:
Server A 172.16.1.1 Mail mail.esempio.tst
Server B 172.16.1.2 Web, FTP www.esempio.tst ftp.esempio.tst
Server C 172.16.1.3 DNS Primario ns1.esempio.tst
Configureremo un DNS primario e aggiungeremo il dominio e i record DNS come mostrati in tabella.

Configurare gli hostname
Tutti gli hostname dovrebbero essere definiti come l’FQDN prescelto. Questo può essere fatto tramite il seguente metodo:

# vim /etc/sysconfig/network

HOSTNAME=ns1.esempio.tst

I cambiamenti effettuati qui sopra vengono messi in pratica durante il boot del sistema. Per evitare un riavvio, basta eseguire il seguente comando:

# hostname ns1.esempio.tst
e verificare l’avvenuto cambio:

# hostname
Prima di poter procedere, assicuriamoci che l’hostname di tutti e tre i server sia corretto.

Installare i pacchetti
Useremo bind per il DNS, che è facilmente installabile utilizzando yum

Per installare il DNS senza chroot:

# yum install bind
Per installarlo con chroot:

# yum install bind bind-chroot
Preparare il file di configurazione
Come menzionato prima, bind può essere installato senza chroot. Il path cambierà leggermente a seconda della versione installata:

Path del file di configurazione Path del file di zona
Senza chroot /etc/ /var/named/
Con chroot /var/named/chroot/etc/ /var/named/chroot/var/named/
Il file named.conf di default può essere utilizzato. Comunque sia, noi useremo un altro file di configurazione per semplicità:

Senza chroot
# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf
Con chroot:
# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf

Ora, il file di configurazione viene modificato:
Senza chroot:
# vim /etc/named.conf
Con chroot:
# vim /var/named/chroot/etc/named.conf

Le seguenti righe vengono aggiunte/modificate
options {
## path al file di zona ##
directory “/var/named”;
## elimina la possibilità di fare query ricorsive ##
recursion no;
};
## dichiarazione della zona per esempio.tst ##
zone “esempio.tst” IN {
type master;
file “esempio-fz”; ## nome del file per la zona menzionata posizionato in /var/named ##
allow-update { none; };
};
## dichiarazione della zona di reverse per la rete 172.16.1.0 ##
zone “1.16.172.in-addr.arpa” IN {
type master;
file “rz-172-16-1”; ## filename per la zona di reverse posizionato in /var/named ##
allow-update { none; };
};

Preparare i file di zona
I file di zona di default sono posizionati in /var/named o /var/named/chroot/var/named (per chroot). Se non dovessero essere disponibili, è possibile copiarli dalla directory /usr/share/doc/bind.

Senza chroot
# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/
Con chroot
# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named

Ok. Ora i file di zona di default sono pronti. Possiamo creare i file per esempio.tst e la rete 172.16.1.0. Mentre creiamo i file di zona, dobbiamo tenere in mente:

Il carattere ‘@’ vuol dire NULL nei file di zona
Ogni FQDN finisce con un punto ‘.’ Ad esempio: mail.esempio.tst. Senza il punto potresti avere qualche problema

Forward Zone
La zona di forward contiene il mapping dai nomi agli indirizzi IP. Per i domini pubblici, il DNS del domain hosting provider storicizza il file della zona di forward.
Senza chroot
# vim /var/named/esempio-fz
Con chroot
# vim /var/named/chroot/var/named/esempio-fz

$TTL 1D
@ IN SOA ns1.esempio.tst. lantuin.esempio.tst. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.esempio.tst.
IN A 172.16.1.3
mail IN A 172.16.1.1
IN MX 10 mail.esempio.tst.
www IN A 172.16.1.2
ns1 IN A 172.16.1.3
ftp IN CNAME www.esempio.tst.

Spiegazione: all’interno del file di zona, SOA significa l’inizio dell’autoritativo. Questo è l’FQDN del name server autoritativo. L’FQDN è seguito da un indirizzo e-mail dell’amministratore del server. Siccome non è possibile utilizzare il carattere ‘@’ in lantuin@esempio.tst, noi riscriviamo l’indirizzo di posta come lantuin.esempio.tst.

NS: Name Server
A: A record or Address Record è un indirizzo IP
MX: Mail Exchanger record. Qui noi stiamo utilizzando un solo MX con priorità 10. In caso di MX multipli, possiamo utilizzare diverse priorità. Il numero più basso vince. Per esempio, MX 0 è più prioritario di MX 1.
CNAME: Canonical Name. Se esistono servizi multipli che sono ospitati su un singolo server, è possibile che diversi nomi vengano risolti con lo stesso indirizzo IP. CNAME indica qual è il nome, con il record A, da far puntare per la corretta risoluzione.

Zona di REVERSE
La zona di reverse contiene il mapping contrario, cioè dall’indirizzo IP al nome. Qui creiamo la zona di reverse per la rete 172.16.1.0. Nei domini di produzione, il server DNS del proprietario del blocco IP detiene il file della zona di reverse.
Senza chroot
# vim /var/named/rz-172-16-1
Con chroot
# vim /var/named/chroot/var/named/rz-172-16-1

$TTL 1D
@ IN SOA ns1.esempio.tst. lantuin.esempio.tst. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.esempio.tst.
1 IN PTR mail.esempio.tst.
2 IN PTR www.esempio.tst.
3 IN PTR ns1.esempio.tst.

Spiegazione: Molti parametri utilizzati nella zona di reverse sono identici a quelli della zona di forward, ad eccezione del seguente:
PTR: PTR o Pointer Record punta a un FQDN

Finalizzazione
Ora che i file di zona sono pronti, dobbiamo modificare i permessi dei file di zona.
Senza chroot
# chgrp named /var/named/*
Con chroot
# chgrp named /var/named/chroot/var/named/*

Ora configuriamo l’indirizzo IP del server DNS.
# vim /etc/resolv.conf

nameserver 172.16.1.3

Finalmente, possiamo avviare il servizio DNS ed assicurarci che parta al riavvio del server.
# service named restart
# chkconfig named on

Mentre il server si avvia, è sempre meglio controllare i log in /var/log/messages in quanto contiene informazioni utili su ciò che sta accadendo dietro le quinte. Se non ci sono errori, possiamo testare il server DNS.