web-dev-qa-db-fra.com

Mise en cache DNS sous Linux

Je suis confus au sujet de la mise en cache DNS. J'écris un petit serveur proxy direct et souhaite utiliser le cache DNS du système d'exploitation sur un système Linux.

Si je comprends bien, il existe une mise en cache DNS au niveau du navigateur. Ensuite, il y a la mise en cache DNS au niveau du système d'exploitation (Windows l'a. Je ne sais pas si les distributions Linux l'ont par défaut).

Alors, comment un navigateur/serveur proxy utilise-t-il la mise en cache DNS du système d'exploitation? J'essaie de savoir si je peux compter sur Linux pour la mise en cache DNS au lieu de le faire moi-même dans mon proxy.

Merci

50
agent.smith

Sous Linux (et probablement la plupart des Unix), il n'y a pas de mise en 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 c'est cassé . Le résultat pratique est que votre système linux ne fait 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 une fonctionnalité déjà existante en dehors de votre application.

Si un utilisateur final utilisant votre logiciel doit disposer d'une mise en cache DNS parce que la charge de la requête DNS est suffisamment importante pour être un problème ou que la RTT sur le serveur DNS externe est suffisamment longue pour poser un problème, ils peuvent installer un serveur DNS en mise en cache tel que - Non consolidé sur le même ordinateur que votre application, configuré pour mettre en cache les réponses et transférer les données manquantes aux résolveurs DNS habituels.

74
Celada

Voici deux autres progiciels pouvant être utilisés pour la mise en cache DNS sur Linux:

  • dnsmasq
  • bind

Après avoir configuré le logiciel pour le transfert et la mise en cache DNS, définissez le résolveur DNS du système sur 127.0.0.1 dans /etc/resolv.conf.

Si votre système utilise NetworkManager, vous pouvez essayer d'utiliser l'option dns=dnsmasq Dans /etc/NetworkManager/NetworkManager.conf Ou modifier vos paramètres de connexion en mode Automatique (adresse uniquement), puis utiliser un script dans le répertoire /etc/NetworkManager/dispatcher.d 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.

22
Zan Lynx

Vous avez ici à votre disposition un exemple de mise en cache DNS dans Debian en utilisant dnsmasq.

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 référence utilisant 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 en utilisant votre DNS en cache local:

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}'
9
Tk421

Firefox contient un cache DNS. Pour désactiver le cache DNS:

  1. Ouvrez votre navigateur
  2. Tapez about: config dans la barre d'adresse
  3. Faites un clic droit sur la liste des propriétés et sélectionnez Nouveau> Entier dans le menu contextuel.
  4. Entrez 'network.dnsCacheExpiration' comme nom de préférence et 0 comme valeur entière

Lorsqu'il est désactivé, Firefox utilisera le cache DNS fourni par le système d'exploitation.

2
Focus Linux