informatique:applications:dnsmasq

dnsmasq

dnsmasq

Dnsmasq est un relais DNS et un serveur DHCP léger et facile à configurer. Il est conçu pour fournir le service DNS et éventuellement le service DHCP à un petit réseau. Il peut fournir le nom de machines locales qui ne sont pas dans le catalogue DNS global. Le serveur DHCP est intégré au serveur DNS et permet aux machines avec des adresses allouées grâce à DHCP d'apparaître dans le DNS avec des noms configurés soit dans chaque hôte ou dans un fichier de configuration central. Dnsmasq prend en charge les baux DHCP statiques et dynamiques et BOOTP/TFTP pour le démarrage par le réseau de machines sans disque.

Je détaille son installation et paramétrage pour Linux Debian / Ubuntu / Mint / Zorin OS / Raspberry Pi OS.

Avec Linux Fedora / Red Hat, vous pouvez suivre la procédure sur la page Use dnsmasq to provide DNS & DHCP services de Fedora Magazine.

* Pour installer le paquet dnsmasq, il faut utiliser les bonnes commandes pour le bon système d'exploitation. Pour une distribution Debian et dérivée, c'est la commande apt et la paquet dnsmasq inclus dans la distribution officielle de Debian.

sudo apt update
sudo apt install dnsmasq

Le service dnsmasq démarre et est activé à la fin de la procédure d'installation.

En standard, votre machine est configurée avec un ou plusieurs serveurs DNS externes. Cette déclaration est effectuée dans le fichier /etc/resolv.conf. Il se peut que d'autres noms d'hôtes (généralement des noms d'hôtes locaux) soient déclarés dans le fichier /etc/hosts)

Plus d'infos : resolv.conf

Les options de dnsmasq peuvent être définies soit sur la ligne de commande lors du démarrage de dnsmasq, soit dans son fichier de configuration /etc/dnsmasq.conf ou dans un fichier de configuration spécifique présent dans le dossier /etc/dnsmasq.d

Pour que la machine où est exécuté dnsmasq, utilise dnsmasq comme résolveur DNS, vous devez modifier le fichier /etc/resolv.conf avec la valeur 127.0.0.1
Il faut également modifier le fournisseur DNS upstream dans dnsmasq. Pour cela il faut utiliser l'option server ou l'option resolv-file qui indique le nom d'un fichier contenant les noms des fournisseurs DNS upstream. Il est nécessaire de désactiver la consultation du fichier /etc/resolv.conf par dnsmasq avec l'option no-resolv.

dnsmasq lit le fichier /etc/hosts afin que les noms des machines locales soient disponibles dans le DNS. Cela fonctionne bien lorsque vous donnez à toutes vos machines locales des adresses IP statiques, mais cela ne fonctionne pas lorsque les machines locales sont configurées via DHCP. Dnsmasq est livré avec un service DHCP intégré pour résoudre ce problème.

Le service DHCP de dnsmasq alloue des adresses aux hôtes du réseau et essaie de déterminer leurs noms. S'il y parvient, il ajoute la paire nom/adresse au DNS. Il y a essentiellement deux façons d'associer un nom à une machine configurée par DHCP; soit la machine connaît son nom lorsqu'elle obtient un bail DHCP, soit dnsmasq lui donne un nom, basé sur l'adresse MAC de sa carte ethernet. Pour que la première solution fonctionne, une machine doit connaître son nom lorsqu'elle demande un bail DHCP. Les noms peuvent être n'importe quoi en ce qui concerne DHCP, mais dnsmasq ajoute quelques limitations. Par défaut, les noms ne doivent pas avoir de partie de domaine, c'est-à-dire qu'ils doivent juste être des noms alphanumériques, sans aucun point. Il s'agit d'une fonction de sécurité pour empêcher une machine sur votre réseau de dire à DHCP que son nom est “www.google.com” et ainsi de capter le trafic qui ne devrait pas lui être destiné. Une partie domaine n'est autorisée par dnsmasq dans les noms de machines DHCP que si l'option domain-suffix est définie, la partie domaine doit correspondre au suffixe.

Lorsque vous avez des domaines locaux que vous ne voulez pas faire suivre aux serveurs en amont, il suffit d'utiliser les options de serveur sans l'adresse IP du serveur. Par exemple, l'option local=/localnet/ garantit que toute requête de nom de domaine se terminant par .localnet sera répondue si possible à partir de /etc/hosts ou DHCP, mais ne sera jamais envoyée à un serveur en amont.

L'option filterwin2k permet à dnsmasq d'ignorer certaines requêtes DNS qui sont faites par Windows toutes les quelques minutes. Ces requêtes n'obtiennent généralement pas de réponses raisonnables dans le DNS global et causent des problèmes en déclenchant des liaisons Internet à la demande.

Création d'un fichier de configuration spécifique dans /etc/dnsmasq.d/acegrp.conf

server permet d'indiquer le serveur upstream DNS. Il est nécessaire de l'indiquer car la consultation du fichier /etc/resolv.conf a été désactiver avec l'option no-resolv.

alias=8.8.8.8,192.168.100.1
 
listen-address=127.0.0.1,192.168.100.1
 
domain-needed
bogus-priv
filterwin2k
 
localise-queries
local=/acegrp.lan/
domain=acegrp.lan
expand-hosts
no-negcache
no-resolv
clear-on-reload
#resolv-file=/tmp/resolv.conf.auto
 
dhcp-authoritative
dhcp-leasefile=/tmp/dhcp.leases
 
#log-queries
log-dhcp
 
# use /etc/ethers for static hosts; same format as --dhcp-host
#read-ethers
 
# activez le serveur DHCP:
# Plage DHCP
dhcp-range=192.168.100.2,192.168.100.254,1h
# Netmask
dhcp-option=1,255.255.255.0
# Route
dhcp-option=3,192.168.100.254
dhcp-option=option:dns-server,192.168.100.3
# Set the NIS domain name to "acegrp.lan"
dhcp-option=40,acegrp.lan
 
# Send an empty WPAD option. This may be REQUIRED to get windows 7 to behave.
dhcp-option=252,"\n"
# If a DHCP client claims that its name is "wpad", ignore that.
# This fixes a security hole. see CERT Vulnerability VU#598349
dhcp-name-match=set:wpad-ignore,wpad
dhcp-ignore-names=tag:wpad-ignore
 
#upstream
#server=192.168.100.3
#server=1.1.1.1
server=9.9.9.10

* Consulter les logs des actions du service dnsmasq dans le fichier /var/log/syslog :

Jun 10 17:50:00 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:00 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:21 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:21 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:31 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:31 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:37 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:37 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:40 dnsmasq[21796]: query[A] zyx.qq.com from 115.34.22.160
Jun 10 17:50:40 dnsmasq[21796]: forwarded zyx.qq.com to 114.114.114.114
Jun 10 17:50:40 dnsmasq[21796]: forwarded zyx.qq.com to 223.5.5.5
Jun 10 17:50:40 dnsmasq[21796]: reply zyx.qq.com is 123.151.43.51
Jun 10 17:50:40 dnsmasq[21796]: reply zyx.qq.com is 183.60.62.158
Jun 10 17:50:40 dnsmasq[21796]: reply zyx.qq.com is 113.108.1.90
Jun 10 17:50:42 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:42 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:52 dnsmasq[21796]: query[A] isatap.lan from 115.34.22.160
Jun 10 17:50:52 dnsmasq[21796]: cached isatap.lan is NXDOMAIN-IPv4
Jun 10 17:50:58 dnsmasq[21796]: query[A] ic.wps.cn from 115.34.22.160

* Extraire une liste des noms de domaine demandés :

awk '!seen[$6]++ {print $6}' /var/log/syslog
  • informatique/applications/dnsmasq.txt
  • Dernière modification : 2023/07/19 21:12
  • de Cédric ABONNEL