GNU/Linux >> Tutoriels Linux >  >> Ubuntu

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

Ce didacticiel vous montrera comment configurer un résolveur DNS local sur Ubuntu 18.04, 16.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ésolveurs 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 PC 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 utiliser votre propre résolveur DNS ?

  • 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. De plus, 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 serveur 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 un résolveur DNS local sur Ubuntu 18.04, 16.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 18.04, 16.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-doc bind9-host dnsutils

Vérifier la version.

named -v

Exemple de sortie :

BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>

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

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

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.root  :les indices de racine fichier 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 .
  • 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

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 bind9

Si vous avez un pare-feu en cours d'exécution 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 bind9

Cela affichera le dernier message de journal de l'unité de service bind9. Je peux trouver 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 18.04

Systemd-resolved fournit le résolveur de stub sur Ubuntu 18.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

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 18.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

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.

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

Ubuntu 16.04 utilise le resolvconf programme pour gérer les résolveurs DNS dans /etc/resolv.conf dossier. Installez le resolvconf paquet.

sudo apt install resolvconf

Pour définir BIND comme résolveur par défaut sur le serveur Ubuntu 16.04, vous devez modifier le /etc/resolvconf/resolv.conf.d/head fichier et ajoutez "nameserver 127.0.0.1 " dans ce fichier, ce qui peut être fait en exécutant la commande suivante :

echo "nameserver 127.0.0.1" | sudo tee -a /etc/resolvconf/resolv.conf.d/head

Le résolveur défini dans ce fichier sera toujours le premier résolveur DNS quoi qu'il arrive. Redémarrez maintenant resolvconf services.

sudo systemctl restart resolvconf

Vous pouvez maintenant vérifier le contenu de /etc/resolv.conf .

cat /etc/resolv.conf

Comme vous pouvez le voir, 127.0.0.1 est le résolveur DNS par défaut.

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.

Mettre à jour :Plus tard, j'ai remarqué que le package BIND sur Ubuntu 16.04 est livré avec une unité de service Systemd bind9-resolvconf.service , qui nous aidera à définir le résolveur DNS par défaut sur le serveur Ubuntu, vous n'avez donc pas à le faire manuellement comme ci-dessus. Par défaut, ce service est désactivé, nous devons le démarrer et activer le démarrage automatique au démarrage.

sudo systemctl start bind9-resolvconf

sudo systemctl enable bind9-resolvconf

Assurez-vous que le resolvconf le paquet est installé. Seulement deux lignes de commandes et BIND sera défini comme résolveur DNS par défaut sur votre serveur Ubuntu 16.04.

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/bind9 fichier

sudo nano /etc/default/bind9

Ajoutez "-4" aux OPTIONS.

OPTIONS="-u bind -4"

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

sudo systemctl restart bind9

É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.

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 bind9 ) 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 bind9

Conclusion

J'espère que ce tutoriel vous a aidé à configurer un résolveur DNS local sur Ubuntu 18.04, 16.04 avec BIND9. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite pour obtenir plus de conseils 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 le résolveur DNS local sur Ubuntu 20.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)