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.
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"
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.