Romain DUCHENE

Voyages · Tech · Innovation

Étiquette : djbdns

  • 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 !