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 Cache DNS 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 augmentera 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
Failed to get global data : Unit dbus-org.freedesktop.resolve1.service not found
Vous n' exécutez pas systemd-resolved et devriez passer à la section suivante. Si, au lieu de cela, vous voyez une sortie qui commence par quelque chose comme ce qui suit
Global
Paramètre LLMNR : yes
Paramètre MulticastDNS : yes
Paramètre DNSOverTLS : opportunistic
Paramètre DNSSEC : allow-downgrade
DNSSEC supporté : no
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 et 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
- 8.8.8.8
- 8.8.4.4
DNS public de Cloudflare
- 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 qu'il commence à 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 gérant /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 la 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 avoir été sauvegardé et quitté avec succès
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 indiquez 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
Positif
cache hit for example.com IN A
Indiquent 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. De plus, 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.