Résolution DNS : faites-la maison !

Posté le 7 février 2010 @ 12 h 47 min par Vanaryon

Une chose m'a traversé l'esprit ce matin même : pourquoi aller utiliser un fournisseur de résolution DNS externe (OpenDNS, les DNS de votre FAI, etc...), quand on peut le faire soi-même ? Par "soi-même", je veux dire "le faire en local", avec un résolveur bien à nous qui va aller interroger les serveurs DNS racines pour remonter jusqu'à ce que l'on veut résoudre.

Au cours de ce billet, vous allez apprendre à installer Bind9 puis l'utiliser (uniquement pour la résolution, parce-qu'il peut faire bien plus...). Ceci peut paraître une mission impossible pour les débutants de Linux. Mais non ! En deux étapes nous auront un serveur DNS fonctionnel, pour peu que vous n'ayez pas de pare-feu bloquant le port 53 en sortie (en entrée ça ne fait rien, on n'utilise Bind9 que pour résoudre) !

Les avantages à cela ? Faire un maximum de choses vous-même, en local. Ça peut accélérer le temps de résolution DNS et protèger votre vie privée car aucun log de résolution contenant votre IP ainsi que l'hôte demandé n'est conservé sur un serveur distant. S'il devait l'être, ce serait sur votre machine ! Aussi, vous ne serez plus dépendant d'un fournisseur de service pouvant vous censurer certains domaines (vous resterez sur un réseau neutre à ce niveau !).

La première chose à faire est : installer Bind9 ! Si vous utilisez Ubuntu voire Debian, un simple clic sur ce lien vous invitera à installer le paquet bind9 (avec sa dépendance bind9utils). Et voilà, le résolveur DNS est actif et fonctionne !

Ensuite, il vous suffit de supprimer toutes les lignes de votre resolv.conf (/etc/resolv.conf) avec un éditeur de texte comme nano puis d'y mettre :

nameserver 127.0.0.1

Mais ce n'est pas la meilleure solution, ou du moins une solution très durable : en effet, sur une Ubuntu Desktop, c'est le Network Manager qui gère les serveurs de noms. Ce que vous devriez plutôt faire, c'est de vous rendre dans : Système/Préférences/Connexions réseau puis de modifier toutes les connexions que vous avez dans tous les onglets (Filaire, Sans fil, etc...), en faisant, pour chacune d'entre-elles :

  1. Cliquez sur la connexion à modifier ;
  2. Bouton "Modifier" ;
  3. Onglet "Paramètres IPv4" (et aussi IPv6 si vous l'utilisez) ;
  4. Méthode : Adresses automatiques uniquement (DHCP) ;
  5. Serveurs DNS : 127.0.0.1

Puis appliquez les modifications. Si la connexion est partagée entre tous les utilisateurs, un mot de passe administrateur vous sera demandé.

Une fois que vous avez modifié toutes les connexions disponibles sur votre machine, il va falloir vous déconnecter du réseau en cliquant sur sur les deux prises branchées à gauche de l'horloge de la barre du haut de GNOME, puis : Se déconnecter.

Enfin, reconnectez-vous à la connexion à laquelle vous étiez précédemment connecté, puis ouvrez un terminal (Applications/Accessoires/Terminal) et entrez :

host vanaryon.eu

Si vous avez une réponse du genre : "vanaryon.eu has address XXX.XX.XXX.X", c'est que votre serveur de résolution marche ! Vous pouvez aussi essayer avec google.fr ou un autre domaine, c'est exactement la même chose.

Dans le cas contraire, il va falloir voir du côté de votre routeur (généralement ou afin de voir si le port 53 n'est pas bloqué pour la sortie en TCP et UDP), ou encore du pare-feu de votre distribution Linux.

Notez que si vous n'arrivez toujours pas à avoir de réponse DNS avec les nouveaux paramètres, il vous suffit de repasser toutes les connexions en "Automatique (DHCP)" dans les onglets "Paramètres IPv4" et "Paramètres IPv6" afin de retrouver vos anciens paramètres.

Petit plus : pour vider le cache de Bind9 (ça peut vous servir parfois), utilisez la commande :

sudo rndc flush

Envie d'aller plus loin ? Je vous ai déniché quelques liens intéressants :

Les rétroliens

  1. Ping : Résolution DNS : faites-la maison ! « Rappels utiles Linux le 10 février 2010
  2. Ping : Trucs et astuces – Réseau – Réaliser soi-même la résolution DNS avec bind9 - Tip-Tux le 20 février 2010

Les commentaires

  1. Goldy
    7 février 2010 à 13:16

    Il faut préciser quelques petites choses.

    1) si vous utilisez un laptop, installer bind9 sur celui-ci pourra avoir pour effet d'empêcher l'utilisation de certains hotspot wifi qui utilisent le serveur dns de la connexion pour vous renvoyer vers la page le login, j'ai eu par exemple des soucis avec ozone, donc il faut plutôt éviter d'installer un serveur de dns sur un laptop.

    2) si vous utilisez un réseau local, il peut être préférable d'avoir un serveur sur le réseau qui centralise la totalité des requêtes dns de l'ensemble des utilisateurs. Dans ce cas il est très important si vous n'utilisez pas l'ipv6 de le désactiver dans les options car cela risque de poser des problèmes de lenteurs de connexion pour les autres utilisateurs (et particulièrement s'il y en a qui utilisent windows). Pour cela il faut modifier le fichier /etc/default/bind9 et rajouter l'option -4 aux OPTIONS. Il faudra ensuite modifier les options de votre routeur pour définir comme serveur DNS l'ip local du serveur.

  2. px
    7 février 2010 à 14:10

    Bonjour,

    Pourquoi sortir la grosse artillerie (bind9)?

    Voici comment je procède (sous Debian):
    - installer unbound (apt-get install unbound)
    (unbound - validating, recursive, caching DNS resolver)

    - ouvrir le fichier /etc/dhcp3/dhclient.conf et modifier:
    prepend domain-name-servers 127.0.0.1, xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx
    (xxx.xxx.xxx.xxx sont les adresses IP soit du FAI, soit de la box)
    - dans la ligne request supprimer domain-name-servers

    Via ce fichier, il est possible de fixer les serveurs DNS selon l'interface réseau (eth0, ath0, wlan0), ceci pour répondre au problème posé par les hotspots wifi publics.

    Sinon, si on a un petit serveur Linux dans notre réseau local (c'est mon cas), on peut installer dnsmasq qui a l'avantage de faire office de serveur cache dns et de serveur dhcp; et il est facilement configurable (/etc/dnsmasq.conf).

    mes deux cents.

    Bonne journée.

  3. Vanaryon
    7 février 2010 à 14:20

    Oui en effet px, je parlais ici de Bind9 parce-que c'est le seul que je connais bien. Unbound, j'en avais entendu parler. Après c'est une question de choix, merci d'avoir proposé cet autre résolveur !

  4. flo
    7 février 2010 à 16:51

    Merci pour ce tuto.
    Au final, on sait pas trop se que le DNS du FAI fait des infos.
    Un peu d'indépendance en + ne peut pas faire de mal.

  5. Vanaryon
    7 février 2010 à 17:20

    Oui, bon, ce n'est pas la raison principale pour laquelle j'ai changé de résolveur DNS (pour moi c'était plutot pour le temps gagné : les infos n'ont pas besoin de passer par un serveur DNS supplémentaire, ceci est fait en local).

    Mais c'est vrai que quand on considère l'aspect vie privée, et même connaissances que ça nous apporte, c'est plutôt positif oui. :)

  6. Refuznik
    7 février 2010 à 17:23

    Surtout ça évite les dns menteurs mis en place par vos fournisseur d'accès neuf et orange (cette semaine pour ce dernier).

  7. Vanaryon
    7 février 2010 à 17:26

    Ah oui ? Je ne savais pas que Orange commençait à faire ça. C'est le truc que je reprochait à OpenDNS, de faire une sorte de suggestion lors d'une erreur DNS. Le soucis c'est qu'ils peuvent y mettre de la publicité et ça pourrait perturber le fonctionnement de certains programmes.

    Comment ils savent qu'il y a un NORECORDS avec ça ? De toutes manières, Orange pour moi saÿlemal :)

  8. jérome
    7 février 2010 à 22:17

    Il existe aussi: pdnsd

  9. Mitch
    8 février 2010 à 18:34

    Comment on peut vérifier que ça marche effectivement ? genre une commande qui permet de tracer que bind a bien été interrogé ...

  10. Vanaryon
    8 février 2010 à 19:50

    : eh bien tout simplement si tu utilises la commande host vanaryon.eu (par exemple), tu verras un temps de latence avant de résoudre, puis tu le refais une fois et hop plus de temps de latence : c'est le cache Bind.

    Ensuite, tu le vides avec la commande : sudo rndc flush

    Puis tu refais host vanaryon.eu et tu revois le temps de latence. Convaincu ? Et pis c'est bien bind qui est interrogé parce-que si tu le désinstalles après avoir tout réglé, tu verras que ta machine ne pourra plus résoudre de domaines :)

  11. Storm
    8 février 2010 à 19:58

    : Sinon, tu peux utiliser la commande "dig". Par exemple, dig vanaryon.eu En bas, tu verras une ligne SERVER: XXX.XXX.XXX.XXX, qui t'indiquera l'adresse IP du serveur interrogé. Si tout se passe bien, tu devrais avoir 127.0.0.1

  12. Vanaryon
    8 février 2010 à 20:08

    En effet Storm, j'avais oublié cette commande (utilisée une fois il y a longtemps...), tu viens de me rappeler quelque-chose, c'est fort utile ;)

    Plus besoin de provoquer un faux servfail OpenDNS pour voir les serveurs interrogés ! http://guide.opendns.com/?url=vanaryon.eu&servfail

  13. Herve
    8 février 2010 à 20:10

    Que faut-il mettre en lieu et place de 127.0.0.1 pour "Paramètres IPv6" ?

  14. Vanaryon
    8 février 2010 à 20:16

    La même chose, vu que c'est un hôte local. Mais ne met ça que si tu as l'IPv6 et si ce n'est pas déjà tout grisé dans cet onglet !

  15. zo3
    11 février 2010 à 07:20

    Sympa ton astuce, j'ai mis ça en place chez moi et ça marche nickel :D

  16. Max
    13 février 2010 à 18:40

    Ça m'a l'air d'une bonne idée le DNS maison (un avis éclairé serait le bienvenu). En tout cas c'est très simple à mettre en place.
    Par contre une petite considération sur la sécurité (même si j'y connais pas grand chose) : il serait bon de limiter les IP qui peuvent se connecter à bind. En effet, pour un serveur perso, écouter seulement les requêtes de localhost (ou du réseau local) est préférable.
    Il suffit de modifier la config de /etc/bind/named.conf.options et de changer
    listen-on-v6 { any; };
    en
    listen-on { 127.0.0.1; }; //pour écouter localhost seulement.

    Un petit netstat -latupe pour vérifier...

  17. Vanaryon
    14 février 2010 à 12:38

    @Max : de toutes manières quand le port 53 est fermé en entrant sur le pare-feu ou la box, c'est suffisant, il n'y aura que le réseau local à la limite qui pourra résoudre depuis Bind9 !

  18. non
    24 février 2010 à 19:46

    Oui sauf que si tous le monde fais comme ca les sevrer de base qui gèrent ca font explosé.

    Si il y a des "sous" server DNS c'est pas pour rien.

    Impressionnant le nombre de conseil de bêtises que l'ont peut trouver quand même…

  19. Vanaryon
    24 février 2010 à 20:13

    @non : eh bien tu sais, ils peuvent augmenter la capacité de leur infrastructure pour répondre à la demande. L'indépendance ça n'a pas de prix... Et c'est justement ce à quoi je veux conduire par ce billet.

    Si je te dis "crée-toi un skyblog plutôt que d'héberger ton blog dotclear sur ta machine parce-que ton empreinte carbone sera plus réduite" (car hébergement en plus grande quantité), c'est exactement la même chose. Là tu serais prêt à faire ça ?

  20. non
    25 février 2010 à 00:14

    Mouai.

    Cela dit j'ai essayer et j'ai pas vu de gain en rapidité.

  21. Vanaryon
    25 février 2010 à 10:49

    Ça dépend ce que tu avais en serveur DNS avant cela, et ça dépend aussi de ton FAI, du temps de réponse de ta connexion. Il y a plein de facteurs, moi je sais que avec Orange, certaines requêtes DNS sont lentes : pour les dig sur tous les serveurs racines pour test par exemple :

    for i in {a..g} ; do time dig +short vanaryon.eu -$i.taloha.tk ; done

    Et là ça rame comparé à chez quelqu'un d'autre qui a pas Orange. Mais niveau résolution chez moi c'est plus rapide !

  22. Question de culture G
    26 février 2010 à 17:34

    Ca veut dire que par défaut, si ce n'est pas dans son cache, il va interroger
    http://fr.wikipedia.org/wiki/Serveur_racine_du_DNS#Les_serveurs_racines_du_DNS
    ?

    (plutôt pour m'abstraire des intermédiaires que pour la vitesse)

  23. Vanaryon
    26 février 2010 à 17:52

    Voilà c'est ça ! Un petit exemple pour résoudre vanaryon.eu (avec les paramètres DNS actuels de mon domaine), ça donne de manière schématique ça :

    vanaryon.eu ?
    -----------------
    tk ? -> (a-m).root-servers.net -> (a-g).taloha.tk
    vanaryon ? -> (a-g).taloha.tk -> ns(1-2).tuxfamily.net
    www ? -> ns(1-2).tuxfamily.net -> 212.85.158.4

    Et ton ordinateur peut se connecter à mon weblog car il a l'IP du serveur : 212.85.158.4 !

  24. Question de culture G
    27 février 2010 à 17:37

    Ah ok merci, niquel, c'est tout à fait le fonctionnement que je veux ^^

  25. Dilabo
    24 avril 2010 à 00:33

    Bien le bonjour, merci pour le petit tuto.

    Juste une petite question, tu es sur que de base comme ca sans rien config le serveur bind9 crée bien une base de donnée des adresses déjà visitées?

    Car si a chaque fois que je vais sur le même site il doit redemander au serveur dns mondiaux l'ip c'est pas super.

    Si il crée bien un fichier cache, je serais intéressé de savoir ou il se trouve.

    Merci !

  26. Vanaryon
    24 avril 2010 à 10:49

    : ouep, là c'est sûr étant donné que je dois vider son cache parfois car il me sert des vieux DNS (quand je fais des modifications sur mes domaines).

    Par contre je ne sais pas où se trouve le fichier cache...

  27. Dilabo
    24 avril 2010 à 12:02

    Hello, j'ai trouvé quelques réponse.

    En gros il garde tous les DNS en cache dans la mémoire RAM

    On peu le vider comme tu dis grâce a #sudo rndc flush

    Le problème pour moi c'est que des qu'on reboot le serveur ou qu'on redémarre bind9 tous les DNS en mémoire son vidé et tous dois être redemandé au serveur racine mondiaux donc on est tout aussi tracé que sur un dns style opendns (qui je vous l'accorde ne dois pas l'être beaucoup) et a mon avis les serveurs DNS mondiaux ne doivent pas être des plus rapide comparé a un google dns.

    Une solution pourrait être de sauvegarder le fichier cache de la ram sur le disque dur grace a #sudo rndc dumpdb
    Il va en effet écrire tout le fichier dans /var/cache/bind

    Mais je n'ai pas encore trouvé ou ce n'est peu être pas possible de recharger ce fichier dump en mémoire après un reboot.

    Si vous trouvez, merci de partager :)

  28. Vanaryon
    24 avril 2010 à 12:10

    : sinon tu n'éteins jamais ton PC mais tu le met en mode hibernation, ça devrait pas vider la RAM.

    Après, tu sais, si tu utilises majoritairement les .net, .com, il ne va faire la requête qu'une seule fois à froid pour avoir l'IP de ceux de Verisign qui gère ces deux TLD, ça n'est pas si lourd que ça.

  29. gnuzer
    4 janvier 2011 à 16:40

    : Comme le dit @jérome , il existe aussi pdnsd, un serveur qui écrit le cache sur le disque dur, si j'ai bien compris ceci : http://en.wikipedia.org/wiki/Pdnsd

    Mais après je ne sais pas si :

    1) ce logiciel est plus ou moins avantageux que bind9 ou unbound (notamment en terme de consommation de ressources) ;

    2) la mention "pdnsd is designed to be highly adaptable to situations where net connectivity is slow, unreliable, unavailable, or highly dynamic, as is the case with wifi hotspots or dialup internet." sous-entend ou non que pdnsd est capable de répondre au problème des hotspots wifi soulevé par .

  30. Nounoune
    2 juin 2011 à 01:38

    Salut,
    j'utilise les dns maison depuis quelques temps déjà mais j'ai été confronté à un problème. Lors d'une mise à jour de bind9 une erreur était survenue. J'avais pu résoudre mon problème en désactivant (grâce à system jobs) bind9 durant la MAJ.

    Hors je me retrouve aujourd’hui confronté au même problème mais par malheur sous Ubuntu10.10 system jobs n'est plus fonctionnel et je n'arrive pas à finaliser cette p**** de maj...Peux tu me prêter main forte?

  31. Vanaryon
    2 juin 2011 à 08:48

    Salut,

    Je suis désolé, mais je ne connais même pas System Jobs !

    Tu devrais juste éviter de faire la mise à jour de bind9, peut-être en l'installant d'un paquet .deb hors dépôt pour éviter d'avoir la MAJ proposée à chaque fois.

    Bonne chance !

  32. Anonyme
    2 juin 2011 à 10:50

    OK c'est tout de même à creuser pour tous ceux qui utilisent bind9... C'est complètement con de ne pouvoir faire de Maj parceque le service est actif et inarétable...

Laisser un commentaire