Installer et configurer un serveur DNS avec Bind9 sous Linux
Emmanuel Gautier / April 19, 2015
8 min read
Un service DNS (Domain Name Service) sert à la résolution de noms de domaine en une adresse IP ou une autre ressource. Ce service est utile notamment pour naviguer sur internet pour ne pas avoir à connaître les IPs des sites web.
Introduction
La mise en place d'un tel service requiert l'utilisation d'un logiciel spécifique. Le plus utilisé est Bind. Cette technologie, maintenue par Internet Systems Consortium est utilisée sur la grande majorité des services DNS existant dans le monde dont la plupart des serveurs DNS racines.
Dans ce tutoriel nous allons apprendre à mettre en place et configurer un service DNS avec Bind9. Pour ce faire, nous allons prendre le cas simple de la configuration d'un nom de domaine pour un site web. Nous mettrons en place un nom de domaine qui pointera vers différents services tel qu'un serveur web HTTP, un serveur Mail, ... etc. Il n'est pas nécessaire que ces services existent réellement.
Installation et configuration
La première étape à effectuer est d'installer le package bind9. Si vous êtes sous une distribution linux Debian Like, vous pouvez le faire au moyen de la ligne de commande suivante:
sudo apt-get install bind9 dnsutils
Il pourra vous être nécessaire de configurer votre système pour utiliser le serveur DNS créé sur votre machine. Pour ce faire, modifiez le fichier resolv.conf
de la manière suivante. Les requêtes DNS se feront désormais vers le DNS local.
# /etc/resolv.conf
nameserver 127.0.0.1
Une fois le serveur installé et démarré, configurons un premier site. Le nom de domaine choisi n'a pas d'importance, veillez simplement à éviter d'utiliser un nom de domaine existant pour faciliter vos tests. Dans ce tutoriel nous utiliserons le nom de domaine mysite.lan
.
La mise en place d'un nouveau nom de domaine, aussi appelé zone
, se fait par la création d'un fichier. Ce fichier contient l'ensemble des enregistrements DNS du domaine. Ce sont ces informations qui seront envoyées lors d'une requête DNS. Ils donnent notamment les adresses IPs de plusieurs services, les IPs des sous-domaines, le temps de vie avant revérification des informations (TTL), ... etc.
Voici un exemple de configuration d'un nom de domaine :
# /etc/bind/db.mysite.lan
$TTL 604800
@ IN SOA ns.mysite.lan. root.mysite.lan. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.mysite.lan.
ns IN A 192.168.1.10
www IN A 192.168.1.100
La configuration du domaine terminée, il est nécessaire maintenant d'inclure cette configuration dans la liste des domaines de bind9.
# /etc/bind/named.conf.local
zone "mysite.lan" {
type master;
file "/etc/bind/db.mysite.lan";
};
Avant de redémarrer le serveur, nous allons tester le fichier de domaine créé pour vérifier s'il est correcte afin d'éviter des erreurs au redémarrage de bind. La commande named-checkzone
, inclue dans le package de bind9, va vérifier la syntaxe du fichier passé en paramètre.
sudo named-checkzone mysite.lan /etc/bind/db.mysite.lan
Il faut maintenant redémarrer le service pour prendre en compte les modifications.
sudo service bind9 restart
Enregistrements
Il existe différents types d'enregistrements représentant chacun un type information différent. Voici une liste des plus courants :
Enregistrement A
Un enregistrement A est un type d'enregistrement DNS qui associe un nom de domaine à une adresse IPv4. Un résolveur DNS utilise les enregistrements A pour trouver l'adresse IP associée à un nom de domaine, permettant aux navigateurs web et autres applications de se connecter à des serveurs sur Internet.
Un enregistrement A comprend généralement les parties suivantes :
name
: le nom de domaine pour lequel l'enregistrement s'applique, tel que example.com.ttl
: la valeur de temps de vie pour l'enregistrement, qui détermine pendant combien de temps les autres serveurs DNS et clients doivent mettre en cache l'enregistrement avant de demander une mise à jour.class
: la classe DNS, généralement IN pour Internet.type
: le type d'enregistrement DNS, toujours A.address
: l'adresse IPv4 associée au nom de domaine, telle que 192.0.2.1.
Voici un exemple d'enregistrement A :
example.com. 3600 IN A 192.0.2.1
Dans cet exemple, l'enregistrement A associe le nom de domaine example.com à l'adresse IPv4 192.0.2.1. La valeur 3600 spécifie une durée de vie de 3600 secondes (1 heure), ce qui signifie que d'autres serveurs DNS et clients peuvent mettre en cache l'enregistrement pendant jusqu'à 1 heure avant de demander une mise à jour.
Enregistrement AAAA
Variante de l'enregistrement A, il fait correspondre une adresse IPv6 à un nom d'hôte.
www IN AAAA ::A
Enregistrement CNAME (Canonical Name)
Il permet de créer un alias pointant vers un autre enregistrement du domaine courant ou d'un domaine externe. Il est possible de créer un enregistrement CNAME pointant vers un autre enregistrement CNAME mais cette pratique double le nombre de requêtes, il et donc déconseillé de la pratiquer.
mail IN CNAME www
ftp IN CNAME ftp.domain.tld.
www IN A A.B.C.D
Enregistrement MX (Mail Exchange)
L'enregistrement MX point vers un serveur d'emails. Cet enregistrement doit pointer obligatoirement vers un enregistrement de type A ou AAAA et pas un enregistrement CNAME.
Il est également possible de définir une priorité sur chaque enregistrement pour donne le serveur email à requêter en priorité. Si ce serveur est indisponible, le serveur ayant la priorité la plus proche sera requêté à la place.
IN MX 10 mail1
IN MX 50 mail2
mail1 IN A A.B.C.D
mail2 IN A A.B.C.D
Enregistrement NS (Name Server)
Il définit les serveurs DNS du domaine.
IN NS domain.tld.
ns IN A A.B.C.D
Enregistrement TXT
Il permet de définir un enregistrement contenant un texte libre. Cet enregistrement est notamment utilisé pour confirmer le détenteur d'un nom de domaine pour pouvoir utiliser certains services externes tel que Google Search Console, Github ou encore des solutions d'envoies de mail en mode SaaS.
domain.tld. IN TXT "text"
Enregistrement SOA
Un enregistrement SOA (Start of Authority) est un type d'enregistrement DNS qui fournit des informations d'autorité sur une zone DNS, notamment le serveur de noms principal pour la zone, l'adresse e-mail de la personne responsable de la zone, ainsi que diverses valeurs de synchronisation qui contrôlent la manière dont les informations DNS sont mises en cache et mises à jour.
L'enregistrement SOA est généralement le premier enregistrement DNS dans un fichier de zone et contient les champs suivants :
name
: le nom de la zone, généralement le nom de domaine suivi d'un point.ttl
: la valeur de temps de vie pour la zone, qui détermine pendant combien de temps les autres serveurs DNS doivent mettre en cache les informations de la zone avant de demander des mises à jour.class
: la classe DNS, généralement IN pour Internet.type
: le type d'enregistrement, toujours SOA.primary nameserver
: le nom d'hôte du serveur de noms principal pour la zone.responsible person
: l'adresse e-mail de la personne responsable de la zone, en utilisant un format spécial avec le @ remplacé par un . et le . remplacé par ..serial number
: un numéro de version pour la zone qui est incrémenté à chaque fois que la zone est mise à jour.refresh
: l'intervalle auquel les serveurs de noms secondaires doivent vérifier le serveur de noms principal pour les mises à jour.retry
: l'intervalle auquel les serveurs de noms secondaires doivent réessayer une tentative de transfert de zone échouée.expire
: le temps maximum que les serveurs de noms secondaires doivent utiliser les données de la zone avant de les considérer comme expirées.minimum TTL
: la valeur de temps de vie minimale qui doit être utilisée pour tout enregistrement dans la zone.
Voici un exemple d'enregistrement SOA :
example.com. IN SOA ns1.example.com. hostmaster.example.com. (
2022030101 ; numéro de série
86400 ; rafraîchir toutes les 24 heures
7200 ; réessayer toutes les 2 heures
604800 ; expirer après 1 semaine
3600 ; temps de vie minimum de 1 heure
)
Test
Nous allons maintenant pour faire des tests, afin de s'assurer du bon fonctionnement de notre serveur et de vérifier que les enregistrements ont bien été pris en compte et son correctes. Pour tester ces enregistrements nous allons utiliser la ligne de commande dig
. Selon votre distribution linux, il peut être nécesaire que vous installiez le paquet.
dig -x 127.0.0.1
Vous devriez voir une sortie console similaire à celle-ci :
; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63705
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
[...]
;; Query time: 4 msec
;; SERVER: 192.168.245.2#53(192.168.245.2)
;; WHEN: Wed Apr 08 16:30:11 CEST 2015
;; MSG SIZE rcvd: 63
Vous pouvez également demander de voir les enregistrements DNS pour un domaine spécifique.
dig mysite.lan
Il ne vous reste plus qu'à comparer le retour de la commande avec les enregistrements que vous avez rentrez précédemment pour le domaine. Les enregistrements sont normalement les mêmes.
Articles sur le même sujet
Partage de dossiers avec VMWare sous Ubuntu et Debian
VMWare propose de partager des dossiers entre le système hôte et la machine virtualisée. Ces dossiers permettent de partager des données entre les deux machines. Le principe est que la machine virtualisée peut accéder aux dossiers choisis de la même manière que le système hôte et en changer les fichiers selon ses besoins.
Installer les VMWare Tools sous Ubuntu et Debian
Les VMWare Tools sont des outils développés par VMWare afin d'améliorer l'intégration de la machine virtuelle avec l'hôte. Ces outils, disponibles pour différents systèmes d'exploitation, apportent le support de différentes fonctionnalités tel que le copié-collé, les dossiers partagés, l'accélération matérielle, etc ... .
Supprimer l’entête server de Nginx
L’installation de Nginx par défaut laisse son identité sur l’entête des requêtes HTTP au moyen de l’entête Server. Pour des raisons de sécurités, il est important de laisser transparaître le moins d’informations possible au potentiel attaquant. Nous allons donc voir comment supprimer les informations de Nginx contenues dans ces entêtes.
Articles mis en avant
Comment activer la vérification de typage pour Python dans VSCode
Python supporte désormais le [type hints](https://docs.python.org/3/library/typing.html). Dans cet article, nous allons voir comment avoir de l'IntelliSense pour le typage ainsi qu'avoir les erreurs de typage sur Visual Studio Code.
Comment gérer l'internationalisation avec NextJS SSG
Générer statiquement un site avec le framework NextJS pour différentes langues n'est pas si simple.
Utilisateurs et privilèges sous MySQL
L'administration d'une base de données inclue la gestion des utilisateurs et de leurs privilèges. La plupart du temps, une interface graphique, telle que MySQL Workbench ou PHPMyAdmin, est disponible pour réaliser de façon simple les actions liées à cette gestion. Dans ce tutoriel, nous allons voir comment réaliser la gestion des utilisateurs MySQL au moyen de requêtes SQL.