[Tutoriel] Qu'est-ce qu'un serveur DNS et comment en installer un ?

Publié le 30 juin 2018

DNS Sécurité Informatique Tutoriel Services

 Attention, cet article date de plus d'un an. Les informations qu'il contient sont peut-être obsolètes. 

Bonjour à tous !

Aujourd’hui, on va parler de DNS. On commencera par voir ce qu’est un serveur DNS en commençant par les bases. Ensuite, on verra comment installer un serveur DNS, dans notre cas Unbound. J’avais un mauvais souvenir lors d’une installation il y a quelques années, il s’avère finalement que c’est pourtant super facile à l’heure actuelle ! Si vous êtes intéressé par l’explication des serveurs DNS, la première (et éventuellement la deuxième) partie sont faites pour vous. Si vous voulez passer directement à l’installation, c’est ici que ça se passe.

C’est quoi un serveur DNS ?

Pour comprendre ce qu’est un serveur DNS, il est important de commencer par voir comment fonctionne internet.

Les adresses sur Internet

Commençons donc par les bases. Je vais essayer de vulgariser le concept pour que ce soit compréhensible par tout le monde.

Pour accéder à ce site, il existe de nombreux moyens, l’un d’eux consiste à taper son adresse dans la barre d’adresse de votre navigateur. Vous tapez donc www.pofilo.fr. Votre ordinateur va ensuite demander à votre box de lui donner le contenu disponible à cette adresse. Votre box va alors faire appel à un annuaire pour convertir cette adresse facile à retenir en une adresse avec des chiffres. Cet annuaire va donc faire une correspondance entre www.pofilo.fr et l’adresse IP 149.202.52.52. Votre box connait alors l’adresse dont elle a besoin pour satisfaire votre demande et va effectuer une requête qui va parvenir sur mon serveur ; c’est comme si vous envoyez une lettre de Toulouse à Paris, il y a divers chemins possibles mais peu importe, on veut seulement que la lettre arrive.

Pour revenir sur les adresses IP, c’est un peu comme un numéro de téléphone dans le sens où on peut géolocaliser l’adresse physique à partir du numéro.

Par exemple les 2 premiers numéros téléphoniques français découpent la France métropolitaine en 5 parties, et les 2 suivants délimitent des zones encore plus précises !

Indicateurs téléphoniques en France Indicateurs téléphoniques en France 2

Quand quelqu’un nous appelle depuis un téléphone fixe, on pourrait dans la théorie savoir d’où l’appel vient ! Je dis bien en théorie puisqu’avec le nombre de lignes qui augmentent, les possibilités de conserver les numéros lors des déménagements etc, cette répartition est de moins en moins vraie.

Pour les adresses IP, c’est grosso-modo le même principe à l’échelle mondiale. On peut normalement localiser une IP pour savoir dans quel continent et quel pays elle est utilisée, voire plus précisément dans certains cas. Si vous voulez connaître votre adresse IP actuelle, vous pouvez aller sur ip.pofilo.fr (Il se peut que cette adresse change si vous réessayez plus tard ou si vous redémarrez votre box. C’est normal car certains fournisseurs délivrent des IP dynamiques (contraire de statique), c’est-à-dire qu’il va attribuer une adresse à votre Box à son démarrage et votre Box va la libérer quand elle s’arrête).

Il existe par exemple des sites pour localiser des adresses IP (IP Tracker par exemple). Si vous essayez avec celle de mon serveur, vous verrez qu’il se situe en France.

Les serveurs DNS

DNS = annuaire

Je vous ai parlé d’un annuaire permettant de faire correspondance entre www.pofilo.fr et 149.202.52.52. Cet annuaire, c’est tout simplement un serveur DNS (Domain Name System, soit système de noms de domaine pour les francophones).

Il faut savoir qu’il existe des serveurs DNS racines gérés par 12 organisations différentes (2 en Europe, 1 au Japon et 9 aux États-Unis d’Amérique). Quel que soit le serveur DNS que vous utilisez (par exemple si vous utilisez internet depuis une Box Orange, celle-ci va utiliser un serveur DNS appartenant à Orange), celui-ci va se renseigner auprès des serveurs racines.

Cette dernière phrase est en fait en partie fausse. Il faut se rendre compte que pour chaque site différent où vous allez, vous allez générer des requêtes DNS sur les serveurs racines. Même si les 12 organisations gèrent au final plus de 900 serveurs répartis dans à travers le monde (source), on est quand même très nombreux à surfer sur le net au quotidien à travers le monde. Une des solutions pour réduire considérablement les requêtes vers ces serveurs racines est ce que l’on appelle le cache.

Le cache

Reprenons notre exemple. Vous êtes chez Orange et vous voulez accéder à mon site. Le serveur DNS de Orange va demander au serveur racine qui va retourner 149.202.52.52 comme étant l’adresse IP de mon serveur. 5 minutes après, votre cousine qui est également chez Orange et qui habite dans la même ville que vous va aussi sur mon site (sur vos conseils bien sur !). Le serveur DNS de Orange va alors devoir refaire la traduction de www.pofilo.fr. Cependant, il se souvient de cette adresse, il va donc directement retourner l’adresse IP sans passer par les serveurs racines. Il y a en effet très peu de chance que mon serveur ait changé d’adresse entre temps, cette information peut alors être stockée en cache.

Selon la configuration du serveur DNS, le cache peut être défini de quelques minutes à plusieurs heures. Au final, votre Box comporte elle aussi un serveur DNS et quand elle ne connait pas l’adresse (ne la possède pas en cache), elle va demander à Orange qui lui va éventuellement demander aux serveurs racines. Votre Box possède donc également un cache (pas la peine de demander à Orange l’adresse IP de votre moteur de recherche toutes les 30 secondes). Pour pousser le vice encore plus loin, votre navigateur possède également un cache notamment pour les raisons que je vais évoquer dans le petit paragraphe suivant !

L’intérêt du cache est donc de soulager les serveurs DNS de plus haut niveau. Cependant, un autre intérêt qu’apporte le cache est le gain en performances et rapidité. Si votre navigateur ou votre Box connait déjà l’adresse que vous souhaitez, ça évite de faire des requêtes vers les serveurs DNS de plus haut niveau. Moins de requête équivaut logiquement à plus de rapidité.

Petite liste des serveurs les plus connus

Pendant un long moment, Google proposait un serveur DNS sous l’adresse 8.8.8.8 (8.8.4.4 adresse secondaire). Les administrateurs systèmes n’ont pas fini de voir cette adresse un peu partout ! Pourquoi ? Parce que c’est fiable (comme relativement tous les services Google en activité) mais aussi parce que l’adresse est ultra facile à retenir.

Il n’est en effet pas rare que pour tester si un ordinateur possède bien une connexion à internet, on commence par faire un ping sur google ping google.fr. (Un ping consiste à vérifier si l’on peut établir la connexion avec un serveur ou non). Le fait que le ping sur google.fr ne fonctionne pas ne veut pas dire que c’est uniquement un problème de connexion mais peut-être un problème DNS. C’est pourquoi cette tentative est souvent suivie d’un ping 8.8.8.8. Si ça fonctionne, alors le problème est côté DNS, sinon côté internet (pare-feu, …).

Pour revenir aux DNS les plus connus, voici tout d’abord une liste des plus connus classés selon leurs performances à travers le monde.

Listes des DNS classés selon leurs performances mondiales en juin 2018
Listes des DNS classés selon leurs performances mondiales en juin 2018

Depuis, on a eu la mode des DNS facile à retenir avec 9.9.9.9 et 1.1.1.1. Bref, je vous laisse retrouver ici les principaux DNS avec leurs spécificités propres.

Listes des DNS classés selon leurs performances mondiales en juin 2018
Listes des DNS classés selon leurs performances mondiales en juin 2018

Pourquoi installer son propre serveur DNS ?

Quand on accède à internet de chez soi, toute la partie DNS est transparente pour l’utilisateur, c’est la même chose depuis votre smartphone ou un Hotspot de Wifi public. Dans ce cas, pourquoi s’embêter à posséder son propre serveur DNS ?? (Ce questionnement me fait penser à un article récent de @Dryusdan)

On peut alors retrouver plusieurs raisons (j’en oublie sûrement !).

Confidentialité et vie privée

Au niveau de la confidentialité, si vous demandez à votre serveur DNS de vous traduire l’URL d’un site coquin, il saura que vous fréquentez ce genre de sites. Niveau vie privée, c’est donc pas le top.

DNS menteur

Un autre argument recevable concerne ce qu’on appelle les DNS menteurs. Par là, on entend un DNS qui va vous mentir sur les réponses. Par exemple un site de téléchargement (The Pirate Bay) s’est vu être bloqué. Comment le relate NextInpact, la tâche a finalement été aux gros FAI (Fournisseurs d’Accès à Internet) de bloquer ce site (et ses redirections). Cela se fait donc au niveau DNS, si un utilisateur rentre cette adresse, le DNS va répondre qu’elle n’existe pas.

Installation de Unbound

Pourquoi Unbound ?

On retrouve 2 principaux serveurs: Bind9 et Unbound. Ne connaissant pas Bind9, c’est donc un choix arbitraire entre les 2. De plus, Unbound tourne depuis 3-4 ans sur mon serveur, j’ai jamais eu le moindre souci.

L’installation pour Debian

Installation

Cette installation a été réalisée sous Debian, ça doit être relativement la même chose pour Ubuntu (et pareil pour CentOS avec YUM je présume).

  1. On commence par installer le paquet: sudo apt-get install unbound dnsutils (vous verrez plus tard pourquoi on installe dnsutils)
  2. On se rend dans le dossier de configuration: cd /etc/unbound/unbound.conf.d
  3. On fait une sauvegarde de la configuration par défaut: mv root-auto-trust-anchor-file.conf root-auto-trust-anchor-file.conf.save a. On pourrait supprimer ce fichier car il ne contient pas grand-chose, mais par principe je préfère le garder au chaud. De plus, dans le fichier /etc/unbound/unbound.conf, on voit que les fichiers de configurations chargés doivent avec l’extension .conf, notre fichier de configuration aura donc cette extension.
  4. On crée un nouveau fichier de configuration: vim perso.conf
  5. On y met la configuration suivante. Si vous avez des points d’amélioration sur cette configuration, n’hésitez pas à le partager en commentaire ou en faisant une Pull Request sur Git.
  6. Il faut désormais changer l’adresse du DNS utilisée par notre serveur (ou ordinateur). Cette méthode peut différer selon les distributions/versions. a. vim /etc/dhcp/dhclient.conf b. On édite la ligne qui contient supersede domain-name avec supersede domain-name-servers 10.8.0.1; c. Par sécurité, on décommente la ligne timeout 60;
  7. On crée le fichier de log: touch /var/log/unbound.log
  8. On donne les bons droits à ce fichier: chown unbound:unbound /var/log/unbound.log
  9. On ajoute le fichier indiquant les serveurs racines: vim /var/lib/unbound/root.hints et y mettre le contenu disponible à cette adresse (j’en ai fait une copie sur mon serveur au 31 mai 2018).
  10. On active unbound pour qu’il démarre avec le serveur/ordinateur: systemctl enable unbound
  11. On redémarre le serveur/ordinateur.

L’installation est terminée, voyons si tout se passe bien :)

Tests de l’installation

On s’assure déjà de retrouver nameserver 10.8.0.1 dans /etc/resolv.conf. En effet, je préfère toujours faire un redémarrage total de la machine pour m’assurer qu’un autre programme ne touche pas également au fichier /etc/resolv.conf. Ça évite de croire que ça marche bien, et 3 mois après, tu fais des mises à jour de ton serveur, tu le redémarres et tu n’as plus internet ! Oui, c’est du vécu :)

On va regarder si la configuration fonctionne avec la commande dig wikipedia.fr (je vous avais fait installer dnsutils pour cette commande, un apt-get sans serveur DNS fonctionnel n’aurait pas pu vous trouver où aller chercher le paquet). On se moque un peu que ce soit l’adresse de Wikipédia ou de Tartempion, mais je voulais un site assez neutre ^^

Parmi les quatre dernières lignes retournées par la commande, vous devriez trouver:

;; Query time: 38 msec
;; SERVER: 10.8.0.1#53(10.8.0.1)

Essayez de faire la commande une seconde fois, le temps de réponse devrait être à 0 ms grâce au cache.

Voilà, votre DNS est désormais prêt :)

Personnellement, à la fin du fichier de configuration, j’aime bien rajouter (changez l’adresse IP, c’est celle de mon serveur ^^):

local-zone: "abc.xyz" redirect
local-data: "abc.xyz A 149.202.52.52"    

Pour ceux qui ne sont pas familiers avec cette syntaxe, ça veut dire que je demande à mon serveur DNS de rediriger les requêtes abc.xyz vers 149.202.52.52.

  • Pourquoi abc.xyz ? Parce que c’est facile à retenir.
  • Pourquoi 149.202.52.52 ? Parce que c’est l’adresse de mon serveur, je suis censé retomber sur mon site.
  • Pourquoi faire mentir son DNS ? Pour s’assurer qu’il fonctionne quand on l’utilise ! Si je tape abc.xyz et que je tombe sur la page d’Alphabet (société mère de Google), c’est que ma configuration (serveur ou client) n’est pas bonne (ou que j’ai oublié de m’y connecter !).

Faire mentir son DNS

Attends, tu critiques les DNS des FAI qui mentent, tu fais déjà mentir le tien, et tu veux le faire mentir encore plus ? C’est pas de l’hypocrisie ?? Non. Je fais ce que je veux. C’est une réponse débile, mais elle a le mérite d’être claire. Certes je fais mentir mon DNS, mais je contrôle le mensonge.

Le mensonge est une preuve d’intelligence. Boris Cyrulnik.

Pour cela, on va se baser sur cette liste. Elle a l’avantage d’être maintenue par la communauté. On peut également choisir ce que l’on désire bloquer, on peut y mettre une liste blanche, une liste noire et c’est fait en python :)

  1. On se rend dans le dossier de configuration: cd /etc/unbound/unbound.conf.d
  2. On récupère la liste (changer l’URL si vous voulez une autre liste bien sûr) que l’on formate pour Unbound: wget -O- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts | grep '^0\.0\.0\.0' | awk '{print "local-zone: \""$2"\" redirect\nlocal-data: \""$2" A 0.0.0.0\""}' > adslist
  3. On édite le fichier perso.conf en y ajoutant la ligne: include: "/etc/unbound/unbound.conf.d/adslist"

Utiliser Unbound avec OpenVPN

J’avais fait un tutoriel d’installation d’OpenVPN, vous pouvez le retrouver ici. Vérifiez dans la configuration (/etc/openvpn/server.conf) que le serveur soit sur la bonne range d’IP: server 10.8.0.0 255.255.255.0. Après cela, il suffit de changer l’adresse DNS configurée: push "dhcp-option DNS 10.8.0.1". Nous avions mis access-control: 10.8.0.0/24 allow dans la configuration de Unbound, c’était pour autoriser les utilisateurs du serveur VPN à l’utiliser.

Il vous suffit de redémarrer le serveur VPN systemctl restart openvpn et quand vous serez connecté à celui-ci, vous utilisez votre serveur DNS ! Pour le tester, essayez une adresse sur laquelle vous mentez (c’est pour ça que je mentais sur abc.xyz) et regardez le résultat :)

Conclusion

Après cet article relativement long (j’ai mis énormément de temps à l’écrire ^^), vous savez maintenant ce qu’est un DNS et comment en installer un et l’utiliser avec OpenVPN. L’intérêt n’est pas forcément que chacun installe son serveur DNS mais au moins de comprendre ce que c’est. Il est toujours sympa de savoir comment fonctionne ce qu’on utilise au quotidien, non ?

Pour finir, je vous laisse avec un article de Stéphane Bortzmeyer qui conseille notamment à chacun de ne pas installer son DNS sans une bonne raison notamment pour éviter d’éventuelles surcharges sur les serveurs racines.

Commentaires




Ailleurs sur le Web


Home Screen Advantage - Infrequently Noted

A slide from Apple's presentation in Apple v. Epic, attempting to make the claim Epic could have just made a PWA if they didn't like the App Store terms because circa '20 Safari was so capable. LOL. Je n'aurai pas assez de popcorn pour le DM…

via Shaarli le 28 février 2024

800 employés de la poste britannique condamnés à tort à cause d’un logiciel défectueux - Next

En droit anglais et gallois, les ordinateurs sont considérés comme « fiables », sauf preuve du contraire, souligne The Guardian, ce qui « renverse la charge de la preuve normalement appliquée dans les affaires pénales ». Euh, ok !

via Shaarli le 15 janvier 2024

Mise en place et étude d'un Honey Pot SSH (Cowrie) | | Sécurité Informatique | IT-Connect (it-connect.fr) – wallabag

Article intéressant. C'est clairement dans la même démarche que mon article sur les phishing.

via Shaarli le 09 janvier 2024

Généré avec openring


Recettes de gourmands


Meringues

Pratique pour utiliser des blancs d'œufs, car les ingrédients sont au tant pour tant.

via cooking.pofilo.fr le 21 mars 2024

Risotto classique

Vraiment très simple mais le résultat est succulent.

via cooking.pofilo.fr le 28 février 2024

Pain italien

via cooking.pofilo.fr le 17 février 2024

Généré avec openring