Cette page décrit la configuration de Dnsmasq sur un serveur local tournant sous CentOS 7. Dnsmasq est un serveur léger qui fournit les services DHCP et DNS pour des réseaux locaux, même de taille importante. Il est extrêmement facile à configurer, et l’on pourra l’utiliser pour remplacer DHCPD et Bind. Ce dernier n’est pas très adapté pour les DNS de réseaux locaux, notamment à cause de sa syntaxe farfelue.
- Prérequis
- Installation
- Configuration de base
- Démarrage et utilisation
- Attribuer des adresses statiques
- Gérer les hôtes statiques
- Afficher en direct l’attribution des baux DHCP
Prérequis
Ouvrir les ports suivants dans le pare-feu.
- 53 en TCP et UDP (requêtes DNS)
- 67 en UDP (requêtes DHCP)
$ sudo firewall-cmd --permanent --zone=internal --add-service=dhcp $ sudo firewall-cmd --permanent --zone=internal --add-service=dns $ sudo firewall-cmd --reload $ sudo firewall-cmd --list-all internal (active) target: default icmp-block-inversion: no interfaces: enp3s1 sources: services: dhcp dns ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Le fichier /etc/hosts
du serveur local doit comporter au moins les deux lignes suivantes.
# /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.3.1 amandine.sandbox.lan amandine
C’est surtout la deuxième ligne qui est d’une importance capitale. Elle fait correspondre le nom de la machine locale avec l’adresse IP dans le réseau local.
Installation
Dnsmasq est fourni par les dépôts officiels de Red Hat et CentOS.
$ sudo yum install dnsmasq
Configuration de base
La configuration de Dnsmasq s’effectue par le biais du fichier de configuration /etc/dnsmasq.conf
. Le fichier fourni par défaut comporte près de six cents lignes de commentaires et sert également de documentation. On pourrait très bien activer l’une ou l’autre option en la décommentant. Dans le cas présent, il vaut mieux effectuer une copie de sauvegarde et commencer par un fichier vide.
$ cd /etc $ sudo mv dnsmasq.conf dnsmasq.conf.orig
Éditer une configuration minimale.
# /etc/dnsmasq.conf
domain-needed
bogus-priv
interface=enp3s1
dhcp-range=192.168.3.100,192.168.3.200,24h
local=/sandbox.lan/
domain=sandbox.lan
expand-hosts
server=1.1.1.1
server=1.0.0.1
no-resolv
log-facility=/var/log/dnsmasq.log
- Les deux premières options
domain-needed
etbogus-priv
évitent que Dnsmasq ne relaie les requêtes incomplètes ou locales à un ou plusieurs serveurs DNS en amont. - L’option
interface
spécifie l’interface réseau que l’on souhaite utiliser. - L’option
dhcp-range
définit la plage d’adresses dynamiques utilisée par le serveur DHCP. Dans le cas présent, les adresses attribuées auront une durée de validité de 24 heures. Passé ce délai, elles devront être renouvelées par les clients. - L’option
local
indique que les réponses aux requêtes pour le domaine spécifié doivent être fournies directement par Dnsmasq, et non pas par un serveur DNS en amont. - L’option
domain
attribue le nom de domaine spécifié aux clients. Pour des raisons évidentes, il doit coïncider avec le domaine défini dans l’optionlocal
. - L’option
expand-hosts
concerne les requêtes DNS sans le domaine et se charge d’ajouter celui-ci automatiquement. Concrètement, lorsqu’on essaie d’envoyer unping
surposte-01
, Dnsmasq retournera automatiquement l’adresse IP de l’hôteposte-01.sandbox.lan
. - L’option
server
spécifie l’adresse IP d’un ou plusieurs serveurs DNS en amont. Dans l’exemple ci-dessus, on utilise les deux serveurs DNS de Cloudflare. Alternativement, on pourra prendre les deux serveurs8.8.8.8
et8.8.4.4
de Google. Avec une LiveBox de chez Orange, c’est même obligatoire. - L’option
no-resolv
indique à Dnsmasq de ne pas prendre en compte le contenu du fichier/etc/resolv.conf
. - Dans la configuration par défaut, Dnsmasq écrit ses logs un peu partout dans
/var/log
. La directivelog-facility
permet de centraliser les logs en un seul fichier, ce qui est bien plus propre.
Démarrage et utilisation
Activer et démarrer Dnsmasq.
$ sudo systemctl enable dnsmasq --now
Vérifier l’état du service.
$ systemctl status dnsmasq ● dnsmasq.service - DNS caching server. Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2020-04-04 06:31:17 CET; 4h 27min ago
Attribuer des adresses statiques
On pourra attribuer une adresse IP et un nom d’hôte fixe en fonction de l’adresse MAC des interfaces réseau respectives, en ajoutant une série d’entrées comme ceci.
# /etc/dnsmasq.conf ... dhcp-host=00:1E:C9:43:A7:BF,poste-01,192.168.3.2 dhcp-host=00:1D:09:15:4A:D8,poste-02,192.168.3.3 ...
On choisira les adresses IP en-dehors de la plage d’adresses dynamiques.
Si l’on souhaite attribuer une adresse IP et un nom d’hôte fixe à un portable que l’on connecte aussi bien par le wifi que par une connexion filaire, on peut utiliser la syntaxe suivante.
# /etc/dnsmasq.conf ... dhcp-host=B8:CA:3A:D6:5A:43,1C:3E:84:32:7E:87,macbook,192.168.3.4 ...
Gérer les hôtes statiques
L’ajout d’hôtes statiques est extrêmement simple avec Dnsmasq. Il suffit d’ajouter l’entrée correspondante dans le fichier /etc/hosts
du serveur, et celui-ci se chargera de propager l’info au niveau du réseau local.
# /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.3.1 amandine.sandbox.lan amandine 192.168.3.2 poste-01 192.168.3.3 poste-02 192.168.3.4 macbook ... 192.168.3.252 hp-officejet 192.168.3.253 nas 192.168.3.254 wifi
Dnsmasq lit les informations sur les hôtes statiques dans le fichier
/etc/hosts
, et non pas dans /etc/dnsmasq.conf
. La résolution correcte des noms d’hôtes dans le réseau local se fait donc au prix d’une petite redondance.
Relancer Dnsmasq pour prendre en compte les modifications.
$ sudo systemctl restart dnsmasq
Les postes clients sur le réseau utilisent les informations sur les noms d’hôtes fournies par Dnsmasq. Pour que le serveur lui-même puisse les prendre en compte aussi, il faudra éditer /etc/resolv.conf
comme ceci.
# /etc/resolv.conf
nameserver 127.0.0.1
Vérifions.
[microlinux@amandine:~] $ host poste-01 poste-01 has address 192.168.3.2 [microlinux@amandine:~] $ host poste-02 poste-02 has address 192.168.3.3
Afficher en direct l’attribution des baux DHCP
Sur le serveur, on peut suivre en direct l’attribution des baux DHCP en affichant en continu le journal /var/log/dnsmasq.log
.
$ sudo tail -f /var/log/dnsmasq.log Apr 4 09:28:42 ... DHCPREQUEST(enp3s1) 192.168.3.3 00:1d:09:15:4a:d8 Apr 4 09:28:42 ... DHCPACK(enp3s1) 192.168.3.3 00:1d:09:15:4a:d8 poste-02 Apr 4 09:28:42 ... DHCPREQUEST(enp3s1) 192.168.3.2 00:1e:c9:43:a7:bf Apr 4 09:28:42 ... DHCPACK(enp3s1) 192.168.3.2 00:1e:c9:43:a7:bf poste-01 ...
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.