Installer et configurer son serveur DNS connecté aux serveurs root avec Unbound

De HomeServer.DIY.
Aller à : Navigation, rechercher

Sur un réseau IP chaque machine est joignable par une adresse unique qui est son adresse IP. Elle se présente sous la forme de nombres séparés par des points. Par exemple, 158.88.4.144. Mais les utilisateurs trouvent souvent assez peu pratique de travailler avec ces nombres et préfèrent utiliser un nom de domaine comme homeserver-diy.net. Pour traduire un nom de domaine en adresse IP de façon à ce que la machine cliente s'adresse au bon endroit, elle utilisera le protocole DNS. Pour simplifier, lorsque vous demanderez à votre PC de joindre un nom de domaine, il fera une requête à un serveur DNS qui lui répondra en lui disant à quelle adresse IP correspond à ce domaine. Ce tuto va expliquer comment mettre en place votre propre serveur DNS pour en tirer plusieurs bénéfices.

Sommaire

Informations succinctes à propos du DNS:

Les serveurs DNS sont des machines discutant entre elles afin de se communiquer les correspondances entre nom de domaine et adresses IP. Lors des requêtes faites par un client, les serveurs DNS répondent de façon hiérarchisée pour résoudre les différents composants d'un nom de domaine. Typiquement, "homeserver-diy", ".", "net" (dans un ordre différent). Pour accélérer ces résolutions, les serveurs DNS peuvent s'appuyer sur un système de cache limitant le nombre de requêtes. De ce fait, les performances d'un serveur DNS augmentent dans le temps car celui-ci cherche d'abord à résoudre les noms de domaines via ce cache avant d’interroger ses comparses.

Les avantages d'avoir son propre serveur DNS:

Premièrement, pour ceux qui installeraient un serveur sur leur réseau local, ils réduiront notablement le temps que prennent les requêtes DNS. En effet, en configurant le serveur pour qu'il conserve les données en cache, les requêtes se feront sans intermédiaires et en profitant des performances de votre réseau local. Ce qui rendra la navigation plus fluide.

Ensuite, cela permet de faire en sorte que les requêtes envoyées à notre serveur soient transmises directement aux serveurs racines si il est configuré pour. Le but étant de conserver la neutralité de son internet. En effet, si l'on passe par un serveur DNS contrôlé par un organisme, une société ou un état, il se pourrait qu'ils aient un intérêt à analyser vos requêtes pour diverses raisons (enregistrement de vos habitudes de surf, priorisation ou limitation du débit vers certains sites...). Ils pourraient aussi en profiter pour faire mentir le serveur et par exemple faire disparaitre des sites de votre internet.

Autre point en rapport avec le précédent, la possibilité de censurer l'accès à certains noms de domaine. Non pas pour jouer à l'apprenti dictateur, mais par exemple fermer l'accès aux domaines des régies publicitaires comme googlesyndication.com, doubleclick.net, ads.youtube.com, adserver.yahoo.com. Le principe étant de configurer votre serveur de DNS pour que ces noms de domaines pointent vers une adresse ip ne pouvant rien renvoyer. Ce qui empêchera l'affichage des pubs.

Installation d'Unbound

Unbound est disponible sur les dépôts de la plus part des distributions linux. Dans cet article unbound sera installé sur une debian. L'installation se fait comme tout paquet via le terminal:

aptitude install unbound

Ensuite on télécharge un fichier nommé named.cache et on l'enregistre directement dans le répertoire /var/lib/unbound/ en le renommant root.hints

wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /var/lib/unbound/root.hints

Ce fichier est la liste des serveurs DNS racines sur lequel s'appuiera unbound pour répondre aux requêtes.

Configuration d'unbound

Voici un fichier de configuration qui sera une bonne base pour avoir un serveur DNS bien configuré. Certains choix me sont propres, et j'ai tenté d'être suffisamment explicite dans les commentaires de ce fichier pour que vous puissiez l'adapter via winscp ou votre éditeur de texte favori en ligne de commande. Celui-ci se situe à cet endroit de l'arborescence:

/etc/unbound/unbound.conf
 # Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.
server:
# Les lignes suivantes concernent la configuration de unbound pour les
# performance crypto DNSSEC en utilisant la clé des serveurs root
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Activer les logs
verbosity: 1
#Répondre aux requêtes DNS sur toutes les interfaces réseau.
interface: 0.0.0.0
#Port sur lequel sont fait les requêtes DNS
port: 53
#support de l'IPv4
do-ip4: yes
#support de  l'IPv6
do-ip6: no
#support udp
do-udp: yes
#support tcp
do-tcp: yes
#plages adresse ip autorisée à consulter le serveur dns
#access-control: 192.168.1.26
#plage ip comprise entre 192.168.0.0 et 192.168.255.255
access-control: 192.168.0.0/16 allow
#emplacement du fichier indiquant les infos pour consulter les serveurs DNS root
#fichier à télécharger là à cette adresse: ftp://FTP.INTERNIC.NET/domain/named.cache
root-hints: "/var/lib/unbound/root.hints"
#Cacher les infos sur le serveur DNS
hide-identity: yes
hide-version: yes
#paramètre limitant l'usurpation de DNS
harden-glue: yes
#Requérir les infos DNSSEC pour les zones de confiance
harden-dnssec-stripped: yes
#Options permettant de ne pas prendre la casse en compte lors des requêtes d'url. 
#HomeServer-DIY.net sera traduit en homeserver-diy.net par le serveur et il communiquera la bonne IP
use-caps-for-id: yes
#valeur mini de la TTL en secondes. Ne pas dépasser 1h
cache-min-ttl: 3600
#valeur max de la TTL en secondes.
cache-max-ttl: 86400
#activation du prefetch. Si un requête est faite lorsque la tll expire dans moins de 10% du temps qu'il lui est imparti
#le cache se mettra à jour aussitôt après avoir répondu à la requête.
prefetch: yes
#nombre de core du serveur dns
num-threads: 2
## Tweaks et optimisations du cache
#Nombre de slabs à utiliser . Doit être une puissance de 2 du num-threads.
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8
#Réglage de la taille du cache en Mo:
rrset-cache-size: 51m
msg-cache-size: 25m
#Taille du buffer pour le port UPD en entrée. Evite la perte de message lors des requêtes
so-rcvbuf: 1m
#Renforcer la vie privée des adresses du LAN. Ne mettre que des adresses locales
private-address: 192.168.1.0/24
#Si non nulles, les réponses indésirables ne sont pas seulement signalés dans les statistiques, 
#mais aussi ajoutées à un total cumulé maintenu par thread. 
#Si elle atteint le seuil, un avertissement est affiché et une action défensive est prise, le cache est vidé pour éviter l'empoissonnement DNS. 
#Une valeur de 10000 est suggérée, la valeur par défaut est de 0 (service désactivé).
unwanted-reply-threshold: 10000
#Autorisé à répondre aux requêtes du localhost
do-not-query-localhost: no
#Emplacement du fichier root.key pour utilisation de DNSSEC
#auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Est-ce que cette section supplémentaire, doit être conservée intacte pour les données non-sécurisées
# Utile pour protéger les utilisateurs d'une validation de données potentiellement boguées
# Toutes les données non signés dans la section supplémentaire seront retirés des messages sécurisés
val-clean-additional: yes

Pour vérifier si le fichier de configuration est valide il suffit de saisir :

unbound-checkconf /etc/unbound/unbound.conf

Faire mentir son serveur DNS contre les pubs sur internet

Cette dernière partie va à l'encontre de la neutralité d'internet puisque les machines qui utiliseront votre serveur unbound configuré de la sorte ne verront pas les pages web tel qu'elles le sont en réalité. En effet, de nombreuses pages web contiennent du code permettant d'afficher des pubs et s'appuyant sur les noms de domaines des régies publicitaires de google, yahoo etc. Lors du chargement de la page, votre ordinateur fera donc une requête DNS pour résoudre les domaines de ces régies. Si vous configurez unbound pour qu'il réponde que l'adresse ip de ces domaines soit des ip fausses, les pubs en question ne s'afficheront pas. Dans mon cas je donne une adresse IP de mon réseau local n'étant pas attribuée. Mais celle du localhost de l'exemple fonctionne aussi très bien. Voici ce qu'il suffit d'ajouter à la fin du fichier unbound.conf:

local-zone: "doubleclick.net" redirect
local-data: "doubleclick.net A 127.0.0.1"
local-zone: "googlesyndication.com" redirect
local-data: "googlesyndication.com A 127.0.0.1"
local-zone: "googleadservices.com" redirect
local-data: "googleadservices.com A 127.0.0.1"
local-zone: "google-analytics.com" redirect
local-data: "google-analytics.com A 127.0.0.1"
local-zone: "ads.youtube.com" redirect
local-data: "ads.youtube.com A 127.0.0.1"
local-zone: "adserver.yahoo.com" redirect
local-data: "adserver.yahoo.com A 127.0.0.1"

Cette liste n'est pas exhaustive. Mais le fichier suivant contient un grand nombre de domaines utilisés par un grande nombre de régies publicitaires: Fichier:Regies pub.odt

Vous n'aurez qu'à faire votre choix.

Utilisation

Je ne vais pas détailler la configuration de chaque poste client auquel vous destinez votre serveur DNS car c'est dépendant de votre OS. Sachez que le protocole DHCP gère très bien cela tout seul. Il suffit donc de déclarer l'adresse de votre serveur hébergeant unbound sur votre box ou votre routeur pour que toutes vos machines utilisent ce nouveau service auto-hébergé.

Sources

Cet article est adapté de celui de Vincent Rabah sur son site:

http://www.it-wars.com/dns-back-to-the-roots/

Je remercie d'ailleurs Vincent pour son coup main dans la compréhension du fichier de conf.