Comment configurer BIND en tant que serveur DNS de réseau privé sur Ubuntu 22.04

Introduction

Une partie importante de la gestion de la configuration du serveur et de l’infrastructure consiste à maintenir un moyen de trouver les interfaces réseau et les adresses IP par leur nom. Une façon de le faire est de configurer un système de noms de domaine (DNS) approprié. En utilisant des noms de domaine complets (FQDN) au lieu des adresses IP pour spécifier les adresses réseau, on optimise la configuration des services et des applications, et on améliore la maintenabilité des fichiers de configuration. Mettre en place son propre DNS pour son réseau privé est un excellent moyen d’améliorer la gestion de ses serveurs.

Dans ce tutoriel, vous allez configurer un serveur DNS interne à l’aide de deux serveurs Ubuntu 22.04. Vous utiliserez le logiciel de serveur de noms BIND (BIND9) pour résoudre les noms d’hôtes privés et les adresses IP privées. Cela permet de gérer de manière centralisée vos noms d’hôtes internes et vos adresses IP privées, ce qui est indispensable lorsque votre environnement s’étend à plus de quelques hôtes.

Prérequis

Pour réaliser ce tutoriel, vous aurez besoin de l’infrastructure suivante. Assurez-vous de créer chaque serveur dans le même centre de données avec la prise en charge du réseau privé:

  • A fresh Ubuntu 22.04 server to serve as the Primary DNS server, ns1.
  • (Recommandé) Un deuxième serveur Ubuntu 22.04 pour servir de serveur DNS secondaire, ns2.
  • Au moins un serveur supplémentaire. Ce guide suppose que vous avez deux serveurs supplémentaires, qui seront appelés serveurs clients. Ces serveurs clients doivent être créés dans le même centre de données où se trouvent vos serveurs DNS.

Sur chacun de ces serveurs, configurez un utilisateur administrateur sudo et configurez un pare-feu en suivant notre guide de configuration initiale du serveur Ubuntu 22.04.

Si vous n’êtes pas familier avec les concepts de DNS, nous vous recommandons de lire au moins les trois premières parties de notre Introduction à la gestion des DNS.

Sur DigitalOcean, tous les nouveaux Droplets créés sont placés par défaut dans un Cloud privé virtuel (VPC). Consultez notre documentation sur le produit VPC pour en savoir plus.

Exemple d’infrastructure et d’objectifs

Pour les besoins de cet article, nous supposerons ce qui suit:

  • Vous disposez de deux serveurs qui seront désignés comme vos serveurs de noms DNS. Ce guide les appellera ns1 et ns2.
  • Vous disposez de deux serveurs clients supplémentaires qui utiliseront l’infrastructure DNS que vous créez, appelés host1 et host2 dans ce guide. Vous pouvez ajouter autant de serveurs clients que vous le souhaitez.
  • Tous ces serveurs se trouvent dans le même centre de données. Ce tutoriel suppose que ce centre de données s’appelle nyc3.
  • Tous ces serveurs ont le réseau privé activé et sont sur le sous-réseau 10.128.0.0/16 (vous devrez probablement ajuster cela pour vos serveurs).
  • Tous les serveurs sont connectés à un projet qui s’exécute sur example.com. Ce guide explique comment configurer un système DNS interne et privé, vous pouvez donc utiliser n’importe quel nom de domaine à la place de example.com. Les serveurs DNS tenteront toujours d’acheminer d’abord les demandes en interne, ce qui signifie qu’ils n’essaieront pas d’accéder au domaine donné sur Internet. Cependant, l’utilisation d’un domaine que vous possédez peut aider à éviter les conflits avec les domaines routables publiquement.

Avec ces hypothèses à l’esprit, les exemples de ce guide utiliseront un schéma de dénomination basé sur le sous-domaine nyc3.example.com pour faire référence au sous-réseau ou à la zone privée d’exemple. Par conséquent, le nom de domaine complet privé (FQDN) de host1 sera host1.nyc3.example.com. Le tableau suivant contient les détails pertinents utilisés dans les exemples tout au long de ce guide :

Host Role Private FQDN Private IP Address
ns1 Primary DNS Server ns1.nyc3.example.com 10.128.10.11
ns2 Secondary DNS Server ns2.nyc3.example.com 10.128.20.12
host1 Generic Host 1 host1.nyc3.example.com 10.128.100.101
host2 Generic Host 2 host2.nyc3.example.com 10.128.200.102
 

Note: Votre configuration sera différente, mais les noms et adresses IP d’exemple seront utilisés pour démontrer comment configurer un serveur DNS pour fournir un DNS interne fonctionnel. Vous devriez pouvoir adapter cette configuration à votre propre environnement en remplaçant les noms d’hôte et les adresses IP privées par les vôtres. Il n’est pas nécessaire d’utiliser le nom de région du centre de données dans votre schéma de dénomination, mais nous l’utilisons ici pour indiquer que ces hôtes appartiennent au réseau privé d’un centre de données particulier. Si vous exécutez des serveurs dans plusieurs centres de données, vous pouvez configurer un DNS interne dans chaque centre de données respectif.

À la fin de ce tutoriel, vous disposerez d’un serveur DNS principal, ns1, et éventuellement d’un serveur DNS secondaire, ns2, qui servira de sauvegarde.

Lorsque vous suivez ce tutoriel, il y aura des moments où vous devrez exécuter certaines commandes sur un serveur spécifique de cette configuration. Toutes les commandes qui doivent être exécutées sur ns1 auront un arrière-plan bleu, comme ceci :

De même, toutes les commandes qui doivent être exécutées sur ns2 auront un arrière-plan rouge :

Et toutes les commandes qui doivent être exécutées sur l’un de vos serveurs clients auront un arrière-plan vert :

Et toutes les commandes qui doivent être exécutées sur plusieurs serveurs auront un arrière-plan standard marine :

Enfin, sachez que chaque fois qu’une commande ou un bloc de code contient du texte mis en évidence comme ceci, cela signifie que ce texte est important. Ce type de mise en évidence sera utilisé tout au long de ce guide pour indiquer les détails qui doivent être remplacés par vos propres paramètres ou que le texte mis en évidence doit être modifié ou ajouté à un fichier de configuration. Par exemple, si un exemple contient quelque chose comme host1.nyc3.example.com, remplacez-le par le nom de domaine complet de votre propre serveur.

Commençons par installer BIND sur vos serveurs DNS primaire et secondaire, ns1 et ns2.

Étape 1 – Installation de BIND sur les serveurs DNS

Sur les deux serveurs DNS, ns1 et ns2, mettez à jour le cache des paquets apt en tapant :

  1. sudo apt update

Ensuite, installez BIND sur chaque machine :

  1. sudo apt install bind9 bind9utils bind9-doc

Le réseau privé de DigitalOcean utilise exclusivement IPv4. Si c’est aussi votre cas, configurez BIND en mode IPv4. Sur les deux serveurs, éditez le fichier de configuration par défaut de named à l’aide de votre éditeur de texte préféré. L’exemple suivant utilise nano :

  1. sudo nano /etc/default/named

Ajoutez -4 à la fin du paramètre OPTIONS :

/etc/default/named
. . .
OPTIONS="-u bind -4"

Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous avez utilisé nano pour modifier le fichier, vous pouvez le faire en appuyant sur CTRL + X, Y, puis ENTER.

Redémarrez BIND pour mettre en œuvre les modifications :

  1. sudo systemctl restart bind9

Maintenant que BIND est installé, configurons le serveur DNS principal.

Étape 2 – Configuration du serveur DNS principal

La configuration de BIND se compose de plusieurs fichiers inclus depuis le fichier de configuration principal, named.conf. Ces noms de fichiers commencent par named car c’est le nom du processus que BIND exécute (avec named étant l’abréviation de « name daemon », c’est-à-dire « démon de nom de domaine »). Nous commencerons par configurer le fichier named.conf.options.

Configuration du fichier d’options

Sur ns1, ouvrez le fichier named.conf.options pour le modifier :

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

Au-dessus du bloc options existant, créez un nouveau bloc ACL (liste de contrôle d’accès) appelé trusted. C’est là que vous définirez une liste de clients à partir desquels vous autoriserez les requêtes DNS récursives (c’est-à-dire vos serveurs qui se trouvent dans le même centre de données que ns1). Ajoutez les lignes suivantes pour ajouter ns1, ns2, host1 et host2 à votre liste de clients de confiance, en veillant à remplacer les adresses IP privées d’exemple par celles de vos propres serveurs :

/etc/bind/named.conf.options — 1 of 3
acl "trusted" {
        10.128.10.11;    # ns1 
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

Maintenant que vous avez votre liste de clients DNS de confiance, vous pouvez modifier le bloc options. Voici actuellement le début du bloc :

/etc/bind/named.conf.options — 2 of 3
        . . .
};

options {
        directory "/var/cache/bind";
        . . .
}

Sous la directive directory, ajoutez les lignes de configuration surlignées (et substituez l’adresse IP privée de ns1 appropriée) :

/etc/bind/named.conf.options — 3 of 3
        . . .

};

options {
        directory "/var/cache/bind";
        
        recursion yes;                 # enables recursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network only
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

        . . .
};

Remarquez le bloc forwarders, qui comprend deux adresses IP : 8.8.8.8 et 8.8.4.4. Ce bloc définit les forwarders, un mécanisme spécial que BIND utilise pour réduire le trafic sur les liens vers les serveurs de noms externes. BIND peut également utiliser des forwarders pour autoriser les requêtes par des serveurs qui n’ont pas un accès direct à Internet. Cela peut contribuer à accélérer les réponses à ces requêtes en réduisant la charge sur le réseau local.

Les deux adresses IP de ce bloc représentent les résolveurs DNS publics de Google, mais l’adresse IP de n’importe quel serveur de noms récursif public fonctionnera ici. Par exemple, vous pourriez utiliser l’adresse IP du serveur DNS de Cloudflare (1.1.1.1) à la place.

Lorsque vous avez terminé, enregistrez et fermez le fichier named.conf.options. La configuration ci-dessus spécifie que seuls vos propres serveurs (ceux de confiance) pourront interroger votre serveur DNS pour des domaines externes.

Ensuite, vous spécifierez vos zones DNS en configurant le fichier named.conf.local.

Configuration du fichier local

Sur ns1, ouvrez le fichier named.conf.local pour le modifier :

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

Mis à part quelques commentaires, le fichier sera vide. Ici, vous spécifierez vos zones avant et arrière. Les zones DNS désignent une portée spécifique pour gérer et définir les enregistrements DNS. Comme les domaines d’exemple de ce guide se trouvent tous dans le sous-domaine nyc3.example.com, nous l’utiliserons comme zone avant. Étant donné que les adresses IP privées de nos serveurs d’exemple se trouvent chacune dans l’espace d’adressage IP 10.128.0.0/16, l’exemple suivant configurera une zone arrière afin que nous puissions définir des recherches inversées dans cette plage.

Ajoutez la zone avant avec les lignes suivantes, en remplaçant le nom de la zone par le vôtre et l’adresse IP privée du serveur DNS secondaire dans la directive allow-transfer :

/etc/bind/named.conf.local — 1 of 2
. . .

zone "nyc3.example.com" {
    type primary;
    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
    allow-transfer { 10.128.20.12; };           # ns2 private IP address - secondary
};

En supposant que notre sous-réseau privé est 10.128.0.0/16, ajoutez la zone arrière avec les lignes suivantes (notez que le nom de notre zone arrière commence par 128.10, qui est l’inversion des octets de 10.128) :

/etc/bind/named.conf.local — 2 of 2
    . . .
};

zone "128.10.in-addr.arpa" {
    type primary;
    file "/etc/bind/zones/db.10.128";  # 10.128.0.0/16 subnet
    allow-transfer { 10.128.20.12; };  # ns2 private IP address - secondary
};

Si vos serveurs s’étendent sur plusieurs sous-réseaux privés mais se trouvent dans le même datacenter, assurez-vous de spécifier une zone et un fichier de zone supplémentaires pour chaque sous-réseau distinct. Une fois que vous avez ajouté toutes les zones souhaitées, enregistrez et fermez le fichier named.conf.local.

Maintenant que vos zones sont spécifiées dans BIND, vous devez créer les fichiers de zone avant et arrière correspondants.

Création du fichier de zone avant

Le fichier de zone avant est l’endroit où vous définissez les enregistrements DNS pour les recherches DNS avant. C’est-à-dire, lorsque le DNS reçoit une requête de nom, par exemple host1.nyc3.example.com, il consulte le fichier de zone avant pour résoudre l’adresse IP privée correspondante de host1.

Créez le répertoire où se trouveront vos fichiers de zone. Selon la configuration de named.conf.local, cet emplacement devrait être /etc/bind/zones:

  1. sudo mkdir /etc/bind/zones

Nous baserons notre exemple de fichier de zone avant sur le fichier de zone d’exemple db.local. Copiez-le à l’emplacement approprié avec les commandes suivantes:

  1. sudo cp /etc/bind/db.local /etc/bind/zones/db.nyc3.example.com

Maintenant, éditez votre fichier de zone avant:

  1. sudo nano /etc/bind/zones/db.nyc3.example.com

Au départ, il contiendra un contenu similaire à celui-ci:

/etc/bind/zones/db.nyc3.example.com — original
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
@       IN      A       127.0.0.1       ; delete this line
@       IN      AAAA    ::1             ; delete this line

Tout d’abord, vous voudrez modifier l’enregistrement SOA. Remplacez le premier localhost par le FQDN de ns1, puis remplacez root.localhost par admin.nyc3.example.com. Chaque fois que vous modifiez un fichier de zone, vous devez incrémenter la valeur Serial avant de redémarrer le processus named. Ici, incrémentez-le à 3:

/etc/bind/zones/db.nyc3.example.com — updated 1 of 3
. . .
;
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

Ensuite, supprimez les trois enregistrements à la fin du fichier (après l’enregistrement SOA). Si vous n’êtes pas sûr des lignes à supprimer, elles sont marquées avec des commentaires indiquant supprimer cette ligne dans l’exemple précédent.

À la fin du fichier, ajoutez vos enregistrements de serveur de noms avec les lignes suivantes (remplacez les noms par les vôtres). Notez que la deuxième colonne spécifie qu’il s’agit d’enregistrements NS:

/etc/bind/zones/db.nyc3.example.com — updated 2 of 3
. . .

; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

Ensuite, ajoutez les enregistrements A pour vos hôtes qui appartiennent à cette zone. Cela inclut tout serveur dont vous voulez que le nom se termine par .nyc3.example.com (remplacez les noms et adresses IP privées). En utilisant nos noms d’exemple et adresses IP privées, nous ajouterons des enregistrements A pour ns1, ns2, host1 et host2 comme ceci:

/etc/bind/zones/db.nyc3.example.com — updated 3 of 3
. . .

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

Notre fichier de zone avant final contiendra le contenu suivant:

/etc/bind/zones/db.nyc3.example.com — updated
$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                  3     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.nyc3.example.com.
     IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

Enregistrez et fermez le fichier db.nyc3.example.com.

Maintenant, passons aux fichiers de zone inverse.

Création du fichier de zone inverse(s)

Les fichiers de zone inversée sont utilisés pour définir les enregistrements DNS PTR pour les recherches DNS inversées. C’est-à-dire que lorsque le DNS reçoit une requête par adresse IP, par exemple 10.128.100.101, il consulte les fichiers de zone inversée pour résoudre le nom de domaine complet correspondant, host1.nyc3.example.com dans ce cas.

Sur ns1, pour chaque zone inversée spécifiée dans le fichier named.conf.local, créez un fichier de zone inversée. Nous baserons nos exemples de fichiers de zone inversée sur le fichier de zone db.127 fourni. BIND utilise ce fichier pour stocker des informations sur l’interface de bouclage locale ; 127 est le premier octet de l’adresse IP qui représente localhost (127.0.0.1). Copiez ce fichier à l’emplacement approprié avec les commandes suivantes (en remplaçant le nom de fichier de destination pour qu’il corresponde à votre définition de zone inversée) :

  1. sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128

Modifiez le fichier de zone inversée correspondant aux zones inversées définies dans named.conf.local :

  1. sudo nano /etc/bind/zones/db.10.128

Au départ, le fichier contient du contenu comme suit :

/etc/bind/zones/db.10.128 — original
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
1.0.0   IN      PTR     localhost.      ; delete this line

De la même manière que pour le fichier de zone avant, vous voudrez modifier l’enregistrement SOA et incrémenter la valeur de série :

/etc/bind/zones/db.10.128 — updated 1 of 3
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

                              . . .

Ensuite, supprimez les deux enregistrements à la fin du fichier (après l’enregistrement SOA). Si vous n’êtes pas sûr des lignes à supprimer, elles sont marquées d’un commentaire supprimer cette ligne dans l’exemple précédent.

Ajoutez à la fin du fichier vos enregistrements de serveur de noms avec les lignes suivantes (remplacez les noms par les vôtres). Notez que la deuxième colonne spécifie qu’il s’agit d’enregistrements NS :

/etc/bind/zones/db.10.128 — updated 2 of 3
. . .

; name servers - NS records
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

Ensuite, ajoutez des enregistrements PTR pour tous vos serveurs dont les adresses IP sont sur le sous-réseau du fichier de zone que vous modifiez. Dans notre exemple, cela inclut tous nos hôtes car ils sont tous sur le sous-réseau 10.128.0.0/16. Notez que la première colonne est constituée des deux derniers octets des adresses IP privées de vos serveurs dans l’ordre inverse. Assurez-vous de remplacer les noms et les adresses IP privées pour correspondre à vos serveurs :

/etc/bind/zones/db.10.128 — updated 3 of 3
. . .

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

Votre fichier de zone inverse final ressemblera à ceci :

/etc/bind/zones/db.10.128 — updated
$TTL    604800
@       IN      SOA     nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

Enregistrez et fermez le fichier de zone inverse. Si vous devez ajouter d’autres fichiers de zone inverse, répétez cette section.

Vous avez terminé de modifier vos fichiers, vous pouvez maintenant vérifier vos fichiers pour détecter d’éventuelles erreurs.

Vérification de la syntaxe de configuration BIND

Exécutez la commande suivante pour vérifier la syntaxe des fichiers named.conf* :

  1. sudo named-checkconf

Si vos fichiers de configuration de named ne contiennent pas d’erreurs de syntaxe, il n’y aura pas de messages d’erreur et vous retournerez à l’invite de votre shell. S’il y a des problèmes avec vos fichiers de configuration, examinez le message d’erreur et la section Configurer le serveur DNS principal, puis réessayez named-checkconf.

La commande named-checkzone peut être utilisée pour vérifier la correction de vos fichiers de zone. Son premier argument spécifie le nom de la zone, et le deuxième argument spécifie le fichier de zone correspondant, qui sont tous deux définis dans named.conf.local.

Par exemple, pour vérifier la configuration de la zone avant nyc3.example.com, exécutez la commande suivante (changez les noms pour correspondre à votre zone avant et votre fichier) :

  1. sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
Output
zone nyc3.example.com/IN: loaded serial 3 OK

Et pour vérifier la configuration de la zone inverse 128.10.in-addr.arpa, exécutez la commande suivante (changez les nombres pour correspondre à votre zone inverse et votre fichier) :

  1. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

Lorsque toutes vos configurations et vos fichiers de zone ne contiennent pas d’erreurs, vous serez prêt à redémarrer le service BIND.

Redémarrer BIND

Redémarrez BIND :

  1. sudo systemctl restart bind9

Si vous avez configuré le pare-feu UFW, ouvrez l’accès à BIND en tapant :

  1. sudo ufw allow Bind9

Votre serveur DNS principal est maintenant configuré et prêt à répondre aux requêtes DNS. Passons à la configuration du serveur DNS secondaire.

Étape 3 – Configuration du serveur DNS secondaire

Dans la plupart des environnements, il est conseillé de mettre en place un serveur DNS secondaire qui répondra aux requêtes si le serveur primaire devient inaccessible. Heureusement, la configuration du serveur DNS secondaire est beaucoup moins compliquée que celle du primaire.

Sur ns2, éditez le fichier named.conf.options:

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

Ajoutez en haut du fichier l’ACL avec les adresses IP privées de tous vos serveurs de confiance:

/etc/bind/named.conf.options — updated 1 of 2 (secondary)
acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

options {

        . . .

En dessous de la directive directory, ajoutez les lignes suivantes:

/etc/bind/named.conf.options — updated 2 of 2 (secondary)
    . . .

        recursion yes;
        allow-recursion { trusted; };
        listen-on { 10.128.20.12; };      # ns2 private IP address
        allow-transfer { none; };          # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

    . . .

Enregistrez et fermez le fichier named.conf.options. Ce fichier devrait être identique au fichier named.conf.options de ns1, à l’exception qu’il devrait être configuré pour écouter l’adresse IP privée de ns2.

Ensuite, éditez le fichier named.conf.local:

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

Définissez les zones secondaires correspondant aux zones primaires du serveur DNS primaire. Notez que le type est secondary, que le fichier ne contient pas de chemin et qu’il y a une directive primaries qui devrait être configurée avec l’adresse IP privée du serveur DNS primaire. Si vous avez défini plusieurs zones inverses sur le serveur DNS primaire, assurez-vous de les ajouter toutes ici:

/etc/bind/named.conf.local — updated (secondary)
zone "nyc3.example.com" {
    type secondary;
    file "db.nyc3.example.com";
    primaries { 10.128.10.11; };  # ns1 private IP
};

zone "128.10.in-addr.arpa" {
    type secondary;
    file "db.10.128";
    primaries { 10.128.10.11; };  # ns1 private IP
};

Enregistrez et fermez ensuite le fichier named.conf.local.

Exécutez la commande suivante pour vérifier la validité de vos fichiers de configuration:

  1. sudo named-checkconf

Si cette commande ne renvoie aucune erreur, redémarrez BIND:

  1. sudo systemctl restart bind9

Ensuite, autorisez les connexions DNS vers le serveur en modifiant les règles du pare-feu UFW.

  1. sudo ufw allow Bind9

Avec cela, vous disposez maintenant de serveurs DNS primaires et secondaires pour la résolution des noms de réseau privé et des adresses IP. Maintenant, vous devez configurer vos serveurs clients pour utiliser vos serveurs DNS privés.

Étape 4 – Configuration des clients DNS

Avant que tous vos serveurs dans la liste ACL trusted puissent interroger vos serveurs DNS, vous devez configurer chacun d’entre eux pour utiliser les serveurs ns1 et ns2 en tant que serveurs de noms.

En supposant que vos serveurs clients utilisent Ubuntu, vous devez trouver quel périphérique est associé à votre réseau privé. Vous pouvez le faire en interrogeant le sous-réseau privé avec la commande ip address. Exécutez la commande suivante sur chacune de vos machines clientes, en remplaçant le sous-réseau surligné par le vôtre:

  1. ip address show to 10.128.0.0/16
Output
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 altname enp0s4 altname ens4 inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1 valid_lft forever preferred_lft forever

Dans cet exemple, l’interface privée est eth1. Les exemples tout au long de cette section feront référence à eth1 en tant qu’interface privée, mais vous devez modifier ces exemples pour refléter les interfaces privées de vos propres serveurs.

Sous Ubuntu 22.04, la configuration du réseau se fait avec Netplan, une abstraction qui vous permet d’écrire une configuration réseau normalisée et de l’appliquer à un logiciel réseau compatible. Pour configurer le DNS, vous devez écrire un fichier de configuration Netplan.

Créez un nouveau fichier dans /etc/netplan appelé 00-private-nameservers.yaml:

  1. sudo nano /etc/netplan/00-private-nameservers.yaml

À l’intérieur, ajoutez les contenus suivants. Vous devrez modifier l’interface du réseau privé, les adresses de vos serveurs DNS ns1 et ns2, ainsi que la zone DNS :

Note : Netplan utilise le format de sérialisation de données YAML pour ses fichiers de configuration. Assurez-vous que votre définition utilise une indentation cohérente pour éviter les erreurs, car YAML utilise l’indentation et les espaces pour définir sa structure de données.

Vous pouvez vérifier votre fichier YAML à l’aide d’un vérificateur YAML comme YAML Lint.

/etc/netplan 00-private-nameservers.yaml
network:
    version: 2
    ethernets:
        eth1:                                    # Private network interface
            nameservers:
                addresses:
                - 10.128.10.11                # Private IP for ns1
                - 10.132.20.12                # Private IP for ns2
                search: [ nyc3.example.com ]    # DNS zone

Sauvegardez et fermez le fichier une fois que vous avez terminé.

Ensuite, indiquez à Netplan d’essayer d’utiliser le nouveau fichier de configuration en utilisant la commande netplan try. Si des problèmes surviennent et entraînent une perte de connexion réseau, Netplan annulera automatiquement les modifications après un délai d’expiration :

  1. sudo netplan try
Output
Warning: Stopping systemd-networkd.service, but it can still be activated by: systemd-networkd.socket Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 120 seconds

Si le compte à rebours est mis à jour correctement en bas, la nouvelle configuration est au moins suffisamment fonctionnelle pour ne pas interrompre votre connexion SSH. Appuyez sur ENTRÉE pour accepter la nouvelle configuration.

Maintenant, vérifiez que le résolveur DNS du système a bien appliqué votre configuration DNS :

  1. sudo resolvectl status

Faites défiler jusqu’à trouver la section de votre interface réseau privé. Les adresses IP privées de vos serveurs DNS devraient être répertoriées en premier, suivies de certaines valeurs de repli. Votre domaine devrait être répertorié après DNS Domain :

Output
. . . Link 3 (eth1) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 67.207.67.3 DNS Servers: 10.128.10.11 10.128.20.12 67.207.67.3 67.207.67.2 DNS Domain: nyc3.example.com

Votre client Ubuntu est maintenant configuré pour utiliser vos serveurs DNS internes.

Étape 5 — Test des clients

Utilisez nslookup pour tester si vos clients peuvent interroger vos serveurs de noms. Vous devriez pouvoir le faire sur tous les clients que vous avez configurés et qui sont dans la liste trusted.

Vous pouvez commencer par effectuer une recherche directe.

Recherche directe

Pour effectuer une recherche directe afin de récupérer l’adresse IP de host1.nyc3.example.com, exécutez la commande suivante:

  1. nslookup host1

La requête de host1 se développe en host1.nyc3.example.com car l’option search est définie sur votre sous-domaine privé, et les requêtes DNS tenteront de rechercher sur ce sous-domaine avant de chercher l’hôte ailleurs. La commande précédente renverra une sortie semblable à celle-ci:

Output
Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: host1.nyc3.example.com Address: 10.128.100.101

Ensuite, vous pouvez vérifier les recherches inverses.

Recherche inverse

Pour tester la recherche inverse, interrogez le serveur DNS avec l’adresse IP privée de host1:

  1. nslookup 10.128.100.101

Cela devrait renvoyer une sortie semblable à celle-ci:

Output
11.10.128.10.in-addr.arpa name = host1.nyc3.example.com. Authoritative answers can be found from:

Si tous les noms et adresses IP se résolvent aux valeurs correctes, cela signifie que vos fichiers de zone sont configurés correctement. Si vous recevez des valeurs inattendues, assurez-vous de vérifier les fichiers de zone sur votre serveur DNS primaire (par exemple, `db.nyc3.example.com` et `db.10.128`).

Enfin, ce tutoriel expliquera comment maintenir vos enregistrements de zone.

Étape 6 — Maintien des enregistrements DNS

Maintenant que vous avez un DNS interne fonctionnel, vous devez maintenir vos enregistrements DNS afin qu’ils reflètent correctement votre environnement de serveur.

Ajout d’un hôte au DNS

Chaque fois que vous ajoutez un hôte à votre environnement (dans le même centre de données), vous voudrez l’ajouter au DNS. Voici une liste des étapes à suivre :

Serveur de noms primaire

  • Fichier de zone avant : Ajoutez un enregistrement `A` pour le nouvel hôte, incrémentez la valeur de `Serial`
  • Fichier de zone arrière : Ajoutez un enregistrement `PTR` pour le nouvel hôte, incrémentez la valeur de `Serial`
  • Ajoutez l’adresse IP privée de votre nouvel hôte à la liste `trusted` (dans `named.conf.options`)

Testez vos fichiers de configuration :

  1. sudo named-checkconf
  2. sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com
  3. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

Ensuite, rechargez BIND:

  1. sudo systemctl reload bind9

Votre serveur principal devrait maintenant être configuré pour le nouvel hôte.

Serveur de noms secondaire

  • Ajoutez l’adresse IP privée de votre nouvel hôte à la liste ACL trusted (dans named.conf.options)

Vérifiez la syntaxe de la configuration:

  1. sudo named-checkconf

Ensuite, rechargez BIND:

  1. sudo systemctl reload bind9

Votre serveur secondaire acceptera désormais les connexions de votre nouvel hôte.

Configurez le nouvel hôte pour utiliser votre DNS

  • Configurez le fichier /etc/resolv.conf pour utiliser vos serveurs DNS
  • Testez avec nslookup

Supprimer un hôte du DNS

Si vous souhaitez supprimer un hôte de votre environnement ou simplement le retirer du DNS, supprimez simplement tout ce qui a été ajouté lorsque vous avez ajouté le serveur au DNS (c’est-à-dire l’inverse des étapes précédentes).

Conclusion

Maintenant, vous pouvez vous référer aux interfaces réseau privées de vos serveurs par leur nom plutôt que par leur adresse IP. Cela facilite la configuration des services et des applications car vous n’avez plus besoin de vous souvenir des adresses IP privées, et les fichiers seront moins difficiles à lire et à comprendre. De plus, vous pouvez maintenant modifier vos configurations pour pointer vers un nouveau serveur à un seul endroit, votre serveur DNS principal, au lieu de devoir modifier plusieurs fichiers de configuration répartis, ce qui optimise la maintenance.

Une fois que vous avez configuré votre DNS interne et que vos fichiers de configuration utilisent des FQDN privés pour spécifier les connexions réseau, il est essentiel de maintenir correctement vos serveurs DNS. Si les deux deviennent indisponibles, vos services et applications qui en dépendent cesseront de fonctionner correctement. C’est pourquoi il est recommandé de configurer votre DNS avec au moins un serveur secondaire et de maintenir des sauvegardes fonctionnelles de chacun d’entre eux.

Si vous souhaitez en savoir plus sur le DNS, nous vous encourageons à consulter notre article Une introduction à la terminologie, aux composants et aux concepts du DNS.

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-22-04