Dnsmasq

De ClissXXI.

Dnsmasq est un serveur DHCP et DNS cache léger, facile à configurer. Il est prévu pour fournir des services de DHCP et DNS à un petit réseau. Il peut, entre autres fonctionnalités:

  • distribuer des adresses IP dynamiquement ou de façon statique,
  • ajouter des noms des machines dans son DNS, qui sont configurées soient dans son fichier de configuration, soit sur les machines elles-mêmes,
  • rediriger les requêtes DNS de certains domaines vers un serveur précis (ce qui est pratique lorsqu'on utilise une zone DNS locale),
  • faire office de serveur TFTP en lecture seule pour permettre les démarrages en PXE, et supporte également le protocole BOOTP (ces aspects ne sont pas traités dans cette page),
  • bien d'autres choses encore (reportez-vous au page de manuel de dnsmasq (8) pour toutes les autres fonctionnalités)

Dnsmasq peut remplacer avantageusement (en terme de facilité de maintenance) un ensemble serveur DHCP d'ISC et serveur DNS comme bind qu'on utilise souvent pour ces services puisque tout sera ici regroupé dans un fichier central fournissant une configuration simple.

Cette page décrit un exemple simple de configuration de dnsmasq pour un petit réseau sur lequel il fournit le DHCP et le DNS de base.

Sommaire

Installation de dnsmasq

Sous Debian GNU/Linux, l'installation de dnsmasq est simplement réalisée par l'installation du paquet dnsmasq:

aptitude install dnsmasq

Configuration de dnsmasq

Par défaut, le fichier de configuration de dnsmasq est /etc/dnsmasq.conf. Sous debian, la configuration par défaut fournie dans le fichier /etc/default/dnsmasq permet également de fragmenter la configuration dans des fichiers du répertoire /etc/dnsmasq.d.

Le fichier de configuration

Par défaut, toutes les directives du fichier /etc/dnsmasq.conf sont désactivées (c'est à dire mises en commentaire), et agrémentées de commentaires descriptifs assez détaillés. Par souci de clarté et pour faciliter les mises à jours, je conseillerais plutôt de ne pas toucher à ce fichier, et d'utiliser un fichier dédié à votre configuration, par exemple '/etc/dnsmasq.d/local dans lequel vous n'ajouterez que les directives nécessaires à votre configuration.

Voici un exemple de fichier de configuration dans lequel on configure un ensemble d'adresse dynamique fournies par le DHCP, ainsi que quelques machines en DHCP statiques, avec un nom qui sera servi par le DNS. Référez-vous aux commentaires pour une petite description des différentes directives:

#
# Configuration pour notre réseau local
# Voir /etc/dnsmasq.conf pour les options disponibles et leurs explications.
#
 
# On évite de faire sortir les requêtes de domaines locaux
domain-needed
bogus-priv
 
# Déterminer le domaine local qui sera ajouté aux noms DNS des machines assignées par le DHCP,
# et fourni en nom de domaine local aux clients DHCP
domain=mondomaine.local
 
# Cette directive permet d'ajouter le domaine défini ci-dessus aux noms simples figurant dans /etc/hosts
expand-hosts  
# Fichier à lire pour les serveurs DNS par défaut (au lieu de /etc/resolv.conf, utilisé par défaut)
resolv-file=/etc/resolv.dnsmasq
 
# On peut forcer la transmission des requêtes relatives à un domaine particulier
# vers un serveur précis, ici 192.168.1.1 :
server=/mondomaine.local/192.168.1.1
server=/1.168.192.in-addr.arpa/192.168.1.1
 
# Le daemon doit fonctionner sous l'utilisateur dnsmasq et sur l'interface eth0
user=dnsmasq
group=nogroup
interface=eth0
 
# La plage d'adresses dynamiques fournies par le serveur DHCP 
# C'est ici de 192.168.1.100 à 192.168.1.199 avec des leases de 12h
dhcp-range=eth0,192.168.1.100,192.168.1.199,12h
 
# La passerelle du réseau à fournir aux clients DHCP
dhcp-option=option:router,192.168.1.1
 
# Exemple pour assigner l'IP 192.168.0.60 à la MAC 11:22:33:44:55:66
# La seconde forme assigne également le nom « fred », pour 45 minutes
#dhcp-host=11:22:33:44:55:66,192.168.0.60
#dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m
 
# Nos adresses DHCP statiques
# Les noms précisés seront servis par le service DNS de dnsmasq
dhcp-host=00:50:7F:E9:A7:45,passerelle,192.168.1.1,12h
dhcp-host=00:21:B7:30:53:44,lexmark,192.168.1.6,12h
dhcp-host=00:1B:38:32:EA:31,frodo,192.168.1.11,12h
 
# On peut définir des alias pour les noms de machines définies par le DHCP
# Exemple: pour pouvoir utiliser le nom « frodon » tout comme « frodo », utilisez cette ligne:
#cname=frodon,frodo
 
# Désactiver cette directive uniquement si votre serveur est le serveurs DHCP officiel du réseau
#dhcp-authoritative
 
# Pour logger les requêtes DNS (dans syslog)
log-queries
# Pour des logs plus complets des requêtes DHCP (dans syslog)
log-dhcp

Les serveurs de noms utilisées par dnsmasq

Une fois les directives ci-dessus placées dans un fichier du répertoire /etc/dnsmasq.d (par exemple dans /etc/dnsmasq.d/local), créez le fichier /etc/resolv.conf.dnsmasq, référencé dans la configuration. Ce fichier désignera les serveurs de noms que dnsmasq va interroger au lieu d'utiliser ceux précisés dans /etc/resolv.conf (si vous préférez le comportement par défaut, commentez simplement la directive resolv-file). On pourra ainsi préciser le serveur local 127.0.1 dans /etc/resolv.conf, permettant au serveur lui-même d'utiliser les informations délivrées par dnsmasq.

Le fichier /etc/resolv.conf.dnsmasq peut ressembler à ça (à corriger pour utiliser les serveurs DNS de votre FAI, et le nom de votre domaine si vous en avez un):

nameserver 80.10.246.1
nameserver 81.253.149.10
search mondomaine.local

Sous Debian, pour signaler à dnsmasq de ne plus rechercher les serveurs de noms à interroger dans /etc/resolv.conf, il est nécessaire (mais pas suffisant) d'assigner yes à la variable IGNORE_RESOLVCONF dans le fichier /etc/default/dnsmasq:

echo "IGNORE_RESOLVCONF=yes" >>/etc/default/dnsmasq

Recharger la configuration de dnsmasq

Après création ou modification de la configuration de dnsmasq, pensez à le redémarer avec la commande suivante:

/etc/init.d/dnsmasq restart

En savoir plus

Pour en savoir plus, consultez

Outils personnels