Installer et configurer un serveur DNS avec Bind9 sous Linux
Emmanuel Gautier / April 19, 2015
5 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
C'est l'enregistrement le plus courant. Il fait correspondre une adresse IPv4 à un nom d'hôte.
www IN A A.B.C.D
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"
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.
Inscrivez-vous à la newsletter
Recevez les derniers articles à propos du développement web et plein d'autre sujets à propos de la tech.
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.