djbdns

Ayant eu à refaire le monde côté DNS en TP semaine dernière, nous avons utilisé djbdns. Ayant toujours été habitué à BIND, j’étais assez curieux de découvrir un autre programme gérant la mise en place d’un serveur DNS.

Commençons par un très rapide rappel sur le DNS.

Qu’est ce que DNS :

DNS (Domain Name System) est une base de données distribuée sur laquelle s’appuient les applications TCP/IP pour établir une correspondance entre les noms des machines et leurs adresses IP.

DNS suit quelques spécifications à savoir :

–  Utilisation du port 53 en UDP permettant aux clients et aux serveurs de communiquer
–  Fournit des informations de routage pour les mails

L’espace de nommage du DNS :

Il faut savoir qu’un site est organisé selon une structure bien définie. Cette structure est dite arborescente.

Exemple :

Pour accéder à www.lestutosdenico.com, il faut demander à la racine « . » qui gère les com. La racine nous renvoie l’IP d’un des serveurs gérants les .com. On dit que la racine a délégué l’autorité pour la zone com.

Le .com ajoute des enregistrements (ici lestutosdenico).

lestutosdenico renvoie vers le site web www (ici il est intéressant de noté que l’on aurait pu mettre un sous domaine ex : truc.lestutosdenico.com).

Je ne vais pas détailler ici le fonctionnement de DNS, si vous voulez de plus amples informations, n’hésitez pas à lire la RFC 1034 http://abcdrfc.free.fr/rfc-vf/rfc1034.html

DJBDNS

Installation sous Debian :

Ajout des sources contenant les packages djbdns

# echo « deb http://smarden.org/pape/Debian sarge unofficial » >> /etc/apt/sources.list
# echo « deb src http://smarden.org/pape/Debian sarge unofficial » >> /etc/apt/sources.list

Mise à jour du source.list

# apt-get update

Installations des packages djbdns :

# apt-get install djbdns daemontools ucspi-tool

Par mesure de sécurité, il est nécessaire de créer des utilisateurs spécifiques pour lancer notre service djbdns

# useradd -s /bin/false tinydns
# useradd -s /bin/false dnslog

On empêche également les utilisateurs de pouvoir se connecter à travers un shell. Maintenant, une commande nous permet de créer les dossiers djbdns

# tinydns-conf tinydns dnslog /blabla/tinydns 192.168.0.10

La commande va créer un répertoire dans /blabla/tinydns contenant les fichiers nécessaires à notre serveur DNS. La sécurité est prise en compte car le service va être lancé avec les droits de l’utilisateur tinydns.

La création d’un répertoire de logs va être effectuée dans /etc/tinydns/log/main/. Ici aussi, l’utilisateur dnslog pourra y accéder.

Maintenant, nous allons faire un lien symbolique permettant de lancer le service

# ln -s /blabla/tinydns /service/

En cours on a eu des petits problèmes sur le lancement du service, il a fallu que l’on supprime le fichier à cet endroit /service/tinydns/env/supervise

Lancement du service

# svscan /service/

On vérifie que cela a bien été pris en comte :

# svstat /service/*

Si l’on constate que l’on a 0 ou 1 secondes, c’est que le service plante à un moment donné. N’hésitez pas à regarder les logs si tel est le cas.

Configuration :

Notre fichier de zone se trouve dans /etc/tinydns/root/data

Voici la liste des enregistrements possible :

  • Un enregistrement SOA pour définir notre zone
  • Deux enregistrements NS pour nos deux serveurs dns de zone
  • Un enregistrement A pour notre serveur web
  • Un enregistrement MX pour notre serveur de messagerie
  • Un enregistrement A pour le nom de notre serveur de messagerie

Commande pour ajouter des enregistrements :

  • add-ns (ajouter un serveur dns, soit un enregistrement NS)
  • add-alias (ajouter un alias, soit un enregistrement CNAME)
  • add-host (ajouter un host, soit un enregistrement A)
  • add-mx (ajouter un serveur de messagerie, soit un enregistrement MX)
  • add-childns (ajouter une zone fille, si on veut créer une sous-zone, par truc.lestutosdenico.com)

Exemple si on administre le .com

# ./add-ns .com 192.168.0.1

On compile le fichier data pour prendre en compte les modifications

# make

Ajout d’un domaine enfant :

# ./add-childns lestutosdenico.com 192.168.0.1

On dit donc que le domaine lestutosdenico.com est géré par 192.168.0.1

Ordre de requête DNS :  (dépend du fichier de configuration nsswitch.conf)

exemple pour une requête sur :  www.google.fr

1/ Regarde /etc/services/hosts
2/ Regarde dans le fichier resolv.conf
3/ Regarde dans son cache DNS
4/ Demande effectuée au DNS
5/ Si notre serveur DNS n’a pas la réponse à la requête, il effectue une requête à un root serveur (ou vers le DNS de votre FAI qui a surement l’IP dans son cache)
6/ Le root serveur retourne le serveur DNS qui gère la zone .com Etc…

Pensez aussi à modifier ces deux fichiers :

– resolv.conf
– nsswitch.conf

Serveur en cache

Autoriser les adresses commençant par 192… à nous interroger.

# touch /etc/dnscache/root/ip/192

Quelques commandes à connaître :

#svc -d /service/tinydns : arrêter le service tinydns
#svc -u /service/tinydns : relancer le service tinydns
#svc -h /service/tinydns : recharger la configuration tinydns

Voilà, finish !

Si vous voulez de plus amples informations, vous pouvez consulter ce site :

http://cr.yp.to/djbdns.html

Laissez un commentaire