dnsmasq : Le serveur DNS et DHCP facile sous Linux
Table des matières
DnsMasq est un petit serveur DNS qui met en cache et vous permet d'ajouter des résolutions de nom pour les hôtes de votre réseau local.
Il est peu gourmand en ressources, et est paramétrable facilement !
Il peut convenir parfaitement en lieu et place de l'usine à gaz de Bind lorsqu'on cherche quelque chose de simple.
Il comporte aussi la gestion d'un serveur DHCP, la classe !
Par défaut, dnsmasq forward les requêtes inconnues grâce aux DNS paramétrés sur l'OS sur lequel est installé dnsmasq et les enregistrements A et AAAA (résolutions noms -> IP) sont lus depuis le fichier /etc/hosts ! (c'est paramétrable). Résolution directe et inverse s'il vous plait !
Pour la partie DHCP, l'outil gère un ou plusieurs réseaux !
Il gère aussi le TFTP et quelques autres bricoles non abordées ici.
Suivant votre distribution, installez le paquet dnsmasq !
CentOS :
Gentoo :
Debian :
Toute la configuration résulte dans le fichier /etc/dnsmasq.conf
Il est de base bien documenté, mais il est très très rempli.
Je préfère travailler sur un fichier /etc/dnsmasq.conf vierge et copier l'original :
S'assurer que le service est activé :
Sous systemd :
Sous OpenRC :
Après chaque modification il est nécessaire de relancer le service dnsmasq :
Sous systemd :
Sous OpenRC :
Pour la partie DNS, voici ce qu'on peut paramétrer :
Quelques explications :
- domain-needed : Permet de ne pas transmettre au forwarder une résolution de nom qui n'est pas pleinement qualifié.
- bogus-priv : Permet de ne pas transmettre aux forwarders les résolutions inverses non trouvées par la configuration locale
- resolv-file : Permet de définir un fichier de configuration différent que /etc/resolv.conf
- strict-order : Permet de respecter l'ordre strict des différents DNS paramétrés dans le fichier resolv.conf
- user et group : Permet de définir l'utilisateur et le groupe sous lequel dnsmasq sera lancé (défini ainsi sur CentOS)
- addn-hosts : Permet de définir un fichier de configuration différent que /etc/hosts pour la résolution des noms
- expand-hosts : Ajoute automatiquement le domaine aux noms simples
- domain : Définit le domaine (suffixe aux noms locaux)
- log-queries : Permet de logguer les requêtes DNS (par défaut dans /var/log/messages)
Comme vous l'avez vu, je ne souhaite pas utiliser /etc/resolv.conf et /etc/hosts par défaut. Cependant leur syntaxe est la même :
Voici un exemple de /etc/dnsmasq-dns.conf :
Voici un exemple de /etc/dnsmasq-hosts.conf :
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DNS.
Avec firewalld :
Pour paramétrer le serveur DHCP avec un seul réseau, c'est assez facile.
Le paramétrage se fait toujours dans /etc/dnsmasq.conf :
Quelques explications :
- dhcp-range : Plage DHCP (Début, Fin, Durée du bail)
- dhcp-option=option:netmask : Masque de sous réseau
- dhcp-option=option:router : Passerelle
- dhcp-option=option:dns-server : Serveur DNS (Si le DNS est la même machine, ne mettez pas 127.0.0.1 mais son adresse réseau, exemple 192.168.21.19)
- dhcp-option=option:ntp-server : Serveur NTP (facultatif)
- dhcp-option=option:domain-name : Suffixe DNS
Il est possible de faire une réservation, avec l'adresse MAC :
Il est aussi possible d'ignorer les requête d'un hôte particulier :
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DHCP.
Avec firewalld :
Avec une problématique d'entreprise, on a un serveur DHCP et plusieurs réseaux. Sur les LANs distants, on a des agents relais sur les routeurs qui vont transmettre les requêtes en unicast au présent serveur DHCP de DnsMasq.
Pour paramétrer le serveur DHCP avec plusieurs sous-réseaux, c'est assez facile. Il suffit de tagguer les réseaux concernés
Le paramétrage se fait toujours dans /etc/dnsmasq.conf :
Il y a dans cette configuration un exemple de réservation et de blacklist.
Par rapport à la configuration DHCP pour 1 réseau,
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DHCP.
Avec firewalld :
Introduction
DnsMasq est un petit serveur DNS qui met en cache et vous permet d'ajouter des résolutions de nom pour les hôtes de votre réseau local.
Il est peu gourmand en ressources, et est paramétrable facilement !
Il peut convenir parfaitement en lieu et place de l'usine à gaz de Bind lorsqu'on cherche quelque chose de simple.
Il comporte aussi la gestion d'un serveur DHCP, la classe !
Par défaut, dnsmasq forward les requêtes inconnues grâce aux DNS paramétrés sur l'OS sur lequel est installé dnsmasq et les enregistrements A et AAAA (résolutions noms -> IP) sont lus depuis le fichier /etc/hosts ! (c'est paramétrable). Résolution directe et inverse s'il vous plait !
Pour la partie DHCP, l'outil gère un ou plusieurs réseaux !
Il gère aussi le TFTP et quelques autres bricoles non abordées ici.
Installation de DNSMASQ
Suivant votre distribution, installez le paquet dnsmasq !
CentOS :
Code BASH :
yum install dnsmasq
Gentoo :
Code BASH :
emerge -av dnsmasq
Debian :
Code BASH :
apt install dnsmasq
Configuration de DNSMASQ
Fichiers de bse et gestion du service
Toute la configuration résulte dans le fichier /etc/dnsmasq.conf
Il est de base bien documenté, mais il est très très rempli.
Je préfère travailler sur un fichier /etc/dnsmasq.conf vierge et copier l'original :
Code BASH :
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
S'assurer que le service est activé :
Sous systemd :
Code BASH :
systemctl enable dnsmasq
Sous OpenRC :
Code BASH :
rc-update add dnsmasq default
Après chaque modification il est nécessaire de relancer le service dnsmasq :
Sous systemd :
Code BASH :
systemctl restart dnsmasq
Sous OpenRC :
Code BASH :
/etc/init.d/dnsmasq restart
DNSMASQ : Paramétrage DNS
Pour la partie DNS, voici ce qu'on peut paramétrer :
Code BASH :
#### DNS #### domain-needed bogus-priv # Ficher des forwarders resolv-file=/etc/dnsmasq-dns.conf strict-order user=dnsmasq group=dnsmasq # Fichier des enregistrements A et AAAA addn-hosts=/etc/dnsmasq-hosts.conf expand-hosts domain=linuxtricks.lan # LOG DNS log-queries
Quelques explications :
- domain-needed : Permet de ne pas transmettre au forwarder une résolution de nom qui n'est pas pleinement qualifié.
- bogus-priv : Permet de ne pas transmettre aux forwarders les résolutions inverses non trouvées par la configuration locale
- resolv-file : Permet de définir un fichier de configuration différent que /etc/resolv.conf
- strict-order : Permet de respecter l'ordre strict des différents DNS paramétrés dans le fichier resolv.conf
- user et group : Permet de définir l'utilisateur et le groupe sous lequel dnsmasq sera lancé (défini ainsi sur CentOS)
- addn-hosts : Permet de définir un fichier de configuration différent que /etc/hosts pour la résolution des noms
- expand-hosts : Ajoute automatiquement le domaine aux noms simples
- domain : Définit le domaine (suffixe aux noms locaux)
- log-queries : Permet de logguer les requêtes DNS (par défaut dans /var/log/messages)
Comme vous l'avez vu, je ne souhaite pas utiliser /etc/resolv.conf et /etc/hosts par défaut. Cependant leur syntaxe est la même :
Voici un exemple de /etc/dnsmasq-dns.conf :
Code BASH :
nameserver 8.8.8.8 nameserver 91.121.161.184
Voici un exemple de /etc/dnsmasq-hosts.conf :
Code BASH :
## LAN DIJON ##
192.168.21.19 dns dhcp
192.168.21.238 proxy wpad
192.168.21.253 switch
192.168.21.254 gwdij
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DNS.
Avec firewalld :
Code BASH :
firewall-cmd --add-service=dns --permanent firewall-cmd --reload
DNSMASQ : Paramétrage DHCP
Paramétrage avec un seul réseau
Pour paramétrer le serveur DHCP avec un seul réseau, c'est assez facile.
Le paramétrage se fait toujours dans /etc/dnsmasq.conf :
Code BASH :
dhcp-range=192.168.21.10,192.168.21.50,12h dhcp-option=option:netmask,255.255.255.0 dhcp-option=option:router,192.168.21.254 dhcp-option=option:dns-server,192.168.21.254 dhcp-option=option:ntp-server,192.168.21.254 dhcp-option=option:domain-name,linuxtricks.lan
Quelques explications :
- dhcp-range : Plage DHCP (Début, Fin, Durée du bail)
- dhcp-option=option:netmask : Masque de sous réseau
- dhcp-option=option:router : Passerelle
- dhcp-option=option:dns-server : Serveur DNS (Si le DNS est la même machine, ne mettez pas 127.0.0.1 mais son adresse réseau, exemple 192.168.21.19)
- dhcp-option=option:ntp-server : Serveur NTP (facultatif)
- dhcp-option=option:domain-name : Suffixe DNS
Il est possible de faire une réservation, avec l'adresse MAC :
Code BASH :
dhcp-host=2c:27:d7:01:71:08,192.168.21.111
Il est aussi possible d'ignorer les requête d'un hôte particulier :
Code BASH :
dhcp-host=2c:27:d7:01:71:08,ignore
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DHCP.
Avec firewalld :
Code BASH :
firewall-cmd --add-service=dhcp --permanent firewall-cmd --reload
Paramétrage avec plusieurs sous-réseaux
Avec une problématique d'entreprise, on a un serveur DHCP et plusieurs réseaux. Sur les LANs distants, on a des agents relais sur les routeurs qui vont transmettre les requêtes en unicast au présent serveur DHCP de DnsMasq.
Pour paramétrer le serveur DHCP avec plusieurs sous-réseaux, c'est assez facile. Il suffit de tagguer les réseaux concernés
Le paramétrage se fait toujours dans /etc/dnsmasq.conf :
Code BASH :
#### DHCP #### ## Options GLOBALES ## dhcp-option=option:dns-server,192.168.21.19 dhcp-option=option:domain-name,linuxtricks.lan ## LANPROD ## dhcp-range=lanprod,192.168.21.100,192.168.21.150,255.255.255.0,1h dhcp-option=lanprod,option:router,192.168.21.254 dhcp-option=lanprod,option:netmask,255.255.255.0 # Video Projecteur dhcp-host=pt,00:1a:ef:53:e5:1a,192.168.21.242 # PC Bureau Informatique dhcp-host=pt,00:25:64:b4:44:fe,192.168.21.20 ## LAN DEV Informatique Derrière Bintec ## dhcp-range=devit,192.168.27.100,192.168.27.200,255.255.255.0,30m dhcp-option=devit,option:router,192.168.27.240 dhcp-option=devit,option:netmask,255.255.255.0 # Resa test # dhcp-host=devit,2c:27:d7:01:71:08,192.168.27.212 # Blacklist test # dhcp-host=devit,2c:27:d7:01:71:08,ignore
Il y a dans cette configuration un exemple de réservation et de blacklist.
Par rapport à la configuration DHCP pour 1 réseau,
Bien sûr, on relance le service après avoir enregistré sa configuration.
On va évidemment autoriser dans le parefeu les requêtes DHCP.
Avec firewalld :
Code BASH :
firewall-cmd --add-service=dhcp --permanent firewall-cmd --reload