Les consultations DNS ne sont normalement pas un sujet dont vous devez vous préoccuper. Parfois, vous devriez !

Si le fournisseur d’accès de votre domicile ou de votre bureau a des serveurs de noms lents ou si votre serveur effectue de nombreuses recherches, vous avez besoin d’un serveur DNS local de mise en cache.

Comment un serveur DNS de mise en cache peut-il m’aider ?

Un serveur DNS cache fonctionne en effectuant toutes les requêtes DNS que votre système effectue, puis en sauvegardant, ou en mettant en cache, les résultats en mémoire. Une fois que les résultats sont mis en mémoire cache, chaque fois que vous faites une demande en double pour un domaine, le résultat sera servi presque instantanément à partir de la mémoire.

Cela peut sembler anodin, mais si les serveurs DNS de votre fournisseur d’accès mettent du temps à répondre, votre navigation sur internet s’en trouvera considérablement ralentie. Par exemple, la page d’accueil de la chaîne d’information américaine MSNBC doit contacter plus de 100 noms de domaine uniques pour se charger correctement. Si les serveurs de noms de votre FAI mettent ne serait-ce qu’un dixième de seconde de plus que la normale pour répondre, cela signifie que la page mettra 10 secondes de plus à se charger.

Un serveur DNS local de mise en cache n’est pas seulement utile à la maison ou au bureau, il l’est aussi sur votre serveur. Si vous avez une application qui fait beaucoup de recherches DNS, par exemple un serveur de courrier électronique très actif qui exécute un logiciel anti-spam, un serveur DNS local avec mise en cache lui permettra d’augmenter sa vitesse.

Enfin, systemd-resolved prend en charge les toutes dernières normes DNS sécurisées DNSSEC et DNSoverTLS ou DoT. Ces normes vous aident à assurer votre sécurité et à préserver votre vie privée en ligne.

Quel DNS local de mise en cache allons-nous utiliser ?

Le serveur DNS local de mise en cache que nous allons activer et configurer dans ce guide est systemd-resolved. Cet outil fait partie de la suite d’outils de gestion de système systemd. Si votre système utilise systemd, ce qui est le cas de la plupart des grandes distributions Linux, systemd-resolved est déjà installé mais ne fonctionne pas. La plupart des distributions n’utilisent pas systemd-resolved même s’il est présent.

systemd-resolved fonctionne en exécutant un petit serveur DNS local de mise en cache que nous configurerons pour qu’il démarre au démarrage. Nous reconfigurerons ensuite le reste du système pour qu’il dirige ses requêtes DNS vers le serveur DNS local mis en cache systemd-resolved.

Comment vérifier si vous utilisez déjà systemd-resolved ?

Certaines distributions Linux utilisent déjà systemd-resolved par défaut, comme Ubuntu 19.04.

Si vous utilisez déjà systemd-resolved, vous n’avez pas besoin de l’activer ou de configurer votre système pour l’utiliser. Vous devrez cependant vous assurer que les outils de gestion de réseau tels que NetworkManager sont configurés correctement, car ils peuvent ignorer la configuration du réseau du système.

Avant de passer à la section suivante, exécutez la commande suivante pour vérifier si vous exécutez déjà systemd-resolved :

resolvectl status

Si vous obtenez le message suivant

$ resolvectl status
Échec de l'obtention des données globales : Unit dbus-org.freedesktop.resolve1.service not found.

Vous n’ exécutez pas systemd-resolved et devriez passer à la section suivante. Si, au contraire, vous voyez une sortie qui commence par quelque chose comme ce qui suit :

Global
       Paramètre LLMNR : yes
Paramètre MulticastDNS : oui
  Paramètre DNSOverTLS : opportuniste
      Paramètre DNSSEC : allow-downgrade
    DNSSEC pris en charge : non
  Serveur DNS actuel : 1.1.1.1
         Serveurs DNS : 1.1.1.1
                      1.0.0.1

Dans ce cas, vous utilisez déjà systemd-resolved et vous n’avez pas besoin de l’activer.

Activation et configuration de systemd-resolved

Nous n’avons pas besoin d’installer systemd-resolved car il fait déjà partie de systemd. Tout ce que nous avons à faire est de le démarrer pour faire fonctionner le serveur de cache DNS, puis de l’activer pour qu’il démarre au démarrage.

Exécutez la commande suivante à partir d’une invite shell en tant qu’utilisateur sudo activé par un utilisateur non root pour démarrer systemd-resolved :

sudo systemctl start systemd-resolved.service

Ensuite, exécutez la commande suivante pour lancer systemd-resolved au démarrage du système :

$ sudo systemctl enable systemd-resolved.service

Le dernier élément de configuration restant consiste à définir les serveurs DNS que systemd-resolved interrogera pour les domaines résolus. Il y a de nombreuses options ici, mais l’une des paires suivantes est gratuite, rapide, et supporte DNSSEC et DoT :

Google Public DNS

  • 8.8.8.8
  • 8.8.4.4

Cloudflare Public DNS

  • 1.1.1.1
  • 1.0.0.1

Ouvrez le fichier de configuration principal de systemd-resolved avec votre éditeur de texte favori, ici j’ai utilisé nano :

$ sudo nano /etc/systemd/resolved.conf

Editez la ligne qui commence par

#DNS=

Afin qu’une paire d’adresses IP soit listée. Ici, les serveurs DNS Cloudflare sont affichés :

DNS=1.1.1.1 1.0.0.1

Sauvegardez et quittez l’éditeur de texte. Nous devons maintenant redémarrer systemd-resolved pour qu’il commence à utiliser les serveurs de noms :

sudo systemctl restart systemd-resolved.service

systemd-resolved est maintenant lancé et prêt à accélérer et sécuriser les requêtes DNS dès que nous aurons configuré le système pour commencer à l’utiliser.

Configuration du système pour utiliser systemd-resolved

Votre système peut être configuré de plusieurs manières pour utiliser systemd-resolved, mais nous allons examiner deux configurations qui couvrent la plupart des cas d’utilisation. La première est la configuration recommandée et la seconde est la configuration de compatibilité. La différence entre les deux est la façon dont le fichier /etc/resolv.conf est géré.

Le fichier /etc/resolv.conf contient les adresses IP des serveurs de noms que les programmes du système doivent interroger. Les programmes qui doivent effectuer des requêtes DNS consulteront ce fichier pour savoir quels serveurs ils doivent contacter pour effectuer ces requêtes.

Les deux modes de systemd-resolved s’articulent autour de la gestion du contenu de ce fichier. Dans le mode recommandé, /etc/resolv.conf devient un lien symbolique vers /run/systemd/resolve/stub-resolv.conf. Ce fichier est géré par systemd-resolved et, par conséquent, systemd-resolved gère les informations de configuration DNS pour tous les autres programmes du système.

Cela peut poser des problèmes lorsque d’autres programmes tentent de gérer le contenu de /etc/resolv.conf. Le mode Compatibilité laisse /etc/resolv.conf en place, ce qui permet à d’autres programmes de le gérer pendant que systemd-resolved utilise ces informations DNS. Dans ce mode, les autres programmes qui gèrent /etc/resolv.conf doivent être configurés pour définir 127.0.0.53 comme serveur de noms du système dans /etc/resolv.conf.

Configuration du mode recommandé

Lorsque nous configurons ce mode, systemd-resolved gérera /etc/resolv.conf en en faisant un lien symbolique vers /run/systemd/resolve/stub-resolv.conf. Nous devrons faire cela à la main car ce n’est pas configuré automatiquement.

Tout d’abord, supprimez ou renommez le fichier /etc/resolv.conf existant. Renommer est une meilleure option que de le supprimer car cela aura le même effet, mais vous pourrez toujours vous référer à l’original si vous avez besoin des informations qu’il contient. Ici, nous renommons /etc/resolv.conf à l’aide de la commande mv :

$ sudo mv /etc/resolv.conf /etc/resolv.conf.original

Ensuite, créez le lien symbolique :

$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

Enfin, redémarrez systemd-resolved :

$ sudo systemctl restart systemd-resolved.service

Configuration du mode de compatibilité

Dans ce mode, vous devez vous assurer que le serveur de noms local que systemd-resolved a démarré est interrogé par les services du système. Ouvrez /etc/resolv.conf dans un éditeur de texte, ici l’éditeur nano est utilisé :

sudo nano /etc/resolv.conf

Supprimez toutes les lignes qui commencent par “nameserver” et ajoutez cette ligne :

nameserver 127.0.0.53

Cette modification peut être modifiée par un autre programme qui gère /etc/resolv.conf. Si c’est le cas, vous devrez configurer ces programmes pour qu’ils utilisent ce serveur de noms afin de rendre cette modification permanente.

Débogage de systemd-resolved

Il peut être difficile de découvrir exactement comment votre système effectue les requêtes DNS après avoir effectué ces modifications. La méthode la plus efficace pour observer ce qui se passe est de mettre systemd-resolved en mode débogage et d’observer le fichier journal.

systemd-resolved est un service systemd, ce qui signifie qu’il peut être facilement mis en mode de débogage en créant un fichier de service contenant les paramètres de débogage. La commande suivante créera le bon fichier au bon endroit :

sudo systemctl edit systemd-resolved.service

Collez les lignes suivantes dans l’éditeur, puis enregistrez et quittez :

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Le service systemd-resolved sera automatiquement rechargé après une sauvegarde et une sortie réussies.

Ouvrez un second terminal sur le même serveur et suivez le journald pour le service résolu par systemd :

sudo journalctl -f -u systemd-resolved

Une ligne commençant par “Using DNS server”, par exemple :

Utilisation du serveur DNS 1.1.1.1 pour la transaction 19995.

Vous indique exactement quel serveur DNS est utilisé pour les requêtes DNS. Dans ce cas, le serveur DNS Cloudflare 1.1.1.1 a été interrogé.

Les lignes portant la mention “Cache miss” indiquent que le nom de domaine n’a pas été mis en cache. Par exemple :

Cache miss pour example.com IN SOA

Les lignes commençant par “Positive cache hit”, par exemple : “Positive cache hit for example.com IN SOA”, indiquent que le nom de domaine n’a pas été mis en cache :

Positive cache hit for example.com IN A

Indique que systemd-resolved a déjà interrogé ce domaine et que la réponse a été fournie à partir du cache dans la mémoire locale.

Vous devez désactiver le mode de débogage lorsque vous avez fini de travailler avec systemd-resolved, car il créera un fichier journal très volumineux sur un système occupé. Vous pouvez désactiver la journalisation de débogage en exécutant la commande suivante

sudo systemctl edit systemd-resolved.service

et en supprimant les deux lignes que vous avez ajoutées, puis en sauvegardant et en quittant l’éditeur.

Utiliser des requêtes DNS sécurisées

systemd-resolved est l’un des rares serveurs DNS actuellement disponibles à supporter à la fois DNSSEC et DNSoverTLS. Ces deux méthodes permettent de s’assurer que vous recevez des informations DNS authentiques (DNSSEC) et que personne ne peut espionner votre trafic DNS lorsqu’il transite sur l’internet. (DoT).

Ces options sont facilement activées en ouvrant le fichier de configuration principal de systemd-resolved avec un éditeur de texte :

$ sudo nano /etc/systemd/resolved.conf

Et en éditant le fichier de manière à ce que les deux lignes suivantes soient définies :

DNSSEC=allow-downgrade
DNSOverTLS=opportunistic

Sauvegardez et quittez l’éditeur, puis rechargez systemd-resolved :

sudo systemctl restart systemd-resolved.service

Tant que le serveur DNS que vous avez configuré supporte DNSSEC et DoT, vos requêtes DNS seront protégées. Les serveurs DNS publics de Google et de Cloudflare supportent tous deux ces protocoles.

Conclusion

Votre système est maintenant configuré pour effectuer rapidement et efficacement des requêtes DNS, même lorsque le serveur DNS de votre FAI ne répond pas aussi rapidement qu’il le devrait. En outre, votre vie numérique est plus sûre car vous utilisez les derniers protocoles DNS sécurisés pour protéger vos requêtes DNS.

Si vous êtes un passionné de Linux et que vous souhaitez en savoir plus, consultez ce fantastique cours en ligne.