Un serveur DNS local sur Raspberry Pi

Il est possible de transformer très simplement une carte Raspberry Pi en serveur DNS local en installant et en configurant unbound sur cette machine.

Avec la configuration adéquate, la carte Raspberry Pi peut servir de serveur DNS aux machines installées dans le réseau local, et remplacer par exemple le serveur DNS par défaut d’un fournisseur d’accès à l’internet. La résolution d’un nom par un hôte peut dans certains cas être plus rapide en utilisant ce serveur DNS local et fluidifier la navigation sur le Web. L’installation d’un serveur DNS local permet aussi de bloquer certaines publicités intrusives ou d’affecter facilement un nom de domaine à une ou plusieurs machines du réseau local, sans avoir à intervenir sur chacune des machines du réseau. Elle permet enfin de contourner le blocage de certains sites Web mis en place par certains fournisseurs pour de bonnes ou de mauvaises raisons.

Gravure colorée représentant un bateau à vapeur.

Avant l’invention du serveur DNS, on raconte que certains tentèrent d’utiliser des machines plus volumineuses et moins rapides pour naviguer de serveur en serveur sur l’océan du Web.


Pour référence, voici les étapes suivies pour installer et configurer un serveur local sur une carte Raspberry Pi tournant sous Arch Linux ARM en utilisant unbound et les modifications complémentaires de la configuration du réseau local pour que les machines connectées au réseau utilisent le serveur DNS local plutôt qu’un autre serveur.

Prérequis

La procédure décrite ici a été testée sur une carte Raspberry Pi 1 modèle B tournant sous Arch Linux ARM, mais elle devrait être semblable sur une carte Raspberry Pi 2 modèle B ou sous toute autre machine semblable tournant sous Arch Linux ARM. La carte est connectée à un routeur Wifi lui-même connecté à la Box ADSL d’un fournisseur d’accès. Les autres machines du réseau sont également connectées au routeur Wifi et accèdent à l’internet via ce routeur. Le routeur en question permet de choisir les serveur DNS primaire et secondaire qu’il utilise, à la différence de la Box ADSL du FAI qui ne permet pas de modifier les serveurs DNS qu’elle interroge pour résoudre les noms de domaine.

L’installation est effectuée en ligne de commande en se connectant à distance à la carte Raspberry Pi via SSH en tant qu’administrateur.

Installation d’unbound sur la carte Raspberry Pi

Mise à jour des paquets installés et de la distribution Arch Linux ARM

Avant d’installer unbound et ses dépendances, on met à jour les paquets de la distribution Arch Linux ARM installée sur la carte Raspberry Pi :

# pacman -Syu

Installation d’unbound

On installe unbound et ses dépendances obligatoires, ainsi qu’expat, dépendance optionnelle :

# pacman -S unbound expat

Configuration d’unbound

Unbound résente le double avantage de ne pas nécessiter de configuration complexe et poussée pour fonctionner de manière très satisfaisante mais de permettre si nécessaire d’ajuster au mieux la configuration pour améliorer les performances. Le fichier de configuration se trouve à :
/etc/unbound/unbound.conf
Il y a, dans le même répertoire, un modèle de configuration abondamment commenté pour aller plus loin. Pour l’adapter à l’oranisation du réseau local et à ce que l’on attend du serveur DNS, le plus simple est probablement de renommer unbound.conf pour le préserver, et de copier le fichier unbound.conf.example vers unbound.conf, puis de décommenter et de modifier les paramètres essentiels, avant de vérifier que tout fonctionne.

Il y a pour l’essentiel trois paramètres à vérifier dans le fichier de configuration de base :

« interface:  »

L’adresse IP du serveur DNS unbound correspondant à l’interface sur laquelle unbound reçoit les requêtes de résolution de noms de domaine. Par défaut, unbound ne répond quelorsqu’il est interrogé sur localhost. Par exemple, si l’interface sur laquelle le serveur écoute les requêtes de résolution de nom est à l’adresse 192.168.0.1, il faut ajouter une ligne dans le fichier de configuration avec cette adresse :
interface: 192.168.0.1
Pour qu’unbound écoute sur toutes les interfaces, il suffit d’indiquer l’adresse 0.0.0.0 :
interface: 0.0.0.0

« port:  »

Le port sur lequel le serveur unbound répond aux requêtes 53 par défaut – il faut vérifier que ce port n’est pas utilisé par une autre application sur la machine hébergeant le serveur :
port: 53

« access-control:  »

Il faut spécifier la/les adresses IP des machines autorisées à interroger le serveur :
Par exemple, pour autoriser la plage d’adresses IP de 192.168.0.0 à 192.168.0.254
access-control: 192.168.0.0/24 allow
Pour une seule adresse IP :
access-control: 192.168.1.2 allow

Configuration des machines du réseau local pour qu’elles utilisent le serveur DNS local pour la résolution de noms de domaines

Pour que les machines du réseau local utilisent le serveur DNS unbound, il faut indiquer en tant que serveur DNS l’adresse IP de la machine sur laquelle est installé le serveur (dans notre cas, il s’agit de la carte Raspberry Pi).

Si l’adressage sur le réseau local est dynamique via l’interrogation d’un serveur DHCP, c’est le serveur DHCP qui transmet aux clients l’adresse du serveur DNS à utiliser. C’est alors encore plus simple, car il suffit de configurer le serveur DHCP en lui fournissant l’adresse de la machine hébergeant le serveur DNS local qu’il transmettra à toutes les machines qui sollicitent l’attribution d’une adresse IP.

Le serveur DHCP est généralement hébergé sur un routeur, ou sur la box du fournisseur d’accès qui est en même temps le modem.

Définition de noms de domaine pour certaines machines connectées au réseau local

Pour faire pointer machine1.local vers 192.168.0.100, ajouter les lignes suivantes :

local-zone: "local." static
local-data: "machine1.local. IN A 192.168.0.100"
local-data-ptr: "192.168.0.100 machine1.local"

Clovis et le DNS de Soissons

Clovis Ier, roi des francs comptait bien rendre à l’évêque Rémi le serveur DNS que ses soldats avaient emprunté en pillant Soissons, mais un soldat plus cupide et aussi impie que ses camarades ne l’entend pas de cette oreille et brise sans prévenir l’objet que chérit tant le pontife, pour faire savoir au preux souverain qu’il entend bien recevoir la part du butin qui lui revient, comme c’est la coutume chez les francs. C’est lui qui l’a cassé, c’est lui qu’il est puni, dira plus tard Clovis (qui ne maîtrise pas plus le latin que le français, qui au passage n’existe pas encore) en rendant à Rémi dépité la chose désormais aussi cabossée que le crâne du soudard qu’il vient d’occire d’un seul coup bien placé de royale francisque. Il ne résout plus rien du tout, se lamentera l’évêque effondré en contemplant le vase sacré désormais hors d’usage. Tant pis, je t’achèterai un Raspberry Pi, mon petit, lui dit Clovis, qui s’enfuit.

Sources et références

Sur la notion de DNS :
– Article Domain Name System sur Wikipédia.
Sur l’installation d’unbound :
– Principes et introduction à l’utilisation d’unbound : Comment installer son serveur DNS en local quand on n’est pas un gros barbu (Korben), page consacrée à unbound dans la documentation de la distribution Ubuntu, « Installer et configurer son serveur DNS connecté aux serveurs root avec Unbound ».
Informations spécifiques sur l’installation d’unbound sous Arch Linux.

Une réflexion sur « Un serveur DNS local sur Raspberry Pi »

  1. Ping : Sus à la publicité avec Unbound | Carnet

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.