# Cache DNS local permanente avec pdnsd

**URL:** <https://www.debian-fr.org/t/cache-dns-local-permanente-avec-pdnsd/66509>\
**Category:** Trucs et Astuces\
**Created:** [Février 21, 2016, 9:48 UTC](https://www.debian-fr.org/t/cache-dns-local-permanente-avec-pdnsd/66509 "2016-02-21T21:48:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![cedric058](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/d2c977/32.png) [@cedric058](https://www.debian-fr.org/u/cedric058)\
**Post date:** [Février 21, 2016, 9:48 UTC](https://www.debian-fr.org/t/cache-dns-local-permanente-avec-pdnsd/66509/1 "2016-02-21T21:48:00Z")

</div>

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:

```auto

```

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)------

```auto

```

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)------

```auto

```

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)------

```auto

```

Modifier la ligne suivante comme ci-dessous:  
[ul]START\_DAEMON=yes[/ul]  
Commenter la ligne suivante:  
[ul]#AUTO\_MODE=recurse[/ul]

4)------

```auto

```

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](http://yahoo.fr) | grep “Query time”

# dig [yahoo.fr](http://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](http://yahoo.fr) | grep “Query time””, doit retourner aproximativement la même valeur.

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

```auto

```

Pour visualiser la cache de pdnsd:

```auto

```

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]

```auto

```

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]

```auto

```

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

```auto

```

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](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:

```auto

```
