DnsmasqCette 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

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 et bogus-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’option local.
  • 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 un ping sur poste-01, Dnsmasq retournera automatiquement l’adresse IP de l’hôte poste-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 serveurs 8.8.8.8 et 8.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 directive log-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

ImportantDnsmasq 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.

 

Catégories : Serveur