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 !