Dnsmasq - Installer et configurer facilement un serveur DNS / DHCP

 



Plus modeste que les habituels Bind ou Bind9, Dnsmasq n'en offre pas moins une multitude d'options.

Relais DNS, il s'acquitte également de la charge de Serveur DHCP pour le réseau local.

Voici en quelques lignes, les paramètres indispensables à une configuration de base, et.. quelques extras..


Dnsmasq est, à mon sens, plutôt un serveur DHCP avec fonction relais DNS.
Pourquoi "relais" ? Parce qu’il retransmet les résolutions DNS renseignées par le serveur externe indiqué dans " /etc/resolv.conf " (comme pour n'importe quelle Linux) et y ajoute les infos fournies dans " /etc/hosts " ainsi que ses propres clients DHCP.

Donc, si les DNS de "Google" (8.8.8.8) sont renseignés dans le fichier " /etc/resolv.conf " du serveur, les réponses qu'il donnera aux clients seront celles de " Google ".
Sauf pour ce qui est des adresses et/ou machines déclarées dans "/etc/hosts" et bien sûr, celles indiquées dans la configuration de Dnsmasq ( /etc/dnsmasq.conf ).

En d'autres termes, il répond à 80% des besoins en la matière et de manière assez simple. Bien loin de la complexité des références comme Bind9.

 

Installation de Dnsmasq


Rien de bien compliqué, il est sur les dépôts, donc (en root) :

# aptitude install dnsmasq


Puis une copie du fichier original de configuration, à toutes fins utiles :

# mv /etc/dnsmasq.conf  /etc/dnsmasq.conf.old

 

Et on ouvre un fichier de conf tout propre :

# nano /etc/dnsmasq.conf

 

Détails et options du fichier de configuration de Dnsmasq


Pour plus de clarté, je vous propose de remplir progressivement votre fichier " /etc/dnsmasq.conf ", de manière à comprendre les options importantes.
Les lignes commençant par des doubles dièses pour les commentaires.

·         Pour la première partie, les options qui conviennent à une majorité de cas.  A laisser tel que présenté (Sauf cas vraiment particuliers) :

## Configuration file for dnsmasq

##

## utilisation de nom de domaine complet

## pour les requetes dns

domain-needed

 

## simulation de reverse dns pour les requetes locales

bogus-priv

 

## pour ne pas verifier systematiquement que

## le fichier /etc/hosts a ete modifie

no-poll

 

## decommenter cette ligne pour

##  ignorer le fichier /etc/hosts

# no-hosts

 

·         Poursuivons avec la complétion automatique des noms courts. C'est à dire que pour une machine "pc-test", une requête depuis un client obtiendra une réponse sur deux noms :

## Ajouter automatiquement le domaine defini

expand-hosts


Exemple : Pour une machine qui n'a qu'un nom court, exemple "pc-test", le serveur complètera tout seul le nom long. Si votre domaine est "duchnoc.priv", ça donnera une réponse pour les deux situations :

1.     ping pc-test

2.     ping pc-test.duchnoc.priv

 

·         L'interface d'écoute permet d'indiquer le (ou les) périphérique(s) réseau sur le(s)quel(s) répondra " dnsmasq " :

## interface d'ecoute

interface=eth0

 

Heu.. " duchnoc.priv " c'est un exemple hein..

## domain=Domaine.lan : Definition du nom de domaine du reseau local

domain=duchnoc.priv

 

·         La plage d'attribution d'IP(s). Attention aux éventuels conflits (machine en " ip fixe ") sur votre réseau.

##dhcp-range :  plage IP des baux fournis aux clients et temps du jeton. ici 24 heures

dhcp-range=192.168.0.28,192.168.0.60,255.255.255.0,24h

 

·         La liste de déclaration des machines. Indiquez pour chacune son adresse mac, son nom court et l'ip à réserver (Dans la plage ci dessus bien sûr).

## dhcp-host : Permet d.attribuer une ip fixe a un client via sa mac_adress

## et fixer son nom machine

dhcp-host=00:BB:FF:FF:00:99,poste-test,192.168.0.28

dhcp-host=00:99:EE:FF:AA:EE,serv-freenx,192.168.0.29

dhcp-host=77:66:22:22:33:DD,iphone-x,192.168.0.41

 

·         Un petit plus pour la sécurité réseau, si vous dé-commentez la ligne ci dessous, les clients non déclarés de " dnsmasq.conf " (liste ci-dessus) n'aurons pas de bail DHCP, même s'il reste de la place dans la plage d'attribution (dhcp-range).

## decommenter cette ligne pour ignorer

## les clients non declares ci dessus

#dhcp-ignore=tag:!known

 

·         Le serveur DNS qui sera attribué aux clients. Fort logiquement donc, l'ip de notre serveur dnsmasq :

##Option 6 : Serveur DNS pour les clients

## donc ip du serveur dnsmasq

dhcp-option=6,192.168.0.5

 

·         La passerelle par défaut qui sera indiquée aux clients. Un serveur ou votre routeur, selon vos besoins.

##Option 3 : Passerelle par defaut

## votre serveur passerelle

## ou votre routeur

dhcp-option=3,192.168.0.1

 

 

 

·         Sauf cas particuliers, les Options 1 et 28 ne sont pas utilisées. Les commentaires sont assez explicites.

##Option 1 : Masque de sous reseau. inutile sauf si autre que 255.255.255.0

## donc rien

##Option 28 : Adresse de broadcast

## idem

 

·         Le " Time To Live ". Comprenez le laps de temps pendant lequel les clients garderont en cache chaque réponse du serveur dns (en secondes).

## Option 23 : TTL et sa valeur apres la virgule

## option time-to-live a fixer a 50

dhcp-option=23,50

 

·         Il convient de toujours fixer une limite au nombre de clients possibles, et d'indiquer à dnsmasq le fichier dans lequel il va loguer les baux dhcp.

##maximum de clients dhcp et fichier log

dhcp-lease-max=150

dhcp-leasefile=/var/lib/misc/dnsmasq.leases

 

·         Fixer la taille du cache utilisé par dnsmasq

## cache-size : Precise la taille (en Mo) du cache (dernieres requetes et les renvois)

cache-size=250

 

·         Enfin, l'enregistrement des requetes dans les logs du serveur

## requetes dns dans les logs

log-queries



 

Fichier " dnsmasq.conf " assemblé


Ci-dessous, notre fichier assemblé et complet :

## Configuration file for dnsmasq

##

## utilisation de nom de domaine complet

## pour les requetes dns

domain-needed

 

## simulation de reverse dns pour les requetes locales

bogus-priv

 

## pour ne pas verifier systematiquement que

## le fichier /etc/hosts a ete modifie

no-poll

 

## decommenter cette ligne pour

##  ignorer le fichier /etc/hosts

# no-hosts

 

## Ajouter automatiquement le domaine defini

expand-hosts

 

## interface d'ecoute

interface=eth0

 

## domain=Domaine.lan : Definition du nom de domaine du reseau local

domain=duchnoc.priv

 

##dhcp-range :  plage IP qui sera fournie aux clients et temps du jeton. ici 24 heures

dhcp-range=192.168.0.28,192.168.0.60,255.255.255.0,24h

 

## dhcp-host : Permet d.attribuer une ip fixe a un client via sa mac_adress

## et fixer son nom machine

dhcp-host=00:BB:FF:FF:00:99,poste-test,192.168.0.28

dhcp-host=00:99:EE:FF:AA:EE,serv-freenx,192.168.0.29

dhcp-host=77:66:22:22:33:DD,iphone-x,192.168.0.41

 

## decommenter cette ligne pour ignorer

## les clients non declares ci dessus

#dhcp-ignore=tag:!known

 

 

## dhcp-option : Permet de definir les options envoyees aux clients

##Option 6 : Serveur DNS pour les clients

## donc ip du serveur dnsmasq

dhcp-option=6,192.168.0.5

 

##Option 3 : Passerelle par defaut

## votre serveur passerelle

## ou votre routeur

dhcp-option=3,192.168.0.1

 

##Option 1 : Masque de sous reseau. inutile sauf si autre que 255.255.255.0

## donc rien

##Option 28 : Adresse de broadcast

## idem

 

## Option 23 : TTL et sa valeur apres la virgule

## option time-to-live a fixer a 50

dhcp-option=23,50

 

##maximum de clients dhcp et fichier log

dhcp-lease-max=150

dhcp-leasefile=/var/lib/misc/dnsmasq.leases

 

## cache-size : Precise la taille du cache (dernieres requetes et les renvois)

cache-size=250

 

## requetes dns dans les logs

log-queries

 



Pour ceux (ou celles) qui auraient "survolé" les descriptifs plus haut, voici un rappel des lignes de ce " dnsmasq.conf " à modifier impérativement pour l'adapter à votre situation :



Il y a bien sûr une multitude d'autres options possibles. L'idée étant ici de donner une base de départ fonctionnelle.

 

 

·         Pour rechargerr le service dnsmasq  (après modification du fichier de configuration) :

# service dnsmasq reload

 

·         Pour redémarrer le service dnsmasq :

# service dnsmasq restart

 

·         Pour visualiser les logs :

# journalctl

 

 

Sources et liens :