DNS, DHCP et toussa…

DnsMasq est un serveur de cache DNS intégrant un serveur DHCP, ce qui le rend spécialement adapté aux petits réseaux locaux. DnsMasq prend peu de mémoire, est très simple à configurer et ne nécessite presque aucune maintenance. Idéal non ?

Ce document s’applique aux versions 2.x de DnsMasq (testé sur la version 2.20).

Fonctions de Dnsmasq

DnsMasq a été créé par Simon Kelley dans le but de simplifier l’administration de réseaux locaux. DnsMasq permet en effet d’automatiser complètement la configuration du réseau et les temps de réponses aux requêtes DNS. Il dispose de deux serveurs intégrés : 1. Un serveur de cache DNS : Le serveur de cache DNS intégré est conçu pour répondre aux requêtes DNS des ordinateurs de votre réseau local. Il permet de réduire les temps de latence de façon significative. En effet, il interroge le moins possible les serveurs DNS de votre fournisseur d’accès. Il garde en mémoire les requêtes déjà effectuées (jusqu’à expiration) et ne transmet la requête aux serveurs de votre FAI que si la réponse n’est pas présente dans son cache. 2. Un serveur DHCP : Le serveur DHCP permet de transmettre aux ordinateurs de votre réseau local la configuration de ce réseau. Ainsi, il suffit de définir dans la configuration de DnsMasq la plage d’adresses IP disponible pour les ordinateurs clients. Au démarrage, ces derniers recevrons automatiquement une adresse IP et la configuration du réseau (serveur DNS, NetBIOS, NTP, passerelle par défaut…).

Pour plus d’informations vous pouvez consulter le site de DnsMasq.

Installation

Sur Debian

Un simple apt-get devrait suffir : ~/# apt-get install dnsmasq

Avec les sources

  1. Récupérer les sources : ~/$ wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.20.tar.gz
  2. Extraire le tar.gz ~/$ tar xvzf dnsmasq-2.20.tar.gz
  3. Lancement de la compilation ~/$ cd dnsmasq-2.20 ~/$ make
  4. Mise en place des programmes et de la configuration~/# make install

Configuration basique de DnsMasq

La configuration de DnsMasq se déroule via le fichier /etc/dnsmasq.conf. L’exemple fournit par le paquet Debian contient de nombreux commentaires pour expliquer en détails les différents paramètres de la configuration de DnsMasq.

Mise en place du cache DNS

/etc/dnsmasq.conf - Cache DNS
1
2
3
4
5
6
7
domain-needed
expand-hosts
bogus-priv

interface=eth0
domain=home.chezmoi.invalid
cache-size=256

Explication des paramètres utilisés :

  • domain-needed : Ne transmet pas les requêtes ne contenant pas un nom de domaine complet. Par exemple une requête pour machine ne sera pas transmise aux serveurs DNS de votre FAI, alors qu’une requête pour machine.domain.com le sera.

  • expand-hosts : Ajoute automatiquement le domain définit dans la configuration aux noms de machines présents dans /etc/hosts.

  • interface=eth0 : Dans le cas d’un réseau local, il est judicieux de ne mettre DnsMasq en écoute uniquement sur l’interface locale et non sur le lien relié au Net.

  • domain=home.chezmoi.invalid : Permet de définir le nom de domaine du réseau local. ((Il ne faut pas choisir un domaine existant, sinon les requêtes pour ce domaine ne seront pas transmisent aux serveurs de votre FAI.))

  • cache-size=256 : Permet de préciser la taille du cache qui contient les dernières requêtes ainsi que leurs réponses. ((Une valeur de zéro désactive le cache.))

DHCP

/etc/dnsmasq.conf - DHCP + Cache DNS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domain-needed
expand-hosts
bogus-priv

interface=eth0
domain=home.chezmoi.invalid
cache-size=256

# plage dynamique 192.168.1.10-192.168.1.100

dhcp-range=192.168.1.10,192.168.1.100,24h
dhcp-option=23,64

# adresse IP fixe pour la machine 00:40:F4:6C:43:AF

dhcp-host=00:40:F4:6C:43:AF,machinefixe,192.168.1.10

Explication des paramètres utilisés :

  • dhcp-range=débutPlage,finPlage,duréeBail : L’option la plus importante qui permet de définir l’espace IP dans lequel DnsMasq va fournir des adresses aux ordinateurs de votre réseau local.

  • dhcp-option=option,valeur : Permet de définir les options envoyées aux clients avec l’adresse IP affectée. Les options suivante sont déterminées automatiquement à partir de la configuration de la machine qui fait tourner DnsMasq :

    • 1 : masque de sous-réseau
    • 3 : passerelle par défaut
    • 6 : serveur DNS
    • 28 : adresse de broadcast Par exemple, l’option 23 utilisée ici, permet de définir le TTL envoyé aux clients.
  • dhcp-host=adresseMac,nomMachine,IP : L’option dhcp-host permet d’envoyer des options ou une adresse IP fixe à un ordinateur particulier. Celui-ci peut être identifié à l’aide son adresse MAC ou bien par le nom envoyé comme identifiant.

DnsMasq et Resolvconf

Resolvconf ?

Resolvconf est un programme présent dans la distibution GNU/Linux Debian qui permet de faciliter la maintenance du fichier ‘’/etc/resolv.conf’‘. Il agit comme une interface entre les programmes qui définissent l’adresse des serveurs de noms (client DCHP, démon PPP…) et les programmes qui utilisent ces informations (résolveur de noms, cache DNS…).

Ce programme évite ainsi l’édition directe du fichier ‘’/etc/resolv.conf’‘ par les programmes en question : les programmes qui ont à ajouter un serveur de nom fournissent son adresse à Resolvconf qui, selon la configuration de l’utilisateur, choisit de l’inclure ou non dans le fichier ’‘/etc/resolv.conf’‘.

Fonctionnement avec DnsMasq

Resolvconf offre un avantage particulier avec DnsMasq : il permet de ne fournir à DnsMasq que les DNS externes. Resolvconf va générer un fichier spécifique (‘’/var/run/dnsmasq/resolv.conf’‘) qui contient l’ensemble des adresses des serveurs de noms sauf celle de DnsMasq. D’autre part, à chaque changement de DNS externes, l’information sera automatiquement mise à jour dans le fichier en question. DnsMasq va utiliser automatiquement ce fichier à la place du classique ’‘/etc/resolv.conf’‘ Pour installer Resolvconf : ~/# apt-get install resolvconf

DnsMasq et DHCP-Relay

DnsMasq peut aussi être utilisé dans le cadre de réseaux multiples. Dans le schéma ci-contre, on fait fonctionner DnsMasq sur la machine Zeus (réseau LAN1). On souhaite également que les postes clients du LAN2 puissent aussi recevoir la configuration automatique du DnsMasq (avec des paramètres différents, pour s’adapter à la topologie du réseau).

Malheureusement, les requêtes DHCP ne peuvent passé d’un réseau physique à l’autre. Dans le cas de deux réseaux reliés par un VPN, il faut donc utiliser un relai DHCP qui va se charger de transférer les requêtes DHCP des clients du LAN2 vers le serveur DnsMasq. Ce dernier va répondre au relai, ce dernier se chargeant de renvoyer la réponse au bon client.

DnsMasq sur la machine Zeus (LAN1)

/etc/dnsmasq.conf - DHCP sur deux réseaux physiques
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domain-needed
expand-hosts
bogus-priv

interface=eth0
domain=home.chezmoi.invalid
cache-size=256

# réseau local 192.168.1.0/24

dhcp-range=lan1,192.168.1.10,192.168.1.100,12h

# réseau distant 192.168.0.0/24

dhcp-range=lan2,192.168.0.10,192.168.0.100,255.255.255.0,12h
dhcp-option=lan2,3,192.168.0.1

Explication des paramètres utilisés :

  • dhcp-range=idRéseau,débutPlage,finPlage,masqueRéseau,duréeBail : On affecte une plage avec un identifiant (idRéseau) qui va permettre d’affecter des options à une tranche de réseau sans affecter l’autre. Il est important de spécifier le masqueRéseau pour le lan2, car il ne peut être détecter automatiquement pour un réseau distant.

  • dhcp-option=idRéseau,option,valeur : On utilise ici aussi un identifiant de réseau (idRéseau) pour fournir des paramètres spécifiques à un réseau. Pour le réseau distant on affecte la machine 192.168.0.1 comme passerelle par défaut (option n°3).

DHCP-Relay sur la machine Helios (LAN2)

Il faut ensuite installer le serveur relai qui va se trouver dans le même réseau physique que les machines à qui il doit fournir des adresses IP. ~/# apt-get install dhcp3-relay