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 🙂