Dnsmasq : DNS (cache) et DHCP

DnsMasq est un petit serveur DNS (cache DNS) qui intègre un serveur DHCP. Peu gourmand en ressources et très simple à configurer, il est bien adapté à une installation sur une solution embarquée telle qu’un routeur ou point d’accès wifi (sous OpenWRT par exemple ; – )

Après un petit ipkg install dnsmasq, le cache DNS est opérationnel et prêt à répondre aux requêtes des clients. Pour la résolution des noms, il se base sur les DNS déclarés dans la configuration réseau (/etc/resolv.conf) ou sur le fichier /etc/hosts. Ce qui est bien pratique pour configurer une petite zone lan : il suffit d’éditer le fichiers hosts comme nous le ferions pour une seule machine.

Côté serveur DHCP, il nous faut faire un minimum de conf… Ca se passe dans le fichier /etc/dnsmasq.conf

A minima, nous devrons configurer la plage dhcp, l’adresse d’un serveur DNS et une route par défaut (gateway).

Par exemple :

# Plage DHCP : de 192.168.7.100 à 192.168.7.150 pour un bail de 12 heures
dhcp-range=192.168.7.100,192.168.100.150,12h
# Masque de sous réseau (Option 1)
dhcp-option=1,255.255.255.0
# Route de la passerelle par défaut (Option 3)
dhcp-option=3,192.168.7.253
# Serveurs DNS  (Option 6) : 192.168.7.2 (Ip du serveur dnsmasq) et un serveur secondaire (facultatif)
dhcp-option=6,192.168.7.2,192.168.70.1

Voilà pour une configuration basique…L’exemple suivant va un peu plus loin… :

domain-needed
bogus-priv
filterwin2k
 
localise-queries
local=/lan/
domain=linet.jopa.fr
expand-hosts
no-negcache
resolv-file=/tmp/resolv.conf.auto
 
dhcp-authoritative
dhcp-leasefile=/tmp/dhcp.leases
 
# use /etc/ethers for static hosts; same format as --dhcp-host
read-ethers
 
# Plage DHCP
dhcp-range=192.168.7.100,192.168.100.150,12h
# Netmask
dhcp-option=1,255.255.255.0
# Route
dhcp-option=3,192.168.7.253
# DNS
dhcp-option=6,192.168.7.2,192.168.70.1

Quelques explications sur les options utilisées. Il en existe bien d’autres, je vous invite à consulter le man pour approfondir le sujet… Ce qui suit en est largement inspiré…

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.

bogus-priv : Fausse résolution inverse pour les réseaux privés. Toutes les requêtes DNS inverses pour des adresses IP privées (ie 192.168.x.x, etc…) qui ne sont pas trouvées dans /etc/hosts ou dans le fichier de baux DHCP se voient retournées une réponse « pas de tel domaine » (« no such domain ») au lieu d’être transmises aux serveurs de nom amont (« upstream server »).

filter-win2k : Les dernières versions de windows font des requêtes DNS périodiques auxquelles non seulement les serveurs DNS publics ne peuvent donner de réponse, mais qui, de surcroît, peuvent poser des problèmes en déclenchant des connexions intempestives pour des liens réseaux avec des connexions « à la demande ». Fournir cette option active le filtrage des requêtes de ce type. Les requêtes bloquées sont les requêtes pour les entrées de type SOA ou SRV, ainsi que les requêtes de type ANY avec des noms possédant des caractères sous-lignés (requêtes pour des serveurs LDAP).

localise-query : Retourne des réponses aux requêtes DNS dépendantes de l’interface sur laquelle la requête a été reçue, à partir du fichier /etc/hosts. Si un nom dans /etc/hosts a plus d’une adresse associée avec lui, et qu’une des adresses au moins est dans le même sous-réseau que l’interface sur laquelle la requête a été reçue, alors ne retourne que la(les) adresse(s) du sous-réseau considéré. Cela permet d’avoir dans /etc/hosts un serveur avec de multiples adresses, une pour chacune de ses interfaces, et de fournir aux hôtes l’adresse correcte (basée sur le réseau auquel ils sont attachés). Cette possibilité est actuellement limitée à IPv4.

domain : Spécifie le domaine utilisé pour étendre la recherche de noms sans domaine. Utilisé également pour attribuer un domaine de recherche au clients DHCP.

expand-hosts : Ajoute le nom de domaine aux noms simples (ne contenant pas de point dans le nom) contenus dans le fichier /etc/hosts, de la même façon que pour le service DHCP.

no-negcache : Désactive le « cache négatif ». Le « cache négatif » permet à Dnsmasq de se souvenir des réponses de type « no such domain » fournies par les serveurs DNS en amont et de fournir les réponses sans avoir à re-transmettre les requêtes aux serveurs amont.

resolv-file : Lis les adresses des serveurs de nom amont dans le fichier de nom <fichier>, au lieu du fichier /etc/resolv.conf. Pour le format de ce fichier, voir dans le manuel pour resolv.conf(5) les entrées correspondant aux serveurs de noms (nameserver). Dnsmasq peut lire plusieurs fichiers de type resolv.conf, le premier fichier spécifié remplace le fichier par défaut, le contenu des suivants est rajouté dans la liste des fichiers à consulter. Seul le fichier ayant la dernière date de modification sera chargé en mémoire.

dhcp-autoritative : Cette option doit être donnée lorsque Dnsmasq est le seul serveur DHCP sur le réseau. Cela change le comportement par défaut qui est celui d’un strict respect des RFC, afin que les requêtes DHCP pour des baux inconnus par des hôtes inconnus ne soient pas ignorées. Cela permet à de nouveaux hôtes d’obtenir des baux sans tenir compte de fastidieuses temporisations (« timeout »). Cela permet également à Dnsmasq de reconstruire sa base de donnée contenant les baux sans que les clients n’aient besoin de redemander un bail, si celle-ci est perdue.

dhcp-leasefile : Utilise le fichier dont le chemin est fourni pour stocker les informations de baux DHCP. Si cette option est fournie mais qu’aucune option de type dhcp-range n’est donnée, alors un comportement de type Dnsmasq version 1 est activé. Le fichier fourni est supposé être un fichier de baux DHCP de type ISC DHCPD et est parcouru à la recherche de baux contenant des noms d’hôtes. Les noms trouvés sont rajoutés au DNS. Cette fonctionalité peut être exclue de Dnsmasq à la compilation, auquel cas une erreur sera produite. Il est à noter que l’intégration avec un fichier de baux au format ISC est une fonctionalité obsolète. Elle ne devrait pas être utilisée dans les nouvelles installations et sera retirée dans une future version.

read-ethers : Lis les informations d’hôtes DHCP dans le fichier /etc/ethers. Le format de /etc/ethers est une adresse matérielle suivie, soit par un nom d’hôte, soit par une adresse IP sous la forme de 4 chiffres séparés par des points. Lorsque lu par Dnsmasq, ces lignes ont exactement le même effet que l’option dhcp-host contenant les mêmes informations. /etc/ethers est relu à la réception d’un signal SIGHUP par Dnsmasq.

dhcp-range=[[net:]identifiant de réseau,]<adresse de début>,<adresse de fin>[[,<masque de réseau>],<broadcast>][,<durée de bail par défaut>]Active le serveur DHCP. Les adresses seront données dans la plage comprise entre <adresse de début> et <adresse de fin> et à partir des adresses définies statiquement dans l’option dhcp-host.DHCP sur plus d’un réseau. Pour des réseaux directement connectés (c’est-à-dire des réseaux dans lesquels la machine sur laquelle tourne Dnsmasq possède une interface), le masque de réseau est optionnel. Il est par contre requis pour les réseaux pour lesquels le service DHCP se fait via un relais DHCP (« relay agent »). L’adresse de broadcast est toujours optionnelle.

Si une durée de bail est donnée, alors les baux seront donnés pour cette durée. La durée de bail est donnée en secondes, en minutes (exemple : 45m), en heures (exemple : 1h) ou être la chaine de caractère « infinite » pour une durée indéterminée. Cette option peut être répétée, avec différentes adresses, pour activer le service

Sur certains systèmes, Dnsmasq ne peut écouter que sur une interface lorsqu’il utilise DHCP, et le nom de l’interface doit être spécifié par l’option interface. Cette limitation affecte tous les systèmes OpenBSD avant la version 4.0. Il est toujours possible d’avoir plus d’une plage DHCP pour un même sous-réseau.

L’identifiant de réseau optionnel est un label alphanumérique qui permet de marquer ce réseau afin de fournir des options DHCP spécifiques à chaque réseau. Lorsque préfixé par ‘net:’, la signification change est au lieu de définir un label, il définit le label pour laquelle la règle s’applique. Un seul label peut- être défini mais plusieurs labels peuvent coïncider.

L’adresse de fin peut être remplacée par le mot-clef static (« statique ») qui indique à Dnsmasq d’activer le service DHCP pour le réseau spécifié, mais de ne pas activer l’allocation dynamique d’adresses IP. Seuls les hôtes possédant des adresses IP statiques fournies via dhcp-host ou présentes dans le fichier /etc/ethers seront alors servis par le DHCP.

dhcp-option=[<identifiant_de_réseau>,[<identifiant_de_réseau>,]][vendor:[<classe_vendeur>],][<opt>|option:<nom d’option>],[<valeur>[,<valeur>]]Spécifie des options différentes ou supplémentaires pour des clients DHCP. Par défaut, Dnsmasq envoie un ensemble standard d’options aux clients DHCP : le masque de réseau et l’adresse de broadcast sont les mêmes que pour l’hôte sur lequel tourne Dnsmasq, et le serveur DNS ainsi que la route par défaut prennent comme valeur l’adresse de la machine sur laquelle tourne Dnsmasq. Si une option de nom de domaine a été définie, son contenu est transmis. Cette option de configuration permet de changer toutes ces valeurs par défaut, ou de spécifier d’autres options. L’option DHCP à transmettre peut être fournie sous forme d’un nombre décimal ou sous la forme « option:<nom d’option> ». Les nombres correspondants aux options sont définis dans la RFC2132 et suivants. Les noms d’options connus par Dnsmasq peuvent être obtenus via « Dnsmasq –help dhcp ». Par exemple, pour définir la route par défaut à 192.168.4.4, il est possible de faire –dhcp-option=3,192.168.4.4–dhcp-option = option:router, 192.168.4.4 ou encore, pour positionner l’adresse du serveur–dhcp-option = 42,192.168.0.4 ou –dhcp-option = option:ntp-server, 192.168.0.4 L’adresse 0.0.0.0 prends ici le sens « d’adresse de la machine sur laquelle tourne Dnsmasq ». Les types de données autorisées sont des adresses IP sous la forme de 4 chiffres séparés par des points, un nombre décimal, une liste de caractères hexadécimaux séparés par des 2 points, ou une chaîne de caractères. Si des identifiants de réseaux sont fournis, alors cette option n’est envoyée qu’aux réseaux dont tous les identifiants coïncident.

Un traitement spécial est effectué sur les chaînes de caractères fournies pour l’option 119, conformément à la RFC 3397. Les chaînes de caractères ou les adresses IP sous forme de 4 chiffres séparés par des points donnés en arguments de l’option 120 sont traités conforméments à la RFC 3361. Les adresses IP sous forme de 4 chiffres séparés par des points suivies par une barre montante « / », puis une taille de masque sont encodés conforméments à la RFC 3442.

Attention : aucun test n’étant fait pour vérifier que des données d’un type adéquat sont envoyées pour un numéro d’option donné, il est tout à fait possible de persuader Dnsmasq de générer des paquets DHCP illégaux par une utilisation incorrecte de cette option. Lorsque la valeur est un nombre décimal, Dnsmasq doit déterminer la taille des données. Cela est fait en examinant le numéro de l’option et/ou la valeur, mais peut-être évité en rajoutant un suffixe d’une lettre comme suit : b = un octet, s = 2 octets, i = 4 octets. Cela sert essentiellement pour des options encapsulées de classes de vendeurs (voir plus bas), pour lesquelles Dnsmasq ne peut déterminer la taille de la valeur. Les données d’options consistant uniquement de points et de décimaux sont interprétées par Dnsmasq comme des adresses IP, et envoyées comme telles. Pour forcer l’envoi sous forme de chaîne de caractère, il est nécessaire d’utiliser des guillemets doubles. Par exemple, l’utilisation de l’option 66 pour fournir une adresse IP sous la forme d’une chaîne de caractères comme nom de serveur TFTP, il est nécessaire de faire comme suit : –dhcp-option=66,1.2.3.4

Les options encapsulées de classes de vendeurs peuvent-être aussi spécifiées en utilisant –dhcp-option : par exemple –dhcp-option=vendor:PXEClient,1,0.0.0.0 envoie l’option encapsulée de classe de vendeur « mftp-address=0.0.0.0″ à n’importe quel client dont la classe de vendeur correspond à « PXEClient ». La correspondance pour les classes de vendeur s’effectue sur des sous-chaînes de caractères (voir –dhcp-vendorclass pour plus de détails). Si une option de classe de vendeur (numéro 60) est envoyée par Dnsmasq, alors cela est utilisé pour sélectionner les options encapsulées, de préférence à toute option envoyée par le client. Il est possible d’omettre complètement une classe de vendeur : –dhcp-option=vendor:,1,0.0.0.0 Dans ce cas l’option encapsulée est toujours envoyée. L’adresse 0.0.0.0 n’est pas traitée de manière particulière lorsque fournie dans une option encapsulée de classe de vendeur.

Laissez votre message après le bip...Biiiiip

Commentaires

Pas encore de commentaire.

Laisser un commentaire

(requis)

(requis)