GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Configurer le résolveur DNS local sur Ubuntu 20.04 avec BIND9

Ce didacticiel vous montrera comment configurer un résolveur DNS local sur Ubuntu 20.04, avec le logiciel DNS BIND9 largement utilisé. Un résolveur DNS est connu sous de nombreux noms, dont certains sont énumérés ci-dessous. Ils font tous référence à la même chose.

  • résolveur complet (contrairement au résolveur stub)
  • Récurseur DNS
  • serveur DNS récursif
  • résolveur récursif

Sachez également qu'un serveur DNS peut également être appelé un serveur de noms. Des exemples de résolveur DNS sont 8.8.8.8 (serveur DNS public Google) et 1.1.1.1 (serveur DNS public Cloudflare). Le système d'exploitation de votre ordinateur dispose également d'un résolveur, bien qu'il soit appelé résolveur de stub en raison de sa capacité limitée. Un résolveur de stub est un petit client DNS sur l'ordinateur de l'utilisateur final qui reçoit les requêtes DNS d'applications telles que Firefox et transmet les requêtes à un résolveur récursif. Presque tous les résolveurs peuvent mettre en cache la réponse DNS pour améliorer les performances, ils sont donc également appelés serveur DNS de mise en cache.

Pourquoi exécuter votre propre résolveur DNS local

Normalement, votre ordinateur ou votre routeur utilise le résolveur DNS de votre FAI pour interroger les noms DNS, alors pourquoi exécuter un résolveur DNS local ?

  • Cela peut accélérer les recherches DNS, car le résolveur DNS local n'écoute que vos requêtes DNS et ne répond pas aux requêtes DNS d'autres personnes. Vous avez donc beaucoup plus de chances d'obtenir des réponses DNS directement à partir du cache sur le résolveur. La latence du réseau entre votre ordinateur et le résolveur DNS est éliminée (presque nulle), de sorte que les requêtes DNS peuvent être envoyées plus rapidement aux serveurs DNS racine.
  • Si vous exécutez un serveur de messagerie et que vous utilisez des listes noires DNS (DNSBL) pour bloquer le spam, vous devez exécuter votre propre résolveur DNS, car certaines listes noires DNS telles que URIBL refusent les requêtes des résolveurs DNS publics.
  • Si vous exécutez votre propre serveur VPN sur un VPS (Virtual Private Server), il est également recommandé d'installer un résolveur DNS sur le même VPS.
  • Vous pouvez également exécuter votre propre résolveur DNS si vous n'aimez pas que votre historique de navigation Internet soit stocké sur un serveur tiers.

Si vous possédez un site Web et que vous 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é, qui est différent d'un résolveur DNS. BIND peut agir en même temps comme un serveur DNS faisant autorité et un résolveur DNS, mais c'est une bonne pratique de séparer les deux rôles sur des boîtes différentes .

Ce didacticiel montre comment configurer un résolveur DNS local et, comme il sera utilisé sur un hôte local/réseau local, aucun cryptage (DNS sur TLS ou DNS sur HTTPS) n'est nécessaire. La configuration d'un résolveur DoT ou d'un résolveur DoH sera abordée dans un prochain article.

Astuce :Local ne signifie pas votre ordinateur personnel. Cela signifie plutôt que le résolveur DNS s'exécute sur le même boîtier que le client DNS. Vous pouvez installer le résolveur DNS BIND sur votre ordinateur personnel. Il est local sur votre ordinateur personnel. Vous pouvez installer le résolveur DNS BIND sur un serveur cloud, et il est local sur le serveur cloud.

Configurer le résolveur DNS local sur Ubuntu 20.04 avec BIND9

BIND (Berkeley Internet Name Domain) est un logiciel de serveur DNS open source 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).

Exécutez la commande suivante pour installer BIND 9 sur Ubuntu 20.04, à 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-dnsutils bind9-doc bind9-host

Vérifier la version.

named -v

Exemple de sortie :

BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>

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 named

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

sudo systemctl start named

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

sudo systemctl enable named

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

Généralement, les requêtes DNS sont envoyées au port UDP 53. Le port TCP 53 est destiné aux réponses dont la taille est supérieure à 512 octets.

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

Configurations pour un résolveur DNS local

/etc/bind/ est le répertoire qui contient les configurations pour BIND.

  • named.conf  :le fichier de configuration principal qui inclut les configurations de trois autres fichiers.
  • db.127 :fichier de zone de mappage inverse localhost IPv4.
  • db.local :fichier de zone de mappage localhost IPv4 et IPv6.
  • db.empty :un fichier de zone vide

Le package bind9 sur Ubuntu 20.04 n'est pas livré avec un db.root fichier, il utilise maintenant le fichier d'indications de racine à /usr/share/dns/root.hints . Les indices de racine Le fichier est utilisé par les résolveurs DNS pour interroger les serveurs DNS racine. Il existe 13 groupes de serveurs DNS racine, à partir de a.root-servers.net à m.root-servers.net .

Prêt à l'emploi, le serveur BIND9 sur Ubuntu fournit un service récursif pour les clients localhost et réseau local uniquement. Les requêtes extérieures seront refusées. Vous n'avez donc pas à modifier les fichiers de configuration. Pour vous familiariser avec les configurations de BIND 9, je vais vous montrer comment activer le service de récursivité quand même.

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

Pour activer le service de récursivité, modifiez le premier fichier.

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

Dans les options clause, ajoutez les lignes suivantes. Remplacez les adresses IP dans le allow-recursion déclaration avec vos propres adresses de réseau local.

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

 // optional - BIND default behavior is recursion
 recursion yes;

 // provide recursion service to trusted clients only
 allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; };

 // enable the query log
 querylog yes;

Enregistrez et fermez le fichier. Testez ensuite la syntaxe du fichier de configuration.

sudo named-checkconf

Si le test réussit (indiqué par une sortie silencieuse), redémarrez BIND9.

sudo systemctl restart named

Si vous avez un pare-feu UFW exécuté sur le serveur BIND, vous devez ouvrir le port 53 pour permettre aux clients LAN d'envoyer des requêtes DNS.

sudo ufw allow in from 192.168.0.0/24 to any port 53

Cela ouvrira les ports TCP et UDP 53 au réseau privé 192.168.0.0/24. Ensuite, à partir d'un autre ordinateur du même réseau local, nous pouvons exécuter la commande suivante pour interroger l'enregistrement A de google.com. Remplacez 192.168.0.102 par l'adresse IP de votre résolveur BIND.

dig A google.com @192.168.0.102

Maintenant, sur le résolveur BIND, vérifiez le journal des requêtes avec la commande suivante.

sudo journalctl -eu named

Cela affichera le dernier message de journal de l'unité de service bind9. J'ai trouvé la ligne suivante dans le journal, qui indique qu'une requête DNS pour l'enregistrement A de google.com a été reçue du port 57806 de 192.168.0.103.

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)

Configuration du résolveur DNS par défaut sur le serveur Ubuntu 20.04

Systemd-resolved fournit le résolveur de stub sur Ubuntu 20.04. Comme mentionné au début de cet article, un résolveur de stub est un petit client DNS sur l'ordinateur de l'utilisateur final qui reçoit les requêtes DNS d'applications telles que Firefox et transmet les requêtes à un résolveur récursif.

Le résolveur récursif par défaut peut être vu avec cette commande.

systemd-resolve --status

Astuce :si la commande ci-dessus ne se ferme pas immédiatement, vous pouvez la faire quitter en appuyant sur la touche Q.

Comme vous pouvez le voir, BIND n'est pas la valeur par défaut. Si vous exécutez la commande suivante sur le serveur BIND,

dig A facebook.com

Cette requête DNS est introuvable dans le journal BIND. Au lieu de cela, vous devez indiquer explicitement à dig d'utiliser BIND.

dig A facebook.com @127.0.0.1

Pour définir BIND comme résolveur par défaut, ouvrez le fichier de configuration résolu par systemd.

sudo nano /etc/systemd/resolved.conf

Dans le [Resolve] section, ajoutez la ligne suivante. Cela définira un serveur DNS global pour votre serveur.

DNS=127.0.0.1

Enregistrez et fermez le fichier. Redémarrez ensuite le service résolu par systemd.

sudo systemctl restart systemd-resolved

Exécutez maintenant la commande suivante pour vérifier le résolveur DNS par défaut.

systemd-resolve --status

Effectuez maintenant une requête DNS sans spécifier 127.0.0.1 .

dig A facebook.com

Vous verrez la requête DNS dans le journal BIND, ce qui signifie que BIND est maintenant le résolveur récursif par défaut. Si vous ne voyez aucune requête dans le journal BIND, vous devrez peut-être configurer le serveur DNS par lien.

Configurer le serveur DNS par lien sur Ubuntu 20.04

Vous pouvez également configurer un serveur DNS par lien, qui remplacera le serveur DNS global. Il existe deux manières de configurer des serveurs DNS par lien :

  • via résolu par systemd
  • via netplan

résolu par systemd

Lister les fichiers sous /etc/systemd/network/ répertoire.

ls /etc/systemd/network/

Exemple de sortie :

05-eth0.network  99-default.link

Comme vous pouvez le voir, j'ai deux fichiers de configuration de lien. Le 05-eth0.network le fichier est pour mon interface réseau principale, donc je modifie ce fichier.

sudo nano /etc/systemd/network/05-eth0.network

Votre nom de fichier peut être différent. S'il n'y a pas de fichiers dans ce répertoire, votre configuration DNS par lien n'est pas contrôlée par systemd-resolved .

Commentez l'entrée DNS et domaine par défaut et ajoutez votre propre entrée DNS.

DNS=127.0.0.1

Enregistrez et fermez le fichier. Puis redémarrez systemd-resolved et systemd-networkd services.

sudo systemctl restart systemd-resolved systemd-networkd

netplan

Certains serveurs Ubuntu peuvent utiliser netplan pour configurer la mise en réseau par lien. Dans ce cas, vous devez configurer le serveur DNS dans le .yaml fichier sous /etc/netplan/ annuaire. Lister les fichiers de ce répertoire.

ls /etc/netplan/

Exemple de sortie :

01-netcfg.yaml

J'édite donc ce fichier.

sudo nano /etc/netplan/01-netcfg.yaml

Définissez l'adresse du serveur DNS dans les nameservers rubrique.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1

Vous pouvez spécifier plusieurs résolveurs DNS comme ci-dessous, ce qui peut réduire les risques d'échec DNS.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1
                - 8.8.8.8
                - 1.1.1.1

Enregistrez et fermez le fichier. Appliquez ensuite la modification.

sudo netplan apply

Remarque : Si vous voyez le message d'erreur suivant, alors netplan ne peut pas traiter le fichier de configuration.

Invalid YAML at /etc/netplan/01-netcfg.yaml  inconsistent indentation

Vous devez corriger l'indentation incohérente et exécuter sudo netplan apply commande à nouveau.

Dépannage

Vérifiez le contenu de /etc/resolv.conf .

cat /etc/resolv.conf

Comme vous pouvez le voir, 127.0.0.1 (BIND) est le résolveur DNS par défaut. Si vous voyez une valeur différente, cela signifie que BIND n'est toujours pas votre résolveur DNS par défaut. Vous pouvez utiliser l'utilitaire resolveconf pour définir BIND comme résolveur par défaut.

Installez le resolvconf paquet

sudo apt install resolvconf

Puis lancez la named-resolvconf services.

sudo systemctl start named-resolvconf.service

Activer le démarrage automatique au démarrage.

sudo systemctl enable named-resolvconf.service

Vérifiez maintenant le /etc/resolv.conf déposer à nouveau. BIND devrait être le résolveur DNS par défaut sur votre serveur Ubuntu maintenant.

cat /etc/resolv.conf

Notez que certains hébergeurs comme Linode peuvent utiliser un assistant réseau pour générer automatiquement le /etc/resolv.conf dossier. Pour changer le résolveur DNS par défaut, vous devez désactiver cet assistant réseau dans le panneau de contrôle de l'hébergement.

Si cette méthode ne fonctionne toujours pas, c'est peut-être dû au fait que /etc/resolv.conf Le fichier sur votre serveur Ubuntu n'est pas un lien symbolique vers /run/resolvconf/resolv.conf . Vous devez supprimer le /etc/resolv.conf fichier et créez un lien symbolique.

sudo rm /etc/resolv.conf

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

Vous pouvez également créer manuellement ce fichier et le rendre en lecture seule pour éviter qu'il ne soit écrasé par d'autres applications sur le même serveur.

sudo rm /etc/resolv.conf

echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

sudo chmod 444 /etc/resolv.conf

systemd-resolved ne fonctionne pas

Si vous voyez l'erreur suivante après avoir exécuté le systemd-resolve --status commande,

Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

Cela pourrait être systemd-resolved ne fonctionne pas. Commencez par :

sudo systemctl status systemd-resolved

Activer le démarrage automatique.

sudo systemctl enable systemd-resolved

Configuration du résolveur DNS par défaut sur les ordinateurs clients

Sur le bureau Ubuntu, vous pouvez suivre les instructions ci-dessus pour définir le résolveur DNS par défaut, mais n'oubliez pas de remplacer 127.0.0.1 par l'adresse IP du serveur BIND. Les étapes de configuration du résolveur DNS par défaut sur MacOS et Windows sont disponibles sur Internet.

Comment désactiver IPv6 dans BIND

Si vous n'utilisez pas IPv6 sur votre réseau, c'est une bonne idée de désactiver IPv6 dans BIND, sinon, il y aura beaucoup d'erreurs concernant IPv6 dans le journal BIND comme ci-dessous.

network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

Pour désactiver IPv6 dans BIND sur Ubuntu, ouvrez simplement le /etc/default/named fichier

sudo nano /etc/default/named

Ajouter -4 aux OPTIONS.

OPTIONS="-u bind -4"

Enregistrez et fermez le fichier. Redémarrez ensuite BIND et vous avez terminé.

sudo systemctl restart named

ÉCHEC DU SERVEUR DE LIAISON

Si votre résolveur BIND ne peut pas répondre aux requêtes DNS (SERVFAIL) et que vous voyez la ligne suivante dans le journal BIND.

dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

C'est probablement parce que votre serveur ne dispose pas d'une connectivité IPv6 fonctionnelle. C'est arrivé à l'un de mes serveurs. Je pensais que la connectivité IPv6 fonctionnait comme d'habitude, mais elle est soudainement interrompue pour des raisons que je ne connaissais pas. Une fois que j'ai désactivé IPv6 dans BIND, la résolution DNS fonctionne à nouveau.

Redémarrage automatique nommé

Si, pour une raison quelconque, votre processus nommé est tué, vous devez exécuter la commande suivante pour le redémarrer.

sudo systemctl restart named

Au lieu de taper manuellement cette commande, nous pouvons faire en sorte que Named redémarre automatiquement en modifiant le named.service unité de service systemd. Pour remplacer la configuration par défaut du service systemd, nous créons un répertoire séparé.

sudo mkdir -p /etc/systemd/system/named.service.d/

Créez ensuite un fichier sous ce répertoire.

sudo nano /etc/systemd/system/named.service.d/restart.conf

Ajoutez les lignes suivantes dans le fichier, ce qui fera redémarrer automatiquement Named 5 secondes après la détection d'une panne.

[Service]
Restart=always
RestartSec=5s

Enregistrez et fermez le fichier. Rechargez ensuite systemd.

sudo systemctl daemon-reload

Pour vérifier si cela fonctionnerait, tuez Named avec :

sudo pkill named

Vérifiez ensuite le statut Nommé. Vous trouverez Named redémarré automatiquement.

systemctl status named

BIND max-cache-taille

BIND peut mettre en cache les résultats DNS sur le serveur pour accélérer la recherche DNS pour les clients. BIND suppose que vous exécutez un résolveur DNS dédié, c'est-à-dire qu'aucun autre service Web ne s'exécute sur le même hôte, donc la taille de cache par défaut (définie par max-cache-size ) est défini sur 90 % de la RAM totale pour obtenir les meilleures performances. Vous pouvez voir une ligne comme ci-dessous dans le journal BIND (sudo journalctl -eu named ) lorsque BIND démarre.

none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)

Notez que BIND n'utilisera pas 90% de votre RAM immédiatement. S'il n'y a que quelques requêtes DNS, BIND n'utilise qu'une petite quantité de RAM, car il n'y a pas beaucoup de résultats DNS à mettre en cache. S'il y a beaucoup de requêtes DNS, il utilisera beaucoup de RAM pour stocker le cache DNS.

Si votre RAM est limitée, vous ne voudrez peut-être pas que BIND utilise 90 % de votre RAM pour le cache. Editez le fichier de configuration BIND /etc/bind/named.conf.options .

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

Ajoutez la directive suivante dans les options clause. Remplacez 50 % par votre valeur préférée.

max-cache-size 50%;

Redémarrez BIND pour que la modification prenne effet.

sudo systemctl restart named

Remarque :Lorsque vous redémarrez BIND, tout son cache sera vidé.

Aucun serveur n'a pu être atteint

Si vous voyez l'erreur suivante lors de l'utilisation de la commande dig sur les ordinateurs clients

;; connection timed out; no servers could be reached

C'est peut-être ça

  • Votre règle de pare-feu est erronée. Vérifiez le journal de votre pare-feu.
  • Le résolveur BIND ne fonctionne pas.
  • BIND n'écoute pas sur une interface réseau.
  • Pouvez-vous envoyer un ping du client DNS au résolveur DNS ?

Conclusion

J'espère que ce tutoriel vous a aidé à configurer un résolveur DNS local sur Ubuntu 20.04 avec BIND9. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite pour obtenir plus de trucs et astuces. Prenez soin de vous 🙂


Ubuntu
  1. Comment configurer un pare-feu avec UFW sur Ubuntu 18.04

  2. Comment configurer le résolveur DNS local à l'aide de Dnsmasq sur Ubuntu 20.04

  3. Analysez le réseau local avec arp-scan sur ubuntu

  4. Comment configurer un pare-feu avec UFW sur Ubuntu 16.04

  5. Comment configurer un résolveur DNS non lié sur Ubuntu 20.04

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

Configurer le résolveur DNS sur HTTPS (DoH) sur Ubuntu avec DNSdist

Comment configurer facilement un résolveur DNS sur TLS avec Nginx sur Ubuntu

Configurer un résolveur DNS local sur Ubuntu 18.04, 16.04 avec BIND9

Configurer un résolveur DNS non lié sur le serveur Ubuntu 20.04

Configurer le serveur Ubuntu avec EHCP (LAMP, DNS, FTP, Mail)