Voici deux autres packages logiciels pouvant être utilisés pour la mise en cache DNS sous Linux :
- dnsmasq
- lier
Après avoir configuré le logiciel pour le transfert et la mise en cache DNS, vous définissez ensuite le résolveur DNS du système sur 127.0.0.1 dans /etc/resolv.conf.
Si votre système utilise NetworkManager, vous pouvez soit essayer d'utiliser le dns=dnsmasq
option en /etc/NetworkManager/NetworkManager.conf
ou vous pouvez modifier vos paramètres de connexion sur Automatique (adresse uniquement) puis utiliser un script dans le /etc/NetworkManager/dispatcher.d
répertoire pour obtenir le serveur de noms DHCP, définissez-le comme serveur de transfert DNS dans votre logiciel de cache DNS, puis déclenchez un rechargement de la configuration.
Sous Linux (et probablement la plupart des Unix), il n'y a pas de cache DNS au niveau du système d'exploitation à moins que nscd soit installé et en cours d'exécution. Même dans ce cas, la fonctionnalité de mise en cache DNS de nscd est désactivée par défaut au moins dans Debian car elle est cassée. Le résultat pratique est que votre système Linux n'effectue très probablement pas de mise en cache DNS au niveau du système d'exploitation.
Vous pouvez implémenter votre propre cache dans votre application (comme ils l'ont fait pour Squid, selon le commentaire de diegows), mais je le déconseille. C'est beaucoup de travail, il est facile de se tromper (nscd s'est trompé !!!), il ne sera probablement pas aussi facile à régler qu'un cache DNS dédié, et il duplique des fonctionnalités qui existent déjà en dehors de votre application.
Si un utilisateur final utilisant votre logiciel a besoin d'une mise en cache DNS parce que la charge de la requête DNS est suffisamment importante pour poser un problème ou que le RTT vers le serveur DNS externe est suffisamment long pour poser un problème, il peut installer un serveur DNS de mise en cache tel que Unbound sur la même machine que votre application, configuré pour mettre en cache les réponses et transmettre les échecs aux résolveurs DNS habituels.
Vous avez ici un exemple de mise en cache DNS dans Debian utilisant dnsmasq :Mise en cache DNS locale, article sur ManageaCloud.
Résumé de la configuration :
/etc/default/dnsmasq
# Ensure you add this line
DNSMASQ_OPTS="-r /etc/resolv.dnsmasq"
/etc/resolv.dnsmasq
# Your preferred servers
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
/etc/resolv.conf
nameserver 127.0.0.1
Ensuite, redémarrez dnsmasq.
Test de performance avec DNS 1.1.1.1 :
for i in {1..100}; do time dig slashdot.org @1.1.1.1; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'
Test de référence à l'aide de votre redirecteur DNS de mise en cache locale (dnsmasq) :
for i in {1..100}; do time dig slashdot.org; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'