Installation et configuration d’un serveur DNS (Bind9) sur Ubuntu

2016-05-14 - Rémi Goyard dns ubuntu bind 9

Cet article présente l’installation et la configuration d’un serveur DNS.

L’installation est faite sur une distribution Ubuntu (6.06 LTS server dans mon cas)

Installation d’un serveur DNS (Bind9) sur Ubuntu

Cet article présente l’installation et la configuration d’un serveur DNS.

L’installation est faite sur une distribution Ubuntu (6.06 LTS server dans mon cas)

Pré-requis

Savoir ce qu’est le système DNS : Définition wikipedia

Pour l’ensemble du guide, nous partirons du principe, que la configuration réseau de votre serveur est fonctionnelle.

Il est aussi nécessaire d’avoir certaines bases de l’utilisation d’un systeme Linux

Enfin, il est important que votre getionnaire de paquet soit configurer et à jour.

Pour cela je vous conseille de lire l’excellent guide sur le site de ubuntu-fr.org : http://doc.ubuntu-fr.org/gestionnaire_de_paquets

Ma configuration

  • Adresse IP du serveur : 192.168.1.2
  • Adresse IP de mon routeur (ou de la « box ») : 192.168.1.1
  • Domaine : mondomaine.local
  • Les noms des ordinateurs et les ip souhaitées:
    • server (ubuntu dapper LTS) => 192.168.1.2
    • mimiz (ubuntu Feisty) => 192.168.1.5
    • portable (ubuntu Feisty) => 192.168.1.6
    • poste2 (windows XP) => 192.168.1.10

Installation

La première chose à faire est d’installer le paquet bind sur le serveur :

sudo apt-get install bind

Configuration du serveur

Dans un premier temps, nous allons jeter un coup d’oeil au fichier de configuration général de bind :

// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include « /etc/bind/named.conf.options »;

// prime the server with knowledge of the root servers
zone « . » {
    type hint;
    file « /etc/bind/db.root »;
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone « localhost » {
    type master;
    file « /etc/bind/db.local »;
};

zone « 127.in-addr.arpa » {
    type master;
    file « /etc/bind/db.127 »;
};

zone « 0.in-addr.arpa » {
    type master;
    file « /etc/bind/db.0 »;
};

zone « 255.in-addr.arpa » {
    type master;
    file « /etc/bind/db.255 »;
};

// zone « com » { type delegation-only; };
// zone « net » { type delegation-only; };

// From the release notes:
// Because many of our users are uncomfortable receiving undelegated answers
// from root or top level domains, other than a few for whom that behaviour
// has been trusted and expected for quite some length of time, we have now
// introduced the « root-delegations-only » feature which applies delegation-only
// logic to all top level domains, and to the root domain. An exception list
// should be specified, including « MUSEUM » and « DE », and any other top level
// domains from whom undelegated responses are expected and trusted.
// root-delegation-only exclude { « DE »; « MUSEUM »; };

include « /etc/bind/named.conf.local »;

Vous l’aurez certainement remarqué, plusieurs fichiers sont inclus, du coup je vous invite aussi à regarder à quoi ils ressemblent ne serait-ce que pour savoir ce qui est configuré.

La dernière ligne indique l’inclusion du fichier : /etc/bind/named.conf.local, c’est dans ce fichier que nous allons rajouter les informations de la zone (du domaine) que nous souhaitons configurer.

J’ai, dans le fichier /etc/bind/named.conf.options comme suit :

options {
    directory « /var/cache/bind »;
    // If there is a firewall between you and nameservers you want
    // to talk to, you might need to uncomment the query-source
    // directive below. Previous versions of BIND always asked
    // questions using port 53, but BIND 8.1 and later use an unprivileged
    // port by default.
    //query-source address * port 53;

    // If your ISP provided one or more IP addresses for stable
    // nameservers, you probably want to use them as forwarders.
    // Uncomment the following block, and insert the addresses replacing
    // the all-0’s placeholder.

    forwarders {
        192.168.1.1;
    };

auth-nxdomain no; # conform to RFC1035

};

Tout ce passe au niveau de forwarders {, en effet j’ai mis ici l’adresse IP de mon routeur, cela permet de faire en sorte que si le serveur que nous sommes en train de configurer n’arrive pas à résoudre une adresse donnée il envoie la requete à mon routeur.

Pour chaque domaine, il est nécessaire de configurer deux zones, la zone principale, et la zone de recherche inversée. Je ne rentrerais pas dans le détails mais en gros,

  • la zone principale permet de faire pointer un nom de domaine pleinement qualifié (FQDN = Full Qualified Domain Name) sur une adresse IP, pour information un nom de domaine pleinement qualifié est de la forme : hote.domaine.extension.
  • la zone de recherche inversée, permet de faire, comme son nom l’indique, l’inverse, c’est-à-dire de faire pointer une adresse IP sur un FQDN.

Création de la zone principale

Dans le fichier /etc/bind/named.conf.local nous allons rajouter les informations suivantes :

//
// Do any local configuration here
//
zone « mondomaine.local » {
    type master;
    file « mondomaine.local.hosts »;
    allow-update { none; };
};

Ces informations vont créer le domaine : mondoamaine.local, la zone est de type master (c’est-à-dire maitre), le fichier qui contiendra le détails des machines de mon domaine est /etc/bind/mondomaine.local.hosts, et je n’autorise pas de mise à jour.

Pour en savoir plus sur la configuration d’une zone, je vous invite à visiter le site officiel de bind (http://www.isc.org).

La dernière ligne n’est pas indispensable.

Création de la zone de recherche inversée

Toujours dans le fichier /etc/bind/named.conf.local nous allons rajouter les informations suivantes :

zone « 1.168.192.in-addr.arpa » {
    type master;
    file « 1.168.192.in-addr.arpa.zone »;
};

Là je crois que vous allez me dire, oulala, c’est quoi ce nom ?

C’est en fait assez simple , il s’agit en fait de l’adresse de votre réseau inversé, en gros si les adresses ip de votre réseau sont de la forme, 192.168.1.X, la zone inverse sera : 1.168.192.in-addr.arpa, la fin (in-addr.arpa).

Pour en savoir plus sur l’extension .arpa : http://fr.wikipedia.org/wiki/.arpa

Configuration de la zone principale

Dans la section principale, on a défini que le fichier /etc/bind/mondomaine.local.hosts contiendrait la définition des hôtes de notre réseau.

Il faut donc créer ce fichier, et le remplir.

Mais regardons à quoi ressemble ce fichier, nous le détaillerons plus ensuite :

@      IN     SOA     server.mondomaine.local. webmaster.mondomaine.local. (
            2007051401 ; serial
            21600 ; refresh after 6 hours
            3600 ; retry after 1 hour
            604800 ; expires after 1 week
            86400 ) ; minimum TTL of 1 day
@     IN     NS     server.mondomaine.local.
server    	IN     A     192.168.1.2
mimiz     IN     A     192.168.1.5
portable     IN     A     192.168.1.6
poste2     IN     A     192.168.1.10
router	    IN	    A	    192.168.1.1

Voilà, voilà, voilà

Bon ça nous dis quoi tout ça ?

Un fichier de zone DOIT toujours commencer par la définition d’un SOA (Start Of Authority) :

Le « @ » spécifie la zone définie dans le fichier configuration

Ensuite « IN » précise qu’il s’adit d’une zone Internet, il s’agit « presque » de la valeur par défaut, j’ai bien dis « presque », en effet, les cas où vous aurez a préciser un autre type de zone sont trés rares …

Ensuite on précise le mot clé SOA suivi du FQDN du serveur qui héberge la zone (server.mondomaine.local.), puis, sur la meme ligne une adresse email de contact (webmaster.mondomaine.local.).

Dans ce dernier cas, le premier « . » est considéré comme un « @ » (il s’agit d’une convention), vous auriez pu mettre aussi : moi.fai.com. …

Attention : Les « . » à la fin de server.mondomaine.local. et webmaster.mondomaine.local. sont obligatoires !

Ensuite il faut définir les éléments suivant :

  • Le numéro de série (serial), généralement la date du jour suivi d’un incrément : YYYYMMDDxx.
  • Le temps de rafraichissement (refresh), ici 6 heures.
  • Le temps entre deux essais (retry), ici 1 heures.
  • Le temps d’expiration (expire) ici 1 semaine.
  • La valeur TTL minimum (minimum TTL), ici, 1 jour.

Toutes les valeurs de temps sont précisées en secondes … Je vous rassure, ce n’est pas obligatoire, il est possible de préciser 1W pour une semaine, ou encore 1H pour une heure …

Tout de suite aprés l’enregistrement SOA, il faut préciser le serveur DNS a consulter :

@ IN NS server.mondomaine.local.

En gros, là on dit : la machine server.mondomaine.local est un serveur de nom (NS = Name server) pour la zone.

Ensuite nous avons la définition des machines de notre réseau :

server	IN A 192.168.1.2
mimiz IN A 192.168.1.5
portable IN A 192.168.1.6
poste2 IN A 192.168.1.10
router	IN	A	192.168.1.1

Chaque ligne Précise :

  • le nom du pc – le type de zone – le type d’enregistrement – l’adresse IP de la machine
  • le type d’enregistrement A (A pour Alias) permet donc de pointer, par exemple, server sur l’adresse ip 192.168.1.2).

Bon arretons nous là pour le moment, nous verrons un peu plus loin d’autres type d’enregistrement …

Mais avant configurons la zone de recherche inversée :

Configuration de la zone de recherche inversée

Comme dans la section précédente, commençonc par regarder le fichier :

@     IN     SOA     server.mondomaine.local. webmaster.mondomaine.local. (
            2007051401 ; serial
            21600 ; refresh after 6 hours
            3600 ; retry after 1 hour
            604800 ; expires after 1 week
            86400 ) ; minimum TTL of 1 day
@     IN     NS     server.mondomaine.local
1     IN     PTR router.mondomaine.local.
2     IN     PTR server.mondomaine.local.
5     IN     PTR mimiz.mondomaine.local.
6     IN     PTR portable.mondomaine.local.
10     IN PTR poste2.mondomaine.local

Je ne vais pas, ici, ré-expliquer le début du fichier …

Les lignes d’enregistrements de machine sont un peu différentes, en effet, vous remarquerez que toutes les lignes commencent par un nombre, en fait ce nombre est la fin de l’adresse ip de la machine …

C’est en fait ce qu’il y a aprés : 192.168.1., mon routeur à l’adresse ip 192.168.1.1 alors j’ai mis 1 en face de son FQDN.

Le type d’enregistrement est PTR.

Bon ben voilà, normalement c’est bon … votre serveur DNS est configuré, et bien alors on va tester.

Configuration des clients

Sous Windows

Je ne détaillerais pas ici la configuration d’un poste client sous Windows (si quelqu’un veut bien le faire ce serait sympa 😉 )

Sous Linux

Editez le fichier /etc/resolv.conf, puis reinseignez le comme suit :

domain mondomaine.local
nameserver 192.168.1.2

Test de la configuration

Les outils

Losrque vous avez installé le paquet bind sur votre distribution préférée, certains outils ont été ajoutés :

  • named-checkconf : Permet de tester si vos fichiers de configurations sont correctement écrits
  • named-checkzone : permet de tester une zone, syntraxe :
    sudo named-checkzone mondomaine.local /etc/bind/mondomaine.local.hosts
    ``
    
  • nslookup : permet d’interroger un serveur de nom.
  • dig : permet aussi d’interroger un serveur de nom.

Si les tests de configuration sont correctement passés, redémarrer votre serveur :

sudo /etc/init.d/bind9 restart

Interrogation du serveur

remi@portable:~$ nslookup
> server 192.168.1.2
Default server: 192.168.1.2
Address: 192.168.1.2#53
> mimiz.mondomaine.local
Server: 192.168.1.2
Address: 192.168.1.2#53
Name: mimiz.monomaine.local
Address: 192.168.1.5

Ouéé, le serveur à bien résolu mimiz.mondomaine.local en 192.168.1.5 !!

Testons la zone de recher inverse :

remi@portable:~$ nslookup
> server 192.168.1.2
Default server: 192.168.1.2
Address: 192.168.1.2#53
> 192.168.1.6
Server: 192.168.1.2
Address: 192.168.1.2#53
6.1.168.192.in-addr.arpa name = portable.mondomaine.local.

Et bien, c’est pas ty cool tout ça ?

Tout fonctionne comme il faut !

Utilisation des CNAME

Comme je l’ai promis un peu plus haut, nous allons voir un autre type d’enregistrement utile : le type : CNAME (pour Canonical Name).

Ce type d’enregistrement permet de faire pointer un nom différent sur une machine précise et sans passer par l’adresse ip …

Le meilleur exemple pour ce type d’enregistrement est le nom d’hôte : www

On va dire par exemple que votre serveur contient aussi un serveur web, alors dans ce cas ce serait bien d’avoir www.mondomaine.local qui pointe sur votre serveur.

Reprenons le fichier de zone principal :

@     IN     SOA     server.mondomaine.local. webmaster.mondomaine.local. (
            2007051401 ; serial
            21600 ; refresh after 6 hours
            3600 ; retry after 1 hour
            604800 ; expires after 1 week
            86400 ) ; minimum TTL of 1 day
@     IN     NS     server.mondomaine.local.
server	    IN     A     192.168.1.2
mimiz     IN     A     192.168.1.5
portable  IN     A     192.168.1.6
poste2     IN     A     192.168.1.10
router	    IN	    A	    192.168.1.1
www	    IN	    CNAME	    server

J’ai donc simplement rajouté une ligne assez parlante il me semble, faisons un ch’ti test :

ping www.mondomaine.local
PING server.mondomaine.local (192.168.1.2) 56(84) bytes of data.
64 bytes from server.theodys.net (192.168.1.2): icmp_seq=1 ttl=64 time=0.110 ms
64 bytes from server.theodys.net (192.168.1.2): icmp_seq=2 ttl=64 time=0.109 ms
64 bytes from server.theodys.net (192.168.1.2): icmp_seq=3 ttl=64 time=0.105 ms
64 bytes from server.theodys.net (192.168.1.2): icmp_seq=4 ttl=64 time=0.116 ms
— mimiz.theodys.net ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.105/0.110/0.116/0.004 ms

Vous remarquerez que l’adresse ip (et le nom réel) de server ont été renvoyés comme il faut.

Amusez vous à faire la même chose avec www.google.com par exemple, et Ô surprise, ca pointe vers une autre machine …

Conclusion

Voilà, c’est fini …

A bientôt pour un autre piti tuto …