Il mondo dei server DNS è sicuramente dominato da bind in ambito linux ma esistono altri prodotti interessanti soprattutto se la necessità non è quella di dare il servizio DNS su internet.
Trovo particolarmente interessante djbdns. Questo daemon è stato sviluppato da D.J. Bernstein, autore, tra l’altro, anche di qmail. La caratteristica più interessante di djbdns è quella di separare in tre daemon differenti tre funzionalità differenti generalmente unificate sotto un’unico daemon:
- caching DNS: dnscache
- authoriting delle zone: tinydns
- trasferimento di zone: axfrdns and axfr-get
Di questi il più utile secondo me è dnscache che, essendo un sistema estremamente leggero è ideale per essere istallato e ridurre il carico di lavoro di tutti quei server che hanno la necessità di gestire un elevato numero di connessioni che giungono da svariati IP.
Djbdns richiede due software: daemontools e ucspi-tcp. Questi li istalliamo da pacchetto.
aptitude install daemontools aptitude install ucspi-tcp
djbdns non è però presente sulla distribuzione debian. Scarichiamo quindi i sorgenti. La compilazione richiede i pacchetti make, gcc
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz tar -zxvf djbdns-1.05.tar.gz cd djbdns-1.05 echo gcc -O2 -include /usr/include/errno.h > conf-cc make make setup check
L’autore richiede poi di segnalare l’avvenuta istallazione con
( echo 'First M. Last'; cat `cat SYSDEPS` ) \ | mail djb-sysdeps@cr.yp.to
Passiamo ora alla configurazione del servizio. Come sempre non è il caos di di far girare dei daemon come root; aggiungiamo quindi due utenti al sistema inserendo nel file */etc/passwd*
dnscache:x:999:999::/dev/null:/usr/sbin/nologin dnslog:x:998:999::/dev/null:/usr/sbin/nologin
e al file /etc/group
dnscache:x:999:
Prepariamo la configurazione di base
dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1
Con questo comando abbiamo generato la configurazione in /etc/dnscache specificando che l’utente che dovrà eseguire il daemon sarà dnscache, che i log saranno gestiti dall’utente dnslog e che il daemone sarà in ascolto sull’IP 127.0.0.1.
La directory creata conterrà 5 sottodirectory: env, log, root, run e seed. In particolare env e root contengono le configurazioni vere e proprie e log i log. Vedremo qualche dettaglio in seguito.
Occupiamoci ora dell’avvio del sistema. Vogliamo sfrutatre i daemontools e per farlo dovremo far si che svscanboot venga avviato all’avvio del sistema attraverso i meccanismi della distribuzione che stiamo utilizzando. Per le finalità di questo tutorial ci accontentiamo di lanciarlo a mano:
mkdir /etc/service/ cd /tmp/ nohup svcscanboot &
Il sistema dei daemontools si aspetta una directory in /etc/service per ogni servizio da gestire e monitorare. Aggiungiamo quindi la nostra cache dns
ln -s /etc/dnscache /etc/service/dnscache
Dopo qualche secondo il daemon sarà avviato
svstat /etc/service/dnscache/
ci restituirà il tempo di esecuzione e il PID del demone.
Interessanti un paio di *ps*
root@debian:/tmp# ps aux|grep sv root 7605 0.0 0.0 4180 580 pts/0 S 22:24 0:00 /bin/sh /usr/bin/svscanboot root 7607 0.0 0.0 4120 460 pts/0 S 22:24 0:00 svscan /etc/service root@debian:/tmp# ps aux|grep dns root 7609 0.0 0.0 3948 316 pts/0 S 22:24 0:00 supervise dnscache dnslog 7611 0.0 0.0 4092 468 pts/0 S 22:24 0:00 multilog t ./main dnscache 7612 0.0 0.1 5484 1492 pts/0 S 22:24 0:00 /usr/local/bin/dnscache
che mostrano tutti i processi coinvolti. Notare che la gestione dei log è fatta attraverso un daemon separato e infatti si troverà all’interno della directory log in /etc/dnscache una directory *service* esattamente come in */etc/dnscache*.
Per fermare e riavviare dnscahe si può ricorrere a
svc -d /etc/service/dnscache svc -u /etc/service/dnscache
o anche a un più brutale kill del daemon dnscache: ci penseranno i daemontools a riavviarlo.
Per meglio gestire le zone interne o se si vuole sfruttare qualche dns interno si consideri che in /etc/dnscache/root/servers si possono aggiungere file, denominati come un dominio e contenenti una lista di DNS interrogabili per quel dominio. Ad esempio con:
cd /etc/dnscache/root/servers echo 213.251.188.150 > linuxandcompany.it echo 213.251.128.150 > linuxandcompany.it svc -d /etc/service/dnscache svc -u /etc/service/dnscache
posso dire alla cache dove di preferenza deve rivolgersi per le risoluzioni del dominio di questo sito.
Questa directory contiene di base un file denominato @ in cui è contenuta la lista dei root dns di internet.