BIND9 : Configuration d’une zone DNS

Berkeley Internet Name Domain (plus communément appelé BIND) est un serveur DNS et, comme tous serveur DNS, son but va être de faire la translation entre un nom de domaine et une adresse IP.

Pour cet article j’ai monté un serveur web en local dont l’URL est : http://site1.com. L’ensemble de l’article sera articulé autour d’un mini TP dont le but sera de contacter un site web via un navigateur en se servant de notre serveur DNS local.

Étant donné que l’on va se servir de notre serveur DNS et non pas de celui de notre FAI, il va falloir l’ajouter dans la configuration de notre machine. Eh oui, si on ne le fait pas, seuls les serveurs DNS obtenus dynamiquement seront utilisés par notre machine donc les résultats seront faussés !

Heureusement il est très simple d’ajouter des serveurs DNS sur Linux. En effet il existe trois fichiers que nous pouvons éditer :

/etc/resolvconf/resolv.conf.d/base :  les serveurs DNS ajoutés à ce fichier seront inclus à la configuration de resolvconf même si aucune interface réseau n’est fonctionnelle.
/etc/resolvconf/resolv.conf.d/head : les serveurs DNS ajoutés à ce fichier seront inclus au dessus des serveurs DNS générés dynamiquement (ils seront donc interrogés en premier).
/etc/resolvconf/resolv.conf.d/tail : les serveurs DNS ajoutés à ce fichier seront inclus en dessous des serveurs DNS générés dynamiquement (ils seront donc interrogés en dernier)

Nous ce qu’on veut c’est que notre DNS soit interrogé en premier donc qu’il soit en premier dans la liste des DNS à utiliser. Il va donc falloir éditer le fichier /etc/resolvconf/resolv.conf.d/head et y ajouter cette ligne :

nameserver 0.0.0.0

Puis recharger la configuration de resolvconf :

sudo resolvconf -u

A partir de maintenant notre serveur DNS sera présent dans la liste des serveurs DNS à utiliser. Pour s’en assurer il suffira d’afficher le fichier /etc/resolv.conf :

1.png

Bueno ! Pour installer BIND9 il suffira d’entrer cette commande :

apt install bind9

Le fichier de configuration de bind9 se trouve dans le répertoire /etc/bind/named.conf :

2.png

Comme vous pouvez le voir il ne fait qu’inclure trois autres fichiers de configurations dont deux seulement vont nous intéresser :

  • /etc/bind/named.conf.options

Dans ce fichier se trouve l’ensemble des options de configuration de notre serveur DNS :

3.png

La première ligne « directory » indique à BIND où sont stockés les fichiers de configuration des zones DNS (ici le répertoire /var/cache/bind/).

Ensuite on voit que la directive « forwarders » est commentée. Globalement cette directive permet tout simplement de forwarder les requêtes DNS vers un autres serveur DNS et mettre en cache la réponse afin de raccourcir les temps de résolution dans le futur.

Puis on trouve la directive « listen-on-v6 » qui indique sur le serveur écoute aussi sur les interfaces IPv6 et une dernière directive « dnssec-validation » dont on reparlera dans un prochain article. 😉

  • /etc/bind/named.conf.local :

C’est dans ce fichier que l’on définira les zones DNS prises en charge par notre serveur :

4.png

Ces zones sont définies dans des blocs qui respecteront toujours ce pattern :

zone "nom_de_la_zone"{
     // Directives de configuration de la zone DNS
};

Plusieurs directives sont présentes dans le corps de configuration de la zone DNS « test.com » :

3.png

La première c’est la directive « type master » qui permet d’indiquer que cette zone DNS est gérée par notre serveur DNS et personne d’autres.  Concrètement ça veut juste dire que notre serveur DNS va récupérer les entrées DNS de cette zone depuis un fichier présent localement (le fichier spécifié dans la directive file soit ici /etc/bind/db.test.com). A l’inverse, une zone pourrait être de type « slave » et dans ce cas là ça voudrait dire qu’elle récupère les entrées DNS depuis un autre serveur DNS.

Quant à la directive « notify on », elle va indiquer à BIND qu’à chaque fois que la zone DNS sera modifiée, il devra notifier les serveurs DNS slave afin que ces derniers puissent mettre à jour leurs informations DNS.

Avant d’aller plus loin, il me semble nécessaire de définir ce qu’est une zone DNS et un fichier de zone DNS en effet ça peut ne pas être clair. Je pense qu’on peut définir une zone DNS comme étant un ensemble d’entrées DNS (A, AAAA, MX etc…) relative à un nom de domaines et à l’ensemble de ses sous domaines. Le fichier de zone DNS n’est donc rien d’autres que le fichier qui contient ces entrées DNS.

La configuration d’une zone DNS avec BIND va se faire en deux étapes. Pour commencer il va falloir déclarer notre zone dans le fichier /etc/bind/named.conf.local en ajoutant ces lignes :

zone "site1.com" IN {
        type master; 
        file "site1.com.zone"; 
        notify no; 
};

Ensuite, dans le répertoire /var/cache/bind/ nous allons devoir créer un fichier que l’on appellera « site1.com.zone » et le remplir avec ces lignes :

$TTL 24H
$ORIGIN site1.com.
@	IN	SOA	ns01.site1.com. admin.site1.com. (
					2019020901 ;
					24H ;
					15M ;
					2W  ;
					3M  ;
					)   ;

		IN	NS	ns01
ns01		IN	NS	127.0.0.1
@		IN	A	127.0.0.1

Ok là ça devient un peu plus compliqué donc on va décomposer la configuration de la zone ligne par ligne.

La première ligne :

$TTL 24H

détermine la durée pour laquelle les données présentes sont valides (24 heures ici).

La seconde ligne :

$ORIGIN site1.com.

va nous permettre de définir un « nom de base » qui remplacera toutes les déclarations de nom non qualifiées (tous noms DNS ne terminant pas par un « . » ) ainsi que les symboles @.

Autrement dit écrire ça :

$ORIGIN site1.com.
@     IN      A      127.0.0.1

ou ça :

site1.com.    IN    A    127.0.0.1

revient strictement au même.

Ensuite nous avons cette ligne :

@ IN SOA ns01.site1.com. admin.site1.com. (
2019020901 ;
24H ;
15M ;
2W ;
3M ;
) ;

Ce bloc définit plusieurs variables. En premier nous avons le nom du serveur DNS d’autorité (ns01.site1.com) ainsi que l’adresse mail de la personne en charge de la zone DNS (admin.site1.com) :

@ IN SOA ns01.site1.com. admin.site1.com. (

Attention, même si vous êtes habitués au format nom@domain.tld pour les emails, ici il faut bien utiliser le format nom.domain.tld (c’est une spécificité de BIND).

Ensuite nous avons le numéro de série qui respecte le pattern aaaa/mm/jj/xx :

2019020901 // Numéro de série aaaa/mm/dd/xx

avec xx le numéro de version de la zone DNS. A chaque fois qu’une modification sera faite sur la zone DNS, il faudra incrémenter le numéro de version (ou le jour/mois/année) afin que les DNS secondaires puissent se mettre à jour.

Puis nous avons quatre valeurs qui nous permettent de définir plusieurs durées entre chaque évènement :

24H // Intervalle de temps entre chaque rafraichissement des données
15M // Durée entre deux relances s'il est impossible de joindre le DNS master
2W // Durée au bout de laquelle les informations DNS sont expirées
3M // Durée de stockage en cache

Ces deux lignes :

		IN	NS	ns01
ns01		IN	NS	127.0.0.1

nous permettent de définir notre serveur DNS nommé « ns01″ainsi que son adresse IP est 127.0.0.1.

Enfin, et pour finir, nous avons notre entrée IPv4 :

@	IN	A	127.0.0.1

qui, je le répète pourrait aussi être écrite de cette manière :

site1.com.     IN     A     127.0.0.1

et qui nous permet de faire le lien entre notre domaine site1.com et l’IP du serveur web sur lequel l’application est hébergée (ici 127.0.0.1).

Du coup si on entre l’URL https://site1.com sur un navigateur :

5.png

On atterrit bien sur le site 🙂 !

 

Un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s