Howto: Installer DJBDNS sur Debian Sarge

Dans cet article, nous allons faire une installation de DJBDNS alias tinydns (un serveur DNS très léger et très sécurisé) sur une distribution Debian Sarge.

Nous allons devoir installer avant tout 2 packages qui sont nécessaires : ucspi-tcp et daemontools.

Préparation de la Debian Sarge

Il faut tout d’abord ajouter dans /etc/apt/sources.list les non-free. En effet, DJBDNS ne possédant pas une licence « free » (au sens debian du terme), il ne se trouve pas dans la distribution de base. Il faut donc rajouter le terme « non-free » à la fin de la ligne principale de package des sources apt (à personnaliser suivant le mirroir que vous utilisez).

/etc/apt/sources.list

deb http://ftp.fr.debian.org/debian/ stable main non-free

Nous mettons maintenant à jour notre base APT, pour y mettre les sources de ucspi-tcp, Daemontools et DJBDNS. En effet, en raison de sa licence, il ne peut être livré que sous forme de code source, à nous donc de les compiler. Nous devrons être root durant cette installation.


su -
apt-get update

Installation de ucspi-tcp et Daemontools

Nous lançons maintenant le téléchargement, la compilation et la création des paquets .deb qui seront installés.


apt-get install -y ucspi-tcp-src patch libssl-dev
build-ucspi-tcp

Suivez les instructions dans chacune des compilations, les infos sont claires.

Nous allons maintenant télécharger et installer Daemontools. Plusieurs solutions sont possibles, nous choisirons d’utiliser des version pré-compilées depuis le site de Gerrit Pape.


wget http://smarden.org/pape/Debian/dists/woody/unofficial/binary-i386/daemontools_0.76-woody1_i386.deb
wget http://smarden.org/pape/Debian/dists/woody/unofficial/binary-i386/daemontools-run_0.76.3_all.deb
dpkg -i daemontools_0.76-woody1_i386.deb daemontools-run_0.76.3_all.deb

Par sécurité, on va copier des binaires aux bons endroits… :


cd /usr/bin
for i in envdir envuidgid fghack multilog pgrphack readproctitle \
setlock setuidgid softlimit supervise svc svok svscan svscanboot \
svstat tai64n tai64nlocal ; do ln -s /usr/local/bin/$i ; done

Installation de DJBDNS

Attaquons maintenant la véritable installation de djbdns ! djbdns est constitué de 3 sous-programmes majeurs :
- tinydns : le serveur DNS en lui-même. C’est lui qui écoutera sur votre IP publique le port UDP 53 et qui répondra aux requêtes DNS pour les domaines DNS que vous allez héberger.
- dnscache : c’est votre serveur DNS local, qui vous servira à répondre à votre serveur (uniquement) à toute les requêtes DNS possible (même celles que vous n’hébergez pas). C’est donc un serveur DNS qui sait aller interroger les autres serveurs DNS sur Internet et faire des requêtes récursives. il écoutera donc sur votre IP locale (ou localhost) sur le port UDP 53.
- axfrdns : C’est lui qui va servir à gérer les transfert de zone DNS, il écoutera donc sur votre IP publique sur le port TCP 53.

Nous allons devoir également compiler les sources.


apt-get install djbdns-installer
build-djbdns

Encore une fois, suivez les instructions pour la compilation, les infos sont claires.

Nous allons maintenant devoir configurer DJBDNS. Modifiez la ligne ci-dessous avec l’IP de votre serveur :


tinydns-conf tinydns dnslog /etc/tinydns 192.168.0.5

Nous pouvons maintenant faire prendre en compte tinydns par daemontools (puis on vérifie que tout est ok).


ln -s /etc/tinydns /service
svstat /service/tinydns

Nous allons maintenant installer dnscache (si vous en avez besoin)


dnscache-conf dnscache dnslog /etc/dnscache 127.0.0.1
ln -s /etc/dnscache /service
svstat /service/dnscache

Si vous désirez que votre serveur utilise ce serveur DNS, vous devez modifier votre fichier de conf locale DNS : /etc/resolv.conf


nameserver 127.0.0.1

Allez, pour terminer, nous allons installer axfrdns (pour les transferts de zone) :


axfrdns-conf axfrdns dnslog /etc/axfrdns /etc/tinydns 192.168.0.5

Pour terminer la configuration d’axfrdns, nous allons lui dire d’autoriser toutes les connexions entrantes, de répondre aux requêtes DNS, mais de refuser tout transfert de zones (nous verrons plus bas comment autoriser le transfert de zones vers d’autres serveurs). Puis on active le service.

echo ':allow,AXFR=""' > /etc/axfrdns/tcp
ln -s /etc/axfrdns /service
svstat /service/axfrdns

Si vous désirez autoriser le transfert de toutes vos zones vers un autre serveur 192.168.0.10 (par exemple).


echo '192.168.0.10:allow' >> /etc/axfrdns/tcp

Il faut valider les changements fais dans /etc/axfrdns/tcp Utilisez simplement les commandes suivantes, en root, pour valider les changements faits dans vos règles, Notez aussi qu’il est inutile de redémarrer axfrdns, le programme tcpserver prends automatiquement en compte les changements fais dans tcp.cdb :


cd /etc/axfrdns
make

Configuration de DJBDNS

Toute la configuration de djbdns (hors configuration de base comme l’IP d’écoute) se fait via le fichier /service/tinydns/root/data

Afin de pouvoir gérer sans pb toutes les extensions de domaine, nous allons configurer tinydns avec les serveurs root. Ajouter dans /service/tinydns/root/data


&:198.41.0.4:a.root-servers.net
&:128.9.0.107:b.root-servers.net
&:192.33.4.12:c.root-servers.net
&:128.8.10.90:d.root-servers.net
&:192.203.230.10:e.root-servers.net
&:192.5.5.241:f.root-servers.net
&:192.112.36.4:g.root-servers.net
&:128.63.2.53:h.root-servers.net
&:192.36.148.17:i.root-servers.net
&:192.58.128.30:j.root-servers.net
&:193.0.14.129:k.root-servers.net
&:198.32.64.12:l.root-servers.net
&:202.12.27.33:m.root-servers.net
.localhost
.1.0.0.127.in-addr.arpa
=localhost:127.0.0.1

Voici quelques exemples de configuration de domaine, mais vous trouverez l’intégralité des méthodes de configuration sur http://cr.yp.to/djbdns/tinydns-data.html Exemples d’ajout dans /service/tinydns/root/data


# SOA Test.com
Ztest.com:ns.wiroo.com:dns.wiroo.com:2005011401::86100:86100:

# Name Server
.test.com::ns4.wiroo.com:86100
.test.com::ns2.wiroo.com:86100

# MX Record
@test.com:192.168.58.128:mail.wiroo.com:10

# A Record
=www.test.com:192.168.58.128

Après chaque modification, il suffit d’aller dans le répertoire /service/djbdns/root et d’y faire un make. Aucun redémarrage du démon n’est nécessaire, le fichier texte /service/tinydns/root/data sera compilé en /service/tinydns/root/data.cdb


cd /etc/tinydns/root
make

djbdns inclut certains outils pour tracer les pb : tinydns-get A www.wiroo.com ns4.wiroo.com ou dnstrace any www.aol.com a.root-servers.net > AOL & dnstracesort < AOL | less

Dernière chose, regardons maintenant comme répliquer notre configuration dns sur un autre serveur (tinydns également). L’avantage avec tinydns, c’est qu’il suffit d’envoyer le fichier data compiler (/service/tinydns/root/data.cdb) vers le second serveur. Mieux, nous pouvons automatiser très facilement cela pour que cela se fasse automatiquement à chaque make ! Nous utiliserons le protocole SSH pour copier data.cdb (nous considèrerons que le serveur a une autorisation de connexion SSH au serveur cible via clé ssh automatisée)

Modifions donc le fichier /service/tinydns/root/Makefile


remote: data.cdb
scp data.cdb ns2.wiroo.com:/etc/tinydns/root/data.cdb.tmp
ssh ns2.wiroo.com mv /etc/tinydns/root/data.cdb.tmp /etc/tinydns/root/data.cdb
data.cdb: data
/usr/bin/tinydns-data

Et voila, amusez vous bien avec votre nouveau serveur DNS !