Debian / Ubuntu - Installer et configurer un serveur DNS (BIND)

Page 1 / 1
  • Publié le : 12 décembre 2014 à 16:33
  • Par Lionel Eppe

Lorsque vous achetez un serveur VPS, ou que vous créez un intranet avec plusieurs serveurs, il est intéressant de créer un serveur DNS sur votre VPS ou sur votre réseau local. Ainsi, vous pourrez gérer les sous-domaines de votre domaine sans passer par un intermédiaire. Ceci dit, cela nécessite une bonne compréhension du fonctionnement des DNS (à quoi ça sert, à quoi servent les différents types d'enregistrements, ...).

Tutoriel testé sous Ubuntu 12.04 et Debian 7.7.0.

  1. Installation et configuration de BIND
  2. Création des zones de recherche directe (domaine -> IP)
  3. Création des zones de recherche inverse (IP -> domaine)
  4. Vérification de la configuration
  5. Tests du serveur DNS
  6. Configuration du serveur DNS secondaire pour votre domaine
  7. Astuce : Forcer la mise à jour du serveur DNS secondaire d'OVH
  8. Reverse DNS chez OVH

1. Installation et configuration de BIND

Pour commencer, installer le serveur DNS "Bind".
Note : Il est possible que ce serveur soit déjà installé par défaut. Tout dépend, si le serveur DNS a été coché lors de l'installation de la distribution Linux ou non.

Code : Bash

apt-get install bind9

Puis, allez dans le dossier de "Bind".

Code : Bash

cd /etc/bind

Tout d'abord, nous allons configurer le serveur DNS pour qu'il "écoute" sur toutes les adresses IP. Ce qui permet d'envoyer des requêtes au serveur DNS depuis n'importe où : le serveur lui-même, le réseau local où il se trouve et Internet).
Pour cela, modifiez le fichier "/etc/bind/named.conf.options" comme ceci :

Code : Bash

vim named.conf.options

Remplacez ceci :

Code : Bash

listen-on {127.0.0.1;};

Par ceci :

Code : Bash

listen-on {any;};

Note : Si la ligne "listen-on" n'existe pas, ajoutez là après la ligne "listen-on-v6".

 

2. Création des zones de recherche directe (domaine -> IP)

Ensuite, modifiez le fichier "/etc/bind/named.conf.local" pour déclarer les zones à gérer sur ce serveur DNS.

Code : Bash

vim named.conf.local

A la fin du fichier, ajoutez ceci :
Notes :
- Une zone correspond à un domaine.
- Dans notre cas, notre domaine est : informatiweb-tuto.net

Code : Bash

zone "informatiweb-tuto.net" {

	type master;
	file "/etc/bind/db.informatiweb-tuto.net";

	//allow-transfer {xxx.xxx.xxx.xxx;}; // Serveur DNS secondaire de l'hébergeur
};

Cette configuration est le minimum nécessaire pour que cette zone soit déclarée sur votre serveur DNS.

Informations :

  • type master; : indique que votre serveur DNS est le serveur maitre pour cette zone. Sans rentrer dans les détails, on configure la zone sur un serveur DNS maitre et on pourra dupliquer cette zone sur des serveurs DNS secondaires pour répartir la charge réseau (des requêtes DNS) sur différents serveurs.
  • file "/etc/bind/db.domaine.com" : indique le chemin du fichier qui contiendra la configuration détaillées de votre zone. C'est dans ce fichier que vous configurerez le SOA, le serial, les enregistrements (A, AAAA, CNAME, MX, ... de vos différents sous domaines), ...
  • Si votre serveur linux est un VPS (une machine virtuelle que vous louez sur Internet), vous pourrez ajouter l'adresse IP d'un serveur DNS secondaire. Chez OVH, cette adresse se trouve dans votre Manager OVH.
    Cela permet de synchroniser votre configuration DNS sur leur serveur DNS secondaire. Ainsi, une partie des requêtes DNS iront sur le serveur DNS secondaire d'OVH et les autres iront sur votre serveur.
    Ce qui permet d'améliorer les performances de votre serveur.

Maintenant que la configuration de base est configurée, nous allons créer un fichier pour chaque zone déclarée ci-dessus.

Code : Bash

vim db.informatiweb-tuto.net

Note : ce fichier est vide car il sera créé.

Dans ce fichier, collez ceci :

Code : Bash

;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	ns.informatiweb-tuto.net. webmaster.informatiweb-tuto.net. (
			      5		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	vpsxxx.ovh.net.
@	IN	NS	sdns2.ovh.net.
;
@	IN	A	xx.xx.xx.xx
@	IN	AAAA	xxxx:xxxx:xx:xxx:x:x:x:xxx
;
	IN	MX  10	mail.informatiweb-tuto.net.
;
ns	IN	A	xx.xx.xx.xx
www	IN	A	xx.xx.xx.xx
us	IN	A	xx.xx.xx.xx
mail	IN	A	xx.xx.xx.xx
smtp	IN	CNAME	www
pop	IN	CNAME	www
imap	IN	CNAME	www
ftp	IN	CNAME	www
webmail	IN	CNAME	www

Dans ce fichier, remplacez les valeurs :
- xx.xx.xx.xx : par l'adresse IPv4 de votre serveur
- xxxx:xxxx:xx:xxx:x:x:x:xxx : par l'adresse IPv6 de votre serveur (si applicable, sinon supprimez cette ligne)
- informatiweb-tuto.net. : par votre domaine, suivi d'un point. Le point est obligatoire. Il ne s'agit pas d'une erreur.
- vpsxxx.ovh.net : par l'adresse de votre serveur DNS (qui est serveur DNS primaire pour cette zone)
- sdns2.ovh.net : par l'adresse du serveur DNS secondaire de votre hébergeur.

Pour créer d'autres sous-domaines, basez-vous sur cette configuration.
Vous pouvez, bien évidemment, séparer les différents protocoles sur différents serveurs.
Par exemple :
- faire pointer les sous-domaines "mail", "smtp", "pop", "imap" et "webmail" sur une adresse IP "10.0.0.1". L'adresse IP "10.0.0.1" étant l'adresse IPv4 de votre serveur de mails
- et faire pointer les sous-domaines "www", "ftp", ... sur l'adresse IP "10.0.0.2". L'adresse IP "10.0.0.2" étant l'adresse IPv4 de votre serveur où vous avez installé : Apache, PHP, MySQL et phpMyAdmin.

Informations sur les différents types d'enregistrements :
- A : permet de faire pointer le domaine ou un sous-domaine sur une adresse IPv4 (format : xx.xx.xx.xx)
- AAAA : idem que A mais pour les adresses IPv6 (format : xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx)
- CNAME : permet de faire pointer un sous-domaine sur la même adresse qu'un autre sous-domaine. Cela rend les modifications futures plus rapides.
- MX : permet de spécifier le sous-domaine qui pointe sur votre serveur de mails.
- NS : permet de spécifier le ou les serveur DNS qui s'occupent de cette zone.
Attention : l'enregistrement NS doit obligatoirement pointer sur un enregistrement de type "A" (pas un CNAME).

Important :
- L'enregistrement MX est obligatoire si vous installez un serveur de mails sur votre serveur. Cet enregistrement permet de rendre votre serveur visible aux ordinateurs extérieurs lorsque vous enverrez des mails depuis votre serveur Linux.
- Si vous installez un serveur de mails sur votre serveur, votre serveur devra être accessible depuis l'extérieur. Si c'est un VPS, vous n'aurez pas de problèmes. Par contre, si vous souhaitez héberger votre serveur chez vous, vous devrez faire le nécessaire : Avoir un domaine en ligne (chez OVH ou autre) et configurer votre routeur.
- A chaque modification, vous devrez modifier le "Serial" indiqué au début du fichier. Une des méthodes la plus fiable, est d'utiliser la date du jour au format anglais : aaaammjjxx (xx est un nombre que vous incrémenterez si vous modifiez ces informations plusieurs fois, le même jour.)

Note pour l'utilisation en réseau local :
- L'enregistrement NS étant obligatoire, il faudra ajouter ceci dans ce fichier de zone :

Code : Bash

@       IN      NS      ns.
ns      IN      A       xx.xx.xx.xx ; IP de votre serveur DNS

 

3. Création des zones de recherche inverse (IP -> domaine)

Maintenant que nous avons créé notre zone de recherche directe, nous allons créer la zone de recherche inverse. Cette zone est obligatoire pour traduire les adresses IP en nom de domaine.
Ainsi, on peut récupérer le nom de domaine d'un site via son adresse IP.

Le nom de zone de recherche inverse est constitué de l'ID réseau (mais inversé) suivi de : .in-addr.arpa
Par exemple :
- Si le serveur à une adresse "10.0.0.5", son ID réseau sera "10.0.0" et le nom de zone inverse sera "0.0.10.in-addr.arpa".
- Si le serveur à une adresse "192.168.1.5", son ID réseau sera "192.168.1" et le nom de zone inverse sera "1.168.192.in-addr.arpa".

Pour ajouter une zone de recherche inverse, modifiez le fichier "/etc/bind/named.conf.local".

Code : Bash

vim /etc/bind/named.conf.local

et ajoutez ceci (en modifiant l'id réseau inversé et le nom du fichier, si nécessaire) :

Code : Bash

zone "0.0.10.in-addr.arpa" {
	type master;
	notify no;
	file "/etc/bind/db.10";
};

Ensuite, créer le fichier de la zone inversée.

Code : Bash

vim db.10

Et collez ceci à l'intérieur :
Note : Vous pouvez vous baser sur un des fichiers existants, si vous le souhaitez. Par exemple : le fichier db.127

Code : Bash

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.informatiweb-tuto.net. webmaster.informatiweb-tuto.net. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.
;
6       IN      PTR     ns.informatiweb-tuto.net.
6       IN      PTR     www.informatiweb-tuto.net.
6       IN      PTR     us.informatiweb-tuto.net.
6       IN      PTR     mail.informatiweb-tuto.net.
6       IN      PTR     smtp.informatiweb-tuto.net.
6       IN      PTR     pop.informatiweb-tuto.net.
6       IN      PTR     imap.informatiweb-tuto.net.
6       IN      PTR     www.informatiweb-tuto.net.
6       IN      PTR     webmail.informatiweb-tuto.net.

Comme vous pouvez le voir, le header (qui contient les infos : SOA, Serial, Refresh, ...) est identique au header de la zone de recherche directe (domaine -> IP).
Ensuite, vous devrez créer un pointeur (PTR) pour chaque sous-domaine configuré dans la zone de recherche directe.

Le chiffre présent devant le "IN" correspond au dernier octet de l'adresse IP du serveur concerné par ce sous-domaine.
Dans notre cas, nous avons fait pointer tous ces sous-domaines sur l'adresse IP : 10.0.0.6 (10.0.0 étant l'identifiant réseau défini dans le fichier "named.conf.local" pour le fichier "db.10" et 6 étant le dernier octet de cette adresse IP).

 

4. Vérification de la configuration

Maintenant que les fichiers de configuration sont modifiés ou créés, nous allons vérifier nos configurations.

Pour vérifier la configuration de base de BIND, utilisez la commande suivante :

Code : Bash

named-checkconf -z

Si vous obtenez quelque chose comme ceci, c'est que votre configuration est correcte.

Code : Bash

zone informatiweb-tuto.net/IN: loaded serial 6
zone 0.0.10.in-addr.arpa/IN: loaded serial 2
zone localhost/IN: loaded serial 2
zone 127.in-addr.arpa/IN: loaded serial 1
zone 0.in-addr.arpa/IN: loaded serial 1
zone 255.in-addr.arpa/IN: loaded serial 1

Pour vérifiez une zone spécifique, utilisez la commande "named-checkzone".

Code : Bash

named-checkzone informatiweb-tuto.net. db.informatiweb-tuto.net

Si votre zone de recherche directe est configurée correctement, ceci s'affichera.

Code : Bash

zone informatiweb-tuto.net/IN: loaded serial 6
OK

Ensuite, n'oubliez pas de vérifier également vos zones de recherche inversée.

Code : Bash

named-checkzone informatiweb-tuto.net. db.10

Si votre zone de recherche inverse est configurée correctement, ceci s'affichera.

Code : Bash

zone informatiweb-tuto.net/IN: loaded serial 2
OK

 

5. Tests du serveur DNS

Après avoir vérifié toutes vos zones et la configuration de base de BIND, rechargez la configuration de BIND pour sauvegarder les changements de votre serveur DNS.

Code : Bash

service bind9 reload

Pour finir, nous allons tester notre serveur DNS pour être sûr qu'il fonctionne correctement.
Pour cela, utilisez la commande "nslookup".
Note : le 2ème paramètre permet de spécifier le serveur DNS à utiliser pour résoudre ce nom de domaine. Ce paramètre est facultatif en temps normal, mais il est obligatoire pour pouvoir tester votre serveur DNS tant que la propagation DNS n'est pas terminée (en général, ce temps est de 24H).

Code : Bash

nslookup informatiweb-tuto.net vpsxxx.ovh.net

Si votre domaine s'affiche avec son adresse IP associée, c'est que votre serveur DNS fonctionne.
Sinon, revérifiez votre configuration DNS.

Pour tester la zone inverse, utilisez la commande nslookup comme ceci :
Note : xx.xx.xx.xx est l'adresse IP associé à un sous-domaine de votre choix.

Code : Bash

nslookup xx.xx.xx.xx vpsxxx.ovh.net

Si des lignes comme ceci apparaissent, c'est que votre zone inverse est bien configurée :

Code : Bash

xx.xx.xx.xx.in-addr.arpa	name = sous-domaine.votre-domaine.net.

 

6. Configuration du serveur DNS secondaire pour votre domaine

Si votre domaine est hébergé chez OVH, vous allez devoir configurer votre domaine chez OVH pour qu'il soit géré par votre serveur DNS et non par le serveur DNS d'OVH (plus précisément, le serveur DNS maitre d'OVH).
Pour cela, connectez-vous à votre Manager OVH (version web).
Sélectionnez votre VPS ou votre serveur dédié, cliquez sur "mode expert" en haut à droite, allez dans l'onglet "DNS Secondaire" puis cliquez sur "Ajouter un domaine".

Indiquez le nom de domaine à copier sur le serveur DNS secondaire d'OVH.

Note : Il est possible qu'OVH vous demande de créer un enregistrement DNS de type TXT avec une valeur aléatoire. Dans ce cas, ajoutez l'enregistrement DNS qu'OVH vous demande, puis réessayez.

La zone DNS de ce nom de domaine va être copiée sur le serveur DNS secondaire d'OVH.

 

Ensuite, sélectionnez votre domaine, allez dans "Gestion DNS" puis cliquez sur "Ajouter un serveur DNS".

Indiquez l'adresse de votre VPS ou de votre serveur dédié en utilisant son adresse "vpsxxxxxx.ovh.net" ou "ksxxxxxx.kimsufi.com". Si vous utilisez l'adresse "ns.votre-domaine.net", vous devrez indiquer l'adresse IP du serveur.

Patientez pendant 24 à 48 heures pendant la propagation DNS.

 

7. Astuce : Forcer la mise à jour du serveur DNS secondaire d'OVH

Si vous avez oublié de réduire le TTL (Time to live) de votre zone DNS quelques jours avant de changer de serveur pour votre hébergement (web ou autre), la modification de votre zone DNS ne sera pas prise en compte pendant quelques jours. En effet, admettons que le serveur DNS secondaire d'OVH à récupérer une copie de votre zone DNS le 1/12 et que le TTL est équivalent à 2 jours. Et bien, votre modification ne sera pas prise en compte avant le 3/12.

Pour pallier à ce petit problème, voici une petite astuce :
- Pour commencer, dans votre manager OVH, sélectionnez le domaine souhaité et supprimez-le du serveur DNS secondaire
- Ensuite, de temps en temps, utilisez les commandes Windows "ipconfig /flushdns" (pour vider le cache DNS de Windows), puis la commande "nslookup votre-domaine.net sdns2.ovh.net".
En temps normal, la commande "nslookup" vous affichera les informations suivantes :

Code : Plain Text

Serveur : Nom du serveur DNS qui a répondu à votre requête (dans notre cas : le serveur DNS secondaire d'OVH)
Address : xx.xx.xx.xx (l'adresse IP de ce serveur DNS)

Name : votre-domaine.net
Address : xx.xx.xx.xx (l'adresse IP associée à votre nom de domaine)

Après 30 minutes ou quelques heures, votre domaine aura disparu du serveur DNS secondaire.

Code : Plain Text

Serveur : Nom du serveur DNS qui a répondu à votre requête (dans notre cas : le serveur DNS secondaire d'OVH)
Address : xx.xx.xx.xx (l'adresse IP de ce serveur DNS)

*** UnKnown ne parvient pas à trouver votre-domaine.net : Query refused

Pour finir, modifiez votre zone DNS, puis rajoutez votre domaine sur le serveur DNS secondaire d'OVH.
Etant donné que votre zone DNS n'existe plus sur le serveur DNS secondaire d'OVH, il récupèrera la nouvelle configuration. Ce qui évitera que les serveurs DNS du monde entier ne se mettent à jour avec l'ancienne configuration que le serveur DNS secondaire d'OVH aurait gardé quelques jours.

La prochaine fois, pensez à réduire le TTL de la zone DNS de votre domaine quelques jours avant de changer de serveur. (sous entendu : changement d'adresse IP) ;-)

8. Reverse DNS chez OVH

Si vous avez acheté votre VPS chez OVH, il est possible de configurer le reverse DNS de votre VPS dans votre compte OVH.
Pour cela, sélectionnez votre VPS et allez dans l'onglet "IP" affiché en bas.
Ensuite, cliquez sur le bouton "Gérer mes IP" situé à droite.

Dans la liste affichée, vous verrez 2 lignes :

  • une avec seulement une adresse IPv6
  • l'autre avec une adresse IPv4 et un nom de domaine générique dans la colonne "Reverse". Sur cette ligne, cliquez sur l'engrenage situé à droite et cliquez sur "Modifier le reverse".

Dans le cas où vous avez installé un serveur d'e-mails sur votre VPS et qu'il servira aussi à envoyer des e-mails à l'extérieur, vous devrez indiquer le nom de domaine que vous utilisez pour envoyer les e-mails.
Dans notre cas, c'est le serveur d'e-mails "mail.informatiweb.net".
Si vous ne configurer pas le reverse DNS ici, vos e-mails iront peut-être dans le dossier SPAM du destinataire parce que les 2 noms ne correspondraient pas.

Dans le cas où vous n'avez pas installé de serveur d'e-mails sur votre VPS, vous pouvez mettre votre nom de domaine racine ou celui avec les www devant.
Dans notre cas, on aurait pu mettre : informatiweb.net ou www.informatiweb.net