Introduction
dnsmasq :
- Serveur DHCP IPv4 + IPv6 (DHCPv6, SLAAC)
- DNS forwarder + cache (pas autoritaire)
- Support TFTP integre (PXE)
- Resolution des noms LAN automatique
- Configuration ultra-simple (un fichier)
- Disponible sur Linux, BSD, OpenWrt
Cas d'usage :
- Routeur/firewall (souvent integre, ex: OpenWrt, pfSense)
- LAN bureau / lab / datacenter petit
- PXE boot
- DHCP simple avec reservations statiques
Note : dnsmasq n'est pas un serveur DNS autoritaire. Pour ca, regardez BIND9 ou NSD.
Prerequis
- VPS / serveur Linux Debian / Ubuntu
- Acces root
- Interface reseau dediee au LAN (pas dans le meme broadcast que votre VPS public!)
Etape 1 : Installation
sudo apt update
sudo apt install -y dnsmasq dnsmasq-utils
dnsmasq --version
⚠️ Sur Ubuntu, systemd-resolved ecoute deja sur 53. Desactivez-le ou changez le port dnsmasq :
sudo systemctl disable --now systemd-resolved
sudo unlink /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
Etape 2 : Configuration de base
sudo nano /etc/dnsmasq.d/lan.conf
# Interface
interface=ens4
bind-interfaces
# Pas d'ecoute sur l'interface publique
except-interface=ens3
# DNS forwarder
domain-needed
bogus-priv
no-resolv
# Upstream DNS
server=9.9.9.9
server=1.1.1.1
# Cache
cache-size=10000
no-negcache
# Logs
log-queries
log-dhcp
Etape 3 : DHCP
# DHCP range
dhcp-range=192.168.50.100,192.168.50.200,12h
# DHCP options (passees aux clients)
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,192.168.50.1
dhcp-option=option:domain-name,verycloud.lan
dhcp-option=option:netbios-ns,192.168.50.1
# Lease database
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
Etape 4 : Reservations statiques
Pour donner toujours la meme IP a certains appareils :
dhcp-host=AA:BB:CC:DD:EE:01,192.168.50.10,web01
dhcp-host=AA:BB:CC:DD:EE:02,192.168.50.11,db01
dhcp-host=AA:BB:CC:DD:EE:03,192.168.50.12,proxy01,infinite
infinite = lease infini (utile pour les serveurs).
Etape 5 : Domain local
Pour resoudre automatiquement les noms des appareils :
local=/verycloud.lan/
domain=verycloud.lan
expand-hosts
Maintenant si un client DHCP s'appelle laptop-mathys, on peut le pinger via laptop-mathys.verycloud.lan.
Etape 6 : Demarrer et tester
sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq
Verifiez les logs :
sudo journalctl -u dnsmasq -f
Sur un client LAN, demandez un bail :
sudo dhclient -r eth0 && sudo dhclient eth0
Verifiez le leasefile :
sudo cat /var/lib/misc/dnsmasq.leases
Etape 7 : Mappings hosts
Pour ajouter des entrees DNS manuelles (non DHCP) :
address=/internal-app/192.168.50.50
address=/grafana.verycloud.lan/192.168.50.51
Ou utilisez /etc/hosts standard (dnsmasq le lit automatiquement) :
192.168.50.50 internal-app internal-app.verycloud.lan
192.168.50.51 grafana.verycloud.lan
Etape 8 : TFTP / PXE Boot
Pour ajouter le PXE boot a votre dnsmasq (voir tuto 28 pour le detail) :
enable-tftp
tftp-root=/srv/tftp
dhcp-boot=pxelinux.0
Tres pratique : dnsmasq fait DHCP + TFTP + DNS d'un coup, parfait pour un lab.
Etape 9 : DHCP options avancees
# Force le DNS Pi-hole pour tous les clients DHCP
dhcp-option=option:dns-server,192.168.50.2
# NTP
dhcp-option=option:ntp-server,192.168.50.1
# Tag base sur la MAC ou IP
dhcp-host=set:office,192.168.50.20-192.168.50.49
# Tag base sur le vendor class
dhcp-vendorclass=set:windows,MSFT
# Specifique aux Windows
dhcp-option=tag:windows,option:netbios-ns,192.168.50.1
Etape 10 : DHCP IPv6 (SLAAC + DHCPv6)
# IPv6 ranges
dhcp-range=fd12:3456::,ra-only,infinite
dhcp-range=fd12:3456::100,fd12:3456::200,64,12h
# Router Advertisement
ra-param=ens4
enable-ra
Etape 11 : Logs et stats
# Stats temps reel (envoie SIGUSR1)
sudo killall -SIGUSR1 dnsmasq
sudo journalctl -u dnsmasq | tail -20
Affiche :
- Cache size, hits, misses
- DHCP leases actifs
- Top queries
Pour Prometheus : dnsmasq_exporter.
Etape 12 : Mode resolveur DNS seul (sans DHCP)
Si vous voulez juste un cache DNS local rapide :
# Pas de DHCP
no-dhcp-interface=ens3,ens4
# Pas d'ecoute sur LAN (juste localhost)
interface=lo
bind-interfaces
# Upstream
no-resolv
server=1.1.1.1
server=9.9.9.9
cache-size=10000
Et configurez /etc/resolv.conf :
nameserver 127.0.0.1
Le DNS local est tres rapide grace au cache.
Depannage
"dnsmasq: failed to create listening socket"
Port 53 deja pris. Verifiez :
sudo ss -tunlp | grep :53
Souvent systemd-resolved. Desactivez-le.
Clients n'obtiennent pas de bail DHCP
Verifiez :
- Interface correcte dans
interface=... - Pas de firewall qui bloque (port 67, 68 UDP)
- Reseau bien isole (pas de DHCP concurrent)
sudo tcpdump -i ens4 port 67 or port 68
Resolution lente / cache pas utilise
Verifiez le cache :
sudo killall -SIGUSR1 dnsmasq
sudo journalctl -u dnsmasq | grep cache
Si cache-size=0, augmentez. Si no-cache actif, retirez-le.
"no such file" sur leasefile
sudo touch /var/lib/misc/dnsmasq.leases
sudo chown dnsmasq:dnsmasq /var/lib/misc/dnsmasq.leases
Conflit avec un autre DHCP
Si vous voyez 2 reponses DHCP differentes sur le LAN, c'est un conflit. Tuez l'autre serveur (souvent un autre routeur).
Commandes utiles
# Service
sudo systemctl status dnsmasq
sudo systemctl restart dnsmasq
# Verifier la config sans demarrer
sudo dnsmasq --test
# Stats temps reel
sudo killall -SIGUSR1 dnsmasq
sudo journalctl -u dnsmasq | tail -30
# Voir les leases actifs
sudo cat /var/lib/misc/dnsmasq.leases
# Format : timestamp_expire MAC IP hostname client-id
# 1700000000 aa:bb:cc:dd:ee:01 192.168.50.100 laptop-mathys 01:aa:bb:cc:dd:ee:01
# Lister les DHCP options envoyees
sudo dhcpdump -i ens4
# Tester resolution
dig @192.168.50.1 google.com
nslookup web01.verycloud.lan 192.168.50.1
Conclusion
dnsmasq est l'outil tout-en-un pour les LAN simples :
- DHCP + DNS + TFTP en un binaire
- Tres leger (RAM, CPU)
- Configuration en un fichier
- Resolution auto des hostnames LAN
Limites :
- Pas autoritaire DNS (pour servir un domaine public, utilisez BIND9/NSD/PowerDNS)
- Pas adapte aux grosses infrastructures (utilisez ISC DHCP / Kea)
Pour aller plus loin :
- Combinez avec Unbound ou Pi-hole pour la couche resolveur
- Pour DHCP enterprise, regardez ISC Kea (successeur d'ISC DHCP)
- Pour DDNS, utilisez nsupdate ou Knot DNS
Ressources
- Documentation officielle : https://thekelleys.org.uk/dnsmasq/doc.html
- Wiki Debian : https://wiki.debian.org/Dnsmasq
- Best practices OpenWrt : https://openwrt.org/docs/guide-user/base-system/dhcp
- Source : https://thekelleys.org.uk/dnsmasq/


















