Cache DNS local permanente avec pdnsd

Edit: Revu le 06/08/15

Interrêts:
[ul]Accélérer quelque peu votre “trafic” sur internet.
Reduire les requêtes dns sur internet afin de diminuer l’empreinte que vous laissez sur internet.
[/ul]

Inconvénient: (Une solution à ce problème sera proposé à la fin)
[ul]Une ip associée à un nom de domaine, dans la cache local, peut ne plus être d’actualité et empêcher la connection à un site internet.[/ul]

La configuration ci-dessous, est utilisable pour une machine de bureau standard, avec une connexion internet de type box adsl.
Le test a été réalisé sous une Debian Jessie.

0)------
Ouvrez le terminal et tapez:

Le fichier /home/“MON_USER”/dns_en_cours devrait contenir les adresses ip que vous utilisez, pour la résolution des noms de domaine (on s’en reservira plus tard).

1)------

Choisir l’option: Use root servers

A noter, que l’option “-R” n’installe pas les paquets recommandés ("-r" le contaire), ici “resolvconf”.

Si vous souhaitez installer “resolvconf”, passez l’étape 2, et modifiez le fichier “/etc/resolvconf/resolv.conf.d/head” en ajoutant a la fin:
[ul]nameserver 127.0.0.1;[/ul]

2)------

Décommenter la ligne suivante du fichier:
[ul]prepend domain-name-servers 127.0.0.1;[/ul]

Avant d’interroger le dns de votre FAI ou autre, “pdnsd” sera interrogé.

3)------

Modifier la ligne suivante comme ci-dessous:
[ul]START_DAEMON=yes[/ul]
Commenter la ligne suivante:
[ul]#AUTO_MODE=recurse[/ul]

4)------

Modifier les lignes suivantes comme ci-dessous:
[ul]root_server = on;[/ul]
Reportez les adresses ip de “~/dns_en_cours” (ici deux adresses dans l’exemple), et commentez les suivantes avec /* et /:
[ul]ip = 192.168.0.1
, 192.168.1.201
/

, 192.33.4.12
, 128.8.10.90
, 192.203.230.10
, 192.5.5.241
, 192.112.36.4
, 128.63.2.53
*/
;[/ul]

Si vous avez installer “resolvconf”, modifiez la ligne suivante:
[ul]label = “resolvconf”;[/ul]

Je vous suggère de modifier les valeurs “min_ttl” et “max_ttl” (temps de vie minimal et maximal d’une résolution dns).
Ces valeurs influent sur la durée de validité des dns stockés dans la cache (1m: 1 minute , 1d: 1 jour, 1w: 1 semaine):

Par defaut:
[ul]min_ttl = 15m;
max_ttl = 1w;[/ul]
D’après man pdnsd.conf:
[ul]min_ttl = 120;
max_ttl = 1w;[/ul]
En test:
[ul]min_ttl = 1w;
max_ttl = 4w;[/ul]

A noter, si le ttl fourni par le serveur dns, est en dehors des limites fixées par “min_ttl” et “max_ttl”, alors il prendra pour valeur une des ces deux limites.
A noter, plus la valeur de “min_ttl” choisie est élevée, plus l’on risque de se confronter à l’inconvénient mentionné au tout début. Il n’est d’ailleur pas conseillé d’après un man pdnsd.conf, de trop élever cette valeur.

A noter, que l’option “perm_cache” est en kB, à vous de lui donner la taille que vous souhaitez, par defaut 2048 soit 2 Mo.

Voici mon fichier pdnsd.conf:

[code]/* /etc/pdnsd.conf /
/
Debian specific configuration to work as a recursive resolver */

global {
perm_cache = 2048;
cache_dir = “/var/cache/pdnsd”;
run_as = “pdnsd”;
server_ip = 127.0.0.1; // Use eth0 here if you want to allow other
// machines on your network to query pdnsd.
status_ctl = on;
paranoid = on;
min_ttl = 4w; // Retain cached entries at least 15 minutes.
max_ttl = 52w; // One week.
timeout = 10; // Global timeout option (10 seconds).

/* delegation_only = “com”,“net”; */
}

server {
label = “freebox”;
root_server = on;
randomize_servers = on;
ip = 192.168.1.254
/*
, 192.228.79.201
, 192.33.4.12
, 128.8.10.90
, 192.203.230.10
, 192.5.5.241
, 192.112.36.4
, 128.63.2.53

,    192.36.148.17
,    192.58.128.30
,    193.0.14.129
,    198.32.64.12
,    202.12.27.33

*/
;
timeout = 5;
uptest = query;
query_test_name=".";
interval = 30m; // Test every half hour.
ping_timeout = 300; // 30 seconds.
purge_cache = off;
exclude = .localdomain;
policy = included;
preset = off;
}

source {
owner = localhost;
file = “/etc/hosts”;
}

rr {
name = localhost;
reverse = on;
a = 127.0.0.1;
owner = localhost;
soa = localhost,root.localhost,42,86400,900,86400,86400;
}

/* vim:set ft=c: */[/code]

5)------
On redémarre quelques services:

[code]# /etc/init.d/pdnsd restart

ifdown eth0

ifup eth0[/code]

6)------
Testons maintenant:

[code]# aptitude install dnsutils

dig yahoo.fr | grep “Query time”

dig yahoo.fr | grep “Query time”

[/code]
Normalement le second “Query time” doit être moins important que le premier.

Au prochain redémarrage de la machine, un nouveau “dig yahoo.fr | grep “Query time””, doit retourner aproximativement la même valeur.

7)------
Pour obtenir des informations sur la configuration de pdnsd:

Pour visualiser la cache de pdnsd:

Pour plus d’info:

$ man pdnsd.conf $ man pdnsd $ man pdnsd-ctl

8 )------
Solution proposé à l’inconvénient cité au debut.
A noter, que pdnsd propose peut être, une solution “native” à ce problème, autre que celle de choisir un min_ttl pas trop élévé.

Nous alons écrire un petit script pour:
[ul]- Modifier facilement “min_ttl” et “max_ttl” de /etc/pdnsd.conf

  • Redémarrer pdnsd[/ul]

Voila le script:

[code]#!/bin/bash

Configuration

(1m: 1 minute , 1d: 1 jour, 1w: 1 semaine)

Temps min_ttl en fonctionnemnt normal

T1=‘1w’

Temps max_ttl en fonctionnemnt normal

T2=‘4w’

Fin configuration

problem() {
sed -i ‘s/min_ttl.;/min_ttl = 5;/’ /etc/pdnsd.conf
sed -i 's/max_ttl.
;/max_ttl = 6;/’ /etc/pdnsd.conf
/etc/init.d/pdnsd restart
}

normal() {
sed -i ‘s/min_ttl.;/min_ttl = ‘$T1’;/’ /etc/pdnsd.conf
sed -i 's/max_ttl.
;/max_ttl = ‘$T2’;/’ /etc/pdnsd.conf
/etc/init.d/pdnsd restart
}

case “$1” in
problem)
problem
;;
normal)
normal
;;
*)
echo "Usage: $0 { problem | normal }"
exit 1
;;
esac

exit 0[/code]

Utilisation du script:
En cas de problème de résolution sur un site, ouvrez un termial root, et tapez:

Fermer puis réouvrir son navigateur internet.

Attention à la cache dns des navigateurs internet, qui peut également poser problème à ce niveau là.
Un petit nettoyage de la cache du navigateur peut s’avérer utile, sans pour autant la désactiver.
http://www.commentcamarche.net/faq/13384-desactiver-le-cache-dns-de-mozilla-firefox

Je l’ai configurer pour se vider quand je quitte iceweasel, donc je n’ai pas ce problème.
Edition -> Préférences -> Vie privée -> Règles de conservation -> Utiliser les paramètres personnalisés pour l’historique
Cocher: Vider l’historique lors de la fermeture d’iceweasel, et aller dans paramètre juste à coté.

Réessayez de vous connecter sur le site.
Normalement la résolution dns devrai pouvoir se faire.
Une fois la résolution faite, tapez: