GNU/Linux >> Tutoriels Linux >  >> Debian

Configurer le serveur DNS faisant autorité BIND sur Debian 10 Buster

Ce didacticiel vous montrera comment configurer et exécuter votre propre serveur de noms faisant autorité sur Debian 10 Buster avec le logiciel BIND 9 largement utilisé.

Remarque :Ce didacticiel montre la méthode de ligne de commande. Si vous souhaitez modifier des enregistrements DNS à partir d'une interface graphique Web, je vous recommande de configurer des serveurs DNS faisant autorité avec Webmin, qui est un panneau de contrôle de serveur gratuit et open source.

Qu'est-ce qu'un serveur DNS faisant autorité ?

Si vous possédez un nom de domaine et souhaitez que votre propre serveur DNS gère la résolution de nom pour votre nom de domaine au lieu d'utiliser le serveur DNS de votre registraire de domaine, vous devrez alors configurer un serveur DNS faisant autorité.

Un serveur DNS faisant autorité est utilisé par les propriétaires de noms de domaine pour stocker les enregistrements DNS. Il fournit des réponses faisant autorité aux résolveurs DNS (comme 8.8.8.8 ou 1.1.1.1), qui interrogent les enregistrements DNS au nom des utilisateurs finaux sur PC, smartphone ou tablette.

À propos de BIND

BIND (Berkeley Internet Name Domain) est un logiciel DNS open source, flexible et complet largement utilisé sur Unix/Linux en raison de sa stabilité et de sa haute qualité. Il a été développé à l'origine par UC Berkeley, et plus tard en 1994, son développement a été transféré à Internet Systems Consortium, Inc (ISC).

BIND peut agir à la fois comme serveur DNS faisant autorité pour une zone et comme résolveur DNS. Un résolveur DNS peut également être appelé serveur de noms récursif car il effectue des recherches DNS récursives pour les utilisateurs finaux. Cependant, assumer deux rôles en même temps n'est pas avantageux. Il est recommandé de séparer les deux rôles sur deux machines différentes.

Dans un article précédent, j'ai expliqué les étapes de configuration d'un résolveur DNS local sur Debian 10 Buster. Ce didacticiel vous montrera comment configurer BIND9 sur Debian 10 Buster en tant que serveur DNS faisant uniquement autorité avec la récursivité désactivée.

Prérequis

Pour suivre ce tutoriel, vous devez déjà avoir acheté un nom de domaine. J'ai enregistré mon nom de domaine chez NameCheap parce que le prix est bas et qu'ils offrent une protection de la confidentialité whois gratuite à vie.

Vous avez également besoin de deux serveurs. Un serveur est pour le serveur DNS maître et l'autre pour le serveur DNS esclave. Idéalement, les deux serveurs doivent se trouver à des emplacements physiques différents. Si un serveur DNS est hors ligne, l'autre serveur DNS peut toujours répondre aux requêtes DNS pour votre nom de domaine.

Chaque serveur n'a besoin que de 512 Mo de RAM et voici les hébergeurs que je recommande. Je les ai tous utilisés.

  • Vultr :à partir de 2,5 $/mois. Carte de crédit requise. Vous pouvez créer un compte chez Vultr via mon lien de parrainage pour obtenir un crédit gratuit de 50 $.
  • DigitalOcean :à partir de 5 $/mois. Aucune carte de crédit n'est requise. Vous pouvez utiliser Paypal. Vous pouvez créer un compte sur DigitalOcean via mon lien de parrainage pour obtenir un crédit gratuit de 50 $.

Une fois que vous avez acheté deux serveurs, installez-y Debian 10 et suivez les instructions ci-dessous.

Veuillez noter que vous devez avoir le privilège root lors de l'installation de logiciels sur Debian. Vous pouvez ajouter sudo au début d'une commande, ou utilisez su - commande pour passer à l'utilisateur root.

Configurer un serveur DNS faisant autorité sur Debian 10 Buster avec BIND9

Vous devez exécuter les commandes de cette section sur les deux serveurs.

Connectez-vous aux deux serveurs via SSH et exécutez les commandes suivantes pour installer BIND 9 sur le serveur Debian 10 à partir du référentiel par défaut. BIND 9 est la version actuelle et BIND 10 est un projet mort.

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

Vérifiez le numéro de version.

named -v

Exemple de sortie :

BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c>

Pour vérifier le numéro de version et les options de compilation, exécutez

named -V

Par défaut, BIND démarre automatiquement après l'installation. Vous vérifiez son état avec :

systemctl status bind9

Sortie :

● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en
   Active: active (running) since Sun 2019-07-14 10:27:56 UTC; 4min 6s ago
     Docs: man:named(8)
 Main PID: 1481 (named)
    Tasks: 4 (limit: 1149)
   Memory: 13.7M
   CGroup: /system.slice/bind9.service
           └─1481 /usr/sbin/named -u bind

Astuce :si la commande ci-dessus ne se ferme pas immédiatement, appuyez sur Q.

S'il ne fonctionne pas, démarrez-le avec :

sudo systemctl start bind9

Et activez le démarrage automatique au démarrage :

sudo systemctl enable bind9

Le serveur BIND fonctionnera en tant que bind user, qui est créé lors de l'installation, et écoute sur le port TCP et UDP 53, comme on peut le voir en exécutant la commande suivante :

sudo netstat -lnptu | grep named

Le démon BIND est appelé named . (Un démon est un logiciel qui s'exécute en arrière-plan.) Le named le binaire est installé par le bind9 package et il y a un autre binaire important :rndc , le contrôleur de démon de nom distant, qui est installé par bind9utils emballer. Le rndc binaire est utilisé pour recharger/arrêter et contrôler d'autres aspects du démon BIND. La communication s'effectue via le port TCP 953.

Par exemple, nous pouvons vérifier l'état du serveur de noms BIND.

sudo rndc status

Le fichier de configuration principal de BIND /etc/bind/named.conf source les paramètres de 3 autres fichiers.

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

Prêt à l'emploi, le serveur BIND9 sur Debian fournit un service récursif pour les clients localhost et réseau local. Puisque nous mettons en place un serveur DNS faisant autorité, nous devons désactiver la récursivité. Modifiez le /etc/bind/named.conf.options fichier.

sudo nano /etc/bind/named.conf.options

Ajoutez les lignes suivantes dans la clause options {…}.

 // hide version number from clients for security reasons.
 version "not currently available";

 // disable recursion on authoritative DNS server.
 recursion no;

 // enable the query log
 querylog yes;

 // disallow zone transfer
 allow-transfer { none; };

Techniquement parlant, il suffit d'ajouter recursion no; pour désactiver la récursivité, mais c'est une bonne pratique d'ajouter les 3 autres directives. Enregistrez et fermez le fichier. Redémarrez ensuite BIND.

sudo systemctl restart bind9

Configuration du serveur DNS maître

Choisissez l'un des deux serveurs comme serveur DNS maître. Nous le nommerons ns1.example.com .

Le serveur DNS maître contient la copie maîtresse du fichier de zone. Les modifications des enregistrements DNS sont effectuées sur ce serveur. Un domaine peut avoir une ou plusieurs zones DNS. Chaque zone DNS possède un fichier de zone qui contient tous les enregistrements DNS de cette zone. Par souci de simplicité, cet article suppose que vous souhaitez utiliser une seule zone DNS pour gérer tous les enregistrements DNS de votre nom de domaine.

Les /etc/bind/named.conf.default-zones Le fichier définit la zone racine et la zone localhost. Pour ajouter une zone pour votre nom de domaine, modifiez /etc/bind/named.conf.local fichier.

sudo nano /etc/bind/named.conf.local

Ajoutez les lignes suivantes à ce fichier. Remplacez example.com par votre propre nom de domaine. Remplacez 12.34.56.78 par l'adresse IP du serveur DNS esclave.

zone "example.com" {
      type master;
      file "/etc/bind/db.example.com";
      allow-query { any; };
      allow-transfer { 12.34.56.78; };
};

Dans la configuration ci-dessus, nous avons créé une nouvelle zone avec la zone clause et nous avons précisé qu'il s'agit de la zone maître. Le fichier de zone est /etc/bind/db.example.com , où nous ajouterons des enregistrements DNS. Le transfert de zone ne sera autorisé que pour le serveur DNS esclave.

Au lieu de créer un fichier de zone à partir de zéro, nous pouvons utiliser un fichier de modèle de zone. Copiez le contenu de db.empty dans un nouveau fichier.

sudo cp /etc/bind/db.empty /etc/bind/db.example.com

Un fichier de zone peut contenir 3 types d'entrées :

  • Commentaires :commence par un point-virgule (;)
  • Directives :commence par un signe dollar ($)
  • Enregistrements de ressources :alias enregistrements DNS

Un fichier de zone se compose généralement des types d'enregistrements DNS suivants.

  • L'enregistrement SOA (Start of Authority) :définit les principales caractéristiques d'une zone. Il s'agit du premier enregistrement DNS dans le fichier de zone et il est obligatoire.
  • Enregistrement NS (serveur de noms) :spécifie quels serveurs sont utilisés pour stocker les enregistrements DNS et répondre aux requêtes DNS pour un nom de domaine. Il doit y avoir au moins deux enregistrements NS dans un fichier de zone.
  • Enregistrement MX (échange de courrier)  :spécifie quels hôtes sont responsables de la livraison des e-mails pour un nom de domaine.
  • Un enregistrement (d'adresse)  :convertit les noms DNS en adresses IPv4.
  • Enregistrement AAAA (Quad A)  :convertit les noms DNS en adresses IPv6.
  • Enregistrement CNAME (nom canonique) :Il est utilisé pour créer un alias pour un nom DNS.
  • Enregistrement TXT :SPF, DKIM, DMARC, etc.

Modifions maintenant le fichier de zone.

sudo nano /etc/bind/db.example.com

Par défaut, il ressemble à ceci :

Vous pouvez le remplacer par celui-ci.

  • Le $TTL définit la durée de vie par défaut valeur pour la zone, qui est la durée pendant laquelle un enregistrement DNS peut être mis en cache sur un résolveur DNS. Cette consigne est obligatoire. Le temps est spécifié en secondes.
  • Le $ORIGIN définit le domaine de base.
  • Les noms de domaine doivent se terminer par un point (.), qui est le domaine racine. Lorsqu'un nom de domaine se termine par un point, il s'agit d'un nom de domaine complet (FQDN).
  • Le symbole @ fait référence au domaine de base.
  • IN est la classe DNS. Il signifie Internet. D'autres classes DNS existent mais sont rarement utilisées.

Le premier enregistrement d'un fichier de zone est l'enregistrement SOA (Start of Authority). Cet enregistrement contient les informations suivantes :

  • Le serveur DNS maître .
  • Adresse e-mail de l'administrateur de la zone . La RFC 2142 recommande l'adresse e-mail [email protected] . Dans le fichier de zone, cette adresse e-mail prend la forme :hostmaster.example.com car le symbole @ a une signification particulière dans le fichier de zone.
  • Numéro de série de zone . Le numéro de série est un moyen de suivre les changements de zone par le serveur DNS esclave. Par convention, le numéro de série prend un format de date :yyyymmddss , où aaaa est le numéro de l'année à quatre chiffres, mm est le mois, jj est le jour et ss est le numéro de séquence du jour. Vous devez mettre à jour le numéro de série lorsque des modifications sont apportées au fichier de zone.
  • Actualiser la valeur . Lorsque la valeur d'actualisation est atteinte, le serveur DNS esclave tente de lire l'enregistrement SOA à partir du serveur DNS maître. Si le numéro de série devient supérieur, un transfert de zone est initié.
  • Valeur de nouvelle tentative . Définit l'intervalle de relance en secondes si le serveur DNS esclave ne parvient pas à se connecter au serveur DNS maître.
  • Expiration  :Si le serveur DNS esclave n'a pas réussi à établir le contact avec le serveur DNS maître pendant ce laps de temps, l'esclave cessera de répondre aux requêtes DNS pour cette zone.
  • TTL de cache négatif  :Définit la durée de vie des réponses DNS pour les noms DNS inexistants (NXDOMAIN).

Les enregistrements TXT sont généralement placés entre guillemets doubles. Si vous ajoutez un enregistrement DKIM, vous devez également mettre la valeur entre parenthèses.

Enregistrez et fermez le fichier. Exécutez ensuite la commande suivante pour vérifier s'il y a des erreurs de syntaxe dans le fichier de configuration principal. Une sortie silencieuse indique qu'aucune erreur n'a été trouvée.

sudo named-checkconf

Vérifiez ensuite la syntaxe des fichiers de zone.

sudo named-checkzone example.com /etc/bind/db.example.com

S'il y a des erreurs de syntaxe dans le fichier de zone, vous devez le corriger, sinon cette zone ne sera pas chargée. Le message suivant indique qu'il n'y a pas d'erreurs de syntaxe.

zone example.com/IN: loaded serial 2019011503
OK

Redémarrez ensuite BIND9.

sudo systemctl restart bind9

Si vous utilisez le pare-feu simple (UFW), ouvrez les ports TCP et UDP 53.

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

Si vous utilisez directement le pare-feu iptables, exécutez la commande suivante.

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

Configuration du serveur DNS esclave

Nous utilisons maintenant l'autre serveur comme serveur DNS esclave, qui sera nommé ns2.example.com .

Tout d'abord, modifiez le named.conf.local fichier.

sudo nano /etc/bind/named.conf.local

Ajoutez une zone comme ci-dessous. Remplacez 12.34.56.78 par l'adresse IP du serveur DNS maître.

zone "example.com" {
        type slave;
        file "db.example.com";
        allow-query { any; };
        masters { 12.34.56.78; };
};

Dans la configuration ci-dessus, nous avons spécifié qu'il s'agit d'un serveur DNS esclave pour example.com zone et il acceptera les transferts de zone uniquement à partir du serveur DNS maître.

Enregistrez et fermez le fichier. Exécutez ensuite la commande suivante pour vérifier s'il y a des erreurs de syntaxe dans le fichier de configuration principal.

sudo named-checkconf

Si aucune erreur n'est trouvée, redémarrez BIND9.

sudo systemctl restart bind9

Le fichier de zone sur le serveur DNS esclave est chargé à partir d'un transfert de zone, qui est utilisé pour synchroniser les modifications d'enregistrement DNS du serveur DNS maître au serveur DNS esclave. Après le redémarrage de BIND9, le transfert de zone commencera immédiatement. Vérifiez le journal BIND9 avec la commande suivante.

sudo journalctl -eu bind9

Vous pouvez voir des messages comme ci-dessous, qui indiquent que le transfert de zone a réussi.

named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)

Le fichier de zone sera enregistré sous /var/cache/bind/db.example.com sur le serveur DNS esclave.

Si vous utilisez le pare-feu simple (UFW), ouvrez les ports TCP et UDP 53.

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

Si vous utilisez directement le pare-feu iptables, exécutez la commande suivante.

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT

En savoir plus sur le transfert de zone

Le serveur DNS esclave recontactera le maître lorsque le temps de rafraîchissement dans l'enregistrement SOA sera atteint et si le numéro de série sur le maître est supérieur à celui sur l'esclave, un transfert de zone sera lancé. Il existe deux types de transferts de zone :

  • Transfert de zone complet (AXFR) :la copie complète du fichier de zone est transférée.
  • Transfert de zone incrémentiel (IXFR) :seuls les enregistrements DNS modifiés sont transférés.

Les deux types de transfert de zone utilisent le port TCP 53. Par défaut, BIND sur le serveur DNS esclave demandera un transfert de zone incrémentiel et BIND sur le serveur DNS maître n'autorisera le transfert de zone incrémentiel que lorsque la zone est dynamique.

L'intervalle de transfert de zone est un facteur majeur de la vitesse de propagation des changements d'enregistrement DNS. Au lieu d'attendre que le serveur DNS esclave établisse le contact, le maître BIND avertira l'esclave lorsque des modifications sont apportées à la zone. Cela peut réduire considérablement le temps de propagation des modifications de zone sur Internet.

Zone inversée

Une zone inversée contient un enregistrement PTR qui mappe une adresse IP à un nom DNS. C'est le pendant de l'enregistrement DNS A. L'enregistrement PTR est souvent nécessaire pour que les serveurs de messagerie passent les filtres anti-spam. Cet enregistrement n'appartient pas à un domaine. Vous devez créer un enregistrement PTR sur le panneau de configuration de votre hébergeur ou demander à votre FAI, donc je ne vais pas couvrir la création de zones inversées dans BIND.

Modifier l'enregistrement NS et créer un enregistrement Glue

Vous devez maintenant vous rendre sur le site Web de votre registraire de domaine pour modifier l'enregistrement NS de votre domaine, afin qu'Internet sache que vous utilisez maintenant votre propre serveur DNS. Normalement, vous utilisez des noms d'hôte dans l'enregistrement NS comme ns1.example.com et ns2.example.com .

name server 1:     ns1.example.com
name server 2:     ns2.example.com

Si vous avez un nom de domaine example.com et vous utilisez un sous-domaine pour les serveurs DNS faisant autorité (ns1.example.com et ns2.example.com ), vous devez également créer un enregistrement glue auprès de votre registraire de domaine, afin qu'Internet puisse connaître l'adresse IP de votre serveur DNS. L'enregistrement glue est un enregistrement A pour ns1.example.com et ns2.example.com .

ns1.example.com        IP-address-of-master-server
ns2.example.com        IP-address-of-slave-server

Les informations ci-dessus seront envoyées à un opérateur de registre qui exécute des serveurs DNS TLD via le protocole EPP (Extensible Provisioning Protocol), afin que les serveurs DNS TLD connaissent le nom et les adresses IP des serveurs DNS faisant autorité pour votre nom de domaine. Selon le bureau d'enregistrement de domaine que vous utilisez, votre enregistrement NS peut être propagé instantanément, ou sa propagation peut prendre jusqu'à 24 heures. Vous pouvez aller sur https://dnsmap.io pour vérifier si votre nouvel enregistrement NS est actif.

Je vais vous montrer comment faire cela sur NameCheap .

Si vous avez acheté un nom de domaine chez NameCheap, connectez-vous à votre compte NameCheap. Sélectionnez la Domain list menu dans la barre latérale de gauche, puis cliquez sur Gérer bouton à l'extrême droite.

Sélectionnez DNS avancé .

Faites défiler vers le bas de la page, vous trouverez le serveur DNS personnel section. Cliquez sur Ajouter un serveur de noms bouton pour ajouter vos propres serveurs de noms :ns1.example.com et ns2.example.com . Vous devez entrer les adresses IP de vos serveurs de noms.

Après avoir ajouté vos deux serveurs de noms, cliquez sur le bouton de recherche pour vérifier s'ils ont été ajoutés avec succès. Si tel est le cas, les enregistrements de glue apparaîtront au bas de cette page.

Cliquez maintenant sur le Domain et utilisez votre serveur DNS personnalisé.

Selon le bureau d'enregistrement de domaine que vous utilisez, votre enregistrement NS peut être propagé instantanément, ou sa propagation peut prendre jusqu'à 24 heures. Vous pouvez aller sur https://dnsmap.io pour vérifier si votre nouvel enregistrement NS est actif.

Une fois l'enregistrement glue et l'enregistrement NS propagés sur Internet, vos serveurs DNS répondront aux requêtes DNS pour votre nom de domaine. Vous pouvez consulter le journal des requêtes avec :

sudo journalctl -eu bind9

Vous pouvez également utiliser le dig utilitaire pour vérifier l'enregistrement NS de votre nom de domaine.

dig NS example.com

Si l'enregistrement NS et l'enregistrement glue ont été propagés sur Internet, vous devriez voir vos serveurs de noms dans la section de réponse. Si vous voyez le SERVFAIL erreur, c'est probablement parce que vous n'avez pas ouvert le port UDP 53 sur vos serveurs de noms.

Ce qu'il faut savoir

  • Le terme master DNS server implique seulement que ce serveur stocke la copie principale du fichier de zone. Il n'a pas de priorité plus élevée en ce qui concerne la résolution DNS.
  • Toujours mettre à jour le numéro de série SOA lorsque vous apportez des modifications à un fichier de zone.

Activer le résolveur

BIND peut agir en tant que serveur DNS faisant autorité pour une zone et un résolveur DNS en même temps. C'est une bonne pratique de séparer les deux rôles sur deux machines différentes et dans cet article, nous avons désactivé le résolveur dans BIND. Si vous voulez vraiment activer le résolveur, suivez les instructions ci-dessous.

Modifiez le fichier de configuration BIND.

sudo nano /etc/bind/named.conf.options

Trouvez les lignes suivantes.

 // disable recursion on authoritative DNS server.
 recursion no;

Modifiez-les comme suit, afin que seule une adresse IP de confiance puisse envoyer des requêtes récursives à votre résolveur DNS et votre serveur ne sera pas un résolveur ouvert.

 // allow recursion for trusted clients only.
 recursion yes;
 allow-query { localhost; 12.34.56.78; };

Remplacez 12.34.56.78 par votre propre adresse IP. Enregistrez et fermez le fichier. Assurez-vous que votre définition de zone dans le /etc/bind/named.conf.local a l'option suivante, afin qu'Internet puisse interroger les enregistrements DNS de votre zone.

allow-query { any; };

Redémarrez ensuite BIND.

sudo systemctl restart bind9

Allez sur https://openresolver.com/ pour tester si votre serveur BIND est un résolveur ouvert.


Debian
  1. Comment définir une adresse IP statique sur Debian 10 Buster

  2. Comment configurer un serveur Samba sur Debian 10 Buster

  3. Comment configurer un serveur SFTP sur le serveur Debian 11

  4. Comment installer le serveur MySQL sur Debian 10 Buster

  5. Comment configurer un serveur OpenVPN sur Debian 10

Configurer le serveur VPN OpenConnect (ocserv) sur Debian 10 Buster

Configurez votre propre résolveur DNS sur Debian 10 Buster avec BIND9

Configurer le serveur de tuiles OpenStreetMap (OSM) sur Debian 10 Buster

Configurer le serveur DNS faisant autorité BIND sur Ubuntu 18.04, 16.04

LIER le serveur DNS

Comment installer un serveur minimal Debian 10 (Buster)