Creare un DNS server con Bind 9
Quando digitate un indirizzo sul vostro browser: per esempio “www.google.it”, la prima cosa che il browser fa è chiedere a qualcuno a che indirizzo IP corrisponde quel “google.it”… Questo qualcuno è proprio il server DNS di turno.
Un comando comodo per fare i vostri esperimenti con la risoluzione dei nomi è nslookup:
Server: 127.0.0.1 Address: 127.0.0.1#53
Non-authoritative answer: www.google.it canonical name = www.google.com. www.google.com canonical name = www.google.akadns.net. Name: www.google.akadns.net Address: 66.102.11.99 Name: www.google.akadns.net Address: 66.102.11.104
Vediamo un esempio di miglioramento di prestazioni: Faccio prima una richiesta per risolvere un indirizzo e ne misuro i tempi:
Server: 127.0.0.1 Address: 127.0.0.1#53
Non-authoritative answer: Name: www.isc.org Address: 204.152.184.88
real 0m0.361s user 0m0.004s sys 0m0.002s
Server: 127.0.0.1 Address: 127.0.0.1#53
Non-authoritative answer: Name: www.isc.org Address: 204.152.184.88
real 0m0.008s user 0m0.002s sys 0m0.002s
Installare bind9
Con Debian è semplicissimo: apt-get install bind9 bind9-host dnsutils. Usiamo bind9 che è la versione successiva al pacchetto bind (che sarebbe bind8)… A me mi piace piu’ maggiormente! Tutto qui!Configurazione
Ci sono tre modi di funzionamento di un dnsserver ( “che funsia o che no?”) nel caso in cui un indirizzo non sia presente nel database interno (nel caso in cui il DNS non sia autoritativo per quella zona):- ROOT ONLY: Viene fatta richiesta ai root server il cui indirizzo è noto e da qui si scende fino a trovare l’IP corretto. I root server sono i DNS autoritativi per le zone come .it, .com, .net e così via
- FORWARD ONLY: La richiesta viene passata al DNS server del nostro provider (o quello che abbiamo impostato), se lui non ha risposta restituiamo un errore.
- FORWARD FIRST: Prima la richiesta viene passata al DNS del nostro provider, se questo non ha risposta vengono interrogati i root server.
Impostare il dns come forward first
Andiamo in /etc/bind (tutti i settaggi sono qui) e cambiamo il file named.conf.options così:forward first; forwarders { 195.210.91.100; #DNS server per Libero 193.70.192.100; }; auth-nxdomain no; # conform to RFC1035 };
Questo è già sufficente per avere un server cacheonly. Il passaggio successivo renderà il dominio autoritativo per la rete locale.
Impostare il DNS server come autoritativo per la rete locale
Questo passaggio renderà un po’ piu’ sapiente il nostro server DNS che sarà in grado di risolvere un po’ di indirizzi nella rete locale senza dover ricorrere al file /etc/hosts di ogni computer. Potrebbe essere utile per esempio per creare un dominio di secondo livello “pippo.localhost” che vada a prendere un sito diverso nel nostro server apache… quale che sia l’utilizzo, vediamo come impostarlo. Facciamo un esempio: con un computer che si chiama sito.local (e questo è il suo nome completo o FQDN) c’è chi preferisce mantenere nomi completi composti da tre parti, come sito.local.net, fate come ritenete opportuno. Voglio creare una entry che permetta di risolvere subsito.sito.local allo stesso indirizzo (nel mio caso c’è sempre un Apache che lo aspetta al varco). Per farlo il nostro server DNS sarà autoritativo per la rete local, vediamo come impostarlo:Creiamo una nuova zona
Modifichiamo ancora il file /etc/bind/named.conf e aggiungiamo la zona “local” per la risoluzione degli IP:Creare il file di zona
Creiamo ora il database per la risoluzione da nome a IP, in /etc/bind/db.localnet, e al suo interno scriviamo questi comandi (i commenti sono preceduti da “puntoevirgola” e non da “//”):\@. IN SOA sito.local. hostmaster.sito.local. ( 2005030801; Serial 3h; Refresh 1h; Retry 1w; Expire 1h) ;Negative cache
;dns server IN NS sito.local.
;database risolutivo sito.local. IN A 127.0.0.1 router.local. IN A 192.168.1.1
;alias subsito.sito.local. IN CNAME sito.local.
Cosa abbiamo fatto? Innanzi tutto abbia impostato il “Time to live”, la vita delle nostre richieste, per quanto tempo vengono considerate attendibili, 3 ore. Nella riga 3, abbiamo detto che sito.local è l’autorità del “dominio” local… La @ al posto di “local.” dice a bind di prendere il nome della zona da named.conf. Facciamo attenzione che tutti i nomi finiscono con un punto “.” per indicare che sono nomi completi, se specifichiamo sito.local (senza il punto finale) verrà inteso sito.local.local (con anche il nome della zona). hostmaster.sito.local è l’indirizzo email dell’amministratore che va inteso come hostmaster@sito.local (la @ è appunto un carattere riservato in bind). Piu’ sotto, specifichiamo uno o piu’ DNS server con la parola chiave “NS” (name server). Ogni entry del database dei nomi viene specificata con la direttiva “A”, mentre gli alias (pseudonimi) con la direttiva CNAME. In questo caso abbiamo specificato subsito.sito.local come pseudonimo di sito.local, e abbiamo specificato l’IP di sito.local e di router.local.