====== Dnsmasq - Un serveur DHCP et cache DNS poids-plume ====== Cf la page officielle de man en français : [[http://www.linuxcertif.com/man/8/dnsmasq/]] reproduite ci-dessous. ===== Description ===== dnsmasq est un serveur DHCP et DNS à faible empreinte mémoire. Il offre à la fois les services DNS et DHCP pour un réseau local (LAN). Dnsmasq accepte les requêtes DNS et y réponds soit en utilisant un petit cache local, soit en effectuant une requête à un serveur DNS récursif externe (par exemple celui de votre fournisseur d'accès internet). Il charge le contenu du fichier /etc/hosts afin que les noms locaux n'apparaissant pas dans les DNS globaux soient tout de même résolus, et assure également la résolution de nom pour les hôtes présents dans le service DHCP. Le serveur DHCP Dnsmasq DHCP supporte les définitions d'adresses statiques et les réseaux multiples. Il envoie par défaut un jeu raisonnable de paramètres DHCP, et peut être configuré pour envoyer n'importe quel option DHCP. Il inclut un serveur TFTP sécurisé en lecture seule permettant le démarrage via le réseau/PXE de clients DHCP et supporte également le protocole BOOTP. Dnsmasq supporte IPv6 pour le DNS mais pas pour le DHCP. ===== Options ===== Il est possible d'utiliser des options sans leur donner de paramètre. Dans ce cas, la fonction correspondante sera désactivée. Par exemple --pid-file= (sans paramètre après le %%=)%% désactive l'écriture du fichier PID. Sur BSD, à moins que le logiciel ne soit compilé avec la bibliothèque GNU getopt, la forme longue des options ne fonctionne pas en ligne de commande; Elle est toujours supportée dans le fichier de configuration. ; no-hosts : Ne pas charger les noms du fichier **/etc/hosts** ; addn-hosts= : Fichiers d'hôtes additionnels * Lire le fichier en plus de **/etc/hosts** * Cette option peut être répétée pour ajouter d'autres fichiers. * Si c'est un nom de répertoire qui est donné, lit les fichiers contenus dans ce répertoire. ; expand-hosts : Ajoute le nom de domaine aux noms simples (ne contenant pas de point dans le nom) * contenus dans le fichier **/etc/hosts** * et pour le service DHCP * cela ne s'applique pas au nom de domaine dans les CNAME, les enregistrements PTR, TXT, etc... ; local-ttl= : time-to-live (en secondes) à retourner. * Lorsque Dnsmasq répond avec une information provenant du fichier **/etc/hosts** ou avec un bail DHCP, il donne un temps de vie (time-to-live) nul pour que la requête ne soit pas mise en cache. C'est généralement le mieux. ; neg-ttl= : durée de vie par défaut (en secondes) que dnsmasq utilise pour mettre les réponses négatives dans son cache, même en l'absence d'enregistrement SOA. * Les réponses négatives des serveurs amont contiennent normalement une information de durée de vie (time-to-live) dans les enregistrements SOA, information dont dnsmasq se sert pour mettre la réponse en cache. * Si la réponse du serveur amont omet cette information, dnsmasq ne met pas la réponse en cache. ; max-ttl= : valeur maximum de TTL fournie aux clients. * Cette valeur maximum de TTL sera fournie aux clients en remplacement de la vraie valeur de TTL si cette dernière est supérieure. * La valeur réelle de TTL est cependant conservée en cache pour éviter de saturer les serveurs DNS en amont. ; log-queries : Enregistrer les résultats des requêtes DNS traitées par Dnsmasq dans un fichier de traces ("logs"). Active la génération d'un état complet du cache lors de la réception d'un signal SIGUSR1. ; log-facility= : Définit la "facility" dans laquelle Dnsmasq enverra ses entrées syslog, par défaut DAEMON ou LOCAL0 si le mode debug est activé. Si la "facility" contient au moins un caractère "/", alors Dnsmasq considère qu'il s'agit d'un fichier et enverra les logs dans le fichier correspondant à la place du syslog. Si la "facility" est '-', alors dnsmasq envoie les logs sur la sortie d'erreur standard stderr. (Les erreurs lors de la lecture de la configuration vont toujours vers le syslog, mais tous les messages postérieurs à un démarrage réussi seront exclusivement envoyés vers le fichier de logs). Lorsque Dnsmasq est configuré pour envoyer ses traces vers un fichier, la réception d'un signal SIGUSR2 entraine la fermeture et réouverture du fichier. Cela permet la rotation de fichiers de traces sans nécessiter l'arrêt de Dnsmasq. ; log-async[=] : Permet l'envoi de traces de manière asynchrone, et de manière optionnelle, le nombre de lignes devant être mises dans la file d'attente par Dnsmasq lorsque l'écriture vers le syslog est lente. Dnsmasq peut envoyer ses logs de manière asynchrone : cela lui permet de continuer à fonctionner sans être bloqué par le syslog, et permet à syslog d'utiliser Dnsmasq pour les résolutions DNS sans risque d'interblocage. Si la file d'attente devient pleine, Dnsmasq loggera le dépassement de file et le nombre de messages perdus. La longueur par défaut de la file d'attente est de 5 et une valeur saine sera comprise entre 5 et 25, avec une limite maximum imposée de 100. ; pid-file= : Spécifie un fichier dans lequel stocker le numéro de processus (pid). La valeur par défaut est /var/run/dnsmasq.pid. ; user= : Spécifie l'identité (nom d'utilisateur) prise par Dnsmasq après le démarrage. Dnsmasq doit normalement être démarré en temps que root ("super-utilisateur"), mais abandonne ses privilèges après le démarrage en changeant d'identité. Normalement cet utilisateur est l'utilisateur nobody ("personne"), mais il est possible d'en définir un autre par le biais de ce paramètre. ; group= : Spécifie le groupe sous lequel Dnsmasq s'exécute. Par défaut, il s'agit du groupe "dip", afin de faciliter l'accès au fichier /etc/ppp/resolv.conf qui n'est en général pas en lecture par tout le monde. ; version : Imprime le numéro de version. ; port= : Ecoute sur le port numéro au lieu du port DNS standard (53). Paramétrer cette valeur à zéro désactive complètement la fonction DNS pour ne laisser actif que le DHCP ou le TFTP. ; edns-packet-max= : Spécifie la taille maximum de paquet UDP EDNS.0 supporté par le relai DNS. Le défaut est de 4096, qui est la valeur recommandée dans la RFC5625. ; query-port= : Envoie et écoute les requêtes DNS sortantes depuis le port UDP spécifié par , et non sur un port aléatoire. NOTE : Cette option rends dnsmasq moins sûr contre les attaques par usurpation DNS ("DNS spoofing"), mais cela peut permettre d'utiliser moins de ressources et d'être plus rapide. Donner une valeur de zéro à cette option restaure le comportement par défaut présent dans les versions de dnsmasq inférieures à 2.43 qui consiste à n'allouer qu'un seul port alloué par le système d'exploitation. ; min-port= : Ne pas utiliser de port dont le numéro est inférieur à la valeur donnée en paramètre pour les requêtes DNS sortantes. Dnsmasq choisis un port source aléatoire pour les requêtes sortantes : lorsque cette option est fournie, les ports utilisés seront toujours au dessus de la valeur spécifiée. Utile pour des systèmes derrière des dispositifs garde-barrières ("firewalls"). ; interface= : N'écouter que sur l'interface réseau spécifiée. Dnsmasq aujoute automatiquement l'interface locale ("loopback") à la liste des interfaces lorsque l'option --interface est utilisée. Si aucune option --interface ou --listen-address n'est donnée, Dnsmasq écoutera sur toutes les interfaces disponibles sauf celle(s) spécifiée(s) par l'option --except-interface. Les alias d'interfaces IP (e-g "eth1:0") ne peuvent être utilisés ni avec --interface ni --except-interface. Utiliser l'option --listen-address à la place. ; except-interface= : Ne pas écouter sur l'interface spécifiée. Notez que l'ordre dans lesquelles les options --listen-address , --interface et --except-interface sont fournies n'importe pas, et que l'option --except-interface l'emporte toujours sur les autres. ; no-dhcp-interface= : Ne pas fournir de service DHCP sur l'interface spécifiée, mais fournir tout de même le service DNS. ; listen-address= : Ecouter sur la ou les adresse(s) IP spécifiée(s). Les options --interface et --listen-address peuvent-être spécifiées simultanément, auquel cas un jeu d'interfaces et d'adresses seront utilisées. Notez que si aucune option --interface n'est donnée alors qu'une option --listen-address l'est, Dnsmasq n'écoutera pas automatiquement sur l'interface locale ("loopback"). Pour activer l'écoute sur l'interface locale, il est alors nécessaire de fournir explicitement son adresse IP, 127.0.0.1 via l'option --listen-address. ; bind-interfaces : Sur les systèmes qui le supporte, Dnsmasq s'associe avec l'interface joker ("wildcard"), même lorsqu'il ne doit écouter que sur certaines interfaces. Par la suite, il rejette les requêtes auxquelles il ne doit pas répondre. Cette situation présente l'avantage de fonctionner même lorsque les interfaces vont et viennent ou changent d'adresses. L'option --bind-interfaces force Dnsmasq à ne réellement s'associer qu'avec les interfaces sur lesquelles il doit écouter. L'un des seuls cas où cette option est utile est celui où un autre serveur de nom (ou une autre instance de Dnsmasq) tourne sur la même machine. Utiliser cette option permet également d'avoir plusieurs instances de Dnsmasq fournissant un service DHCP sur la même machine. ; localise-queries : Retourne des réponses aux requêtes DNS dépendantes de l'interface sur laquelle la requête a été reçue, à partir du fichier /etc/hosts. Si un nom dans /etc/hosts a plus d'une adresse associée avec lui, et qu'une des adresses au moins est dans le même sous-réseau que l'interface sur laquelle la requête a été reçue, alors ne retourne que la(les) adresse(s) du sous-réseau considéré. Cela permet d'avoir dans /etc/hosts un serveur avec de multiples adresses, une pour chacune de ses interfaces, et de fournir aux hôtes l'adresse correcte (basée sur le réseau auquel ils sont attachés). Cette possibilité est actuellement limitée à IPv4. ; bogus-priv : Fausse résolution inverse pour les réseaux privés. Toutes les requêtes DNS inverses pour des adresses IP privées (ie 192.168.x.x, etc...) qui ne sont pas trouvées dans /etc/hosts ou dans le fichier de baux DHCP se voient retournées une réponse "pas de tel domaine" ("no such domain") au lieu d'être transmises aux serveurs de nom amont ("upstream server"). ; alias=[]|[-],[,] : Modifie les adresses IPv4 retournées par les serveurs de nom amont; est remplacée par . Si le optionnel est fourni, alors toute adresse correspondant à l'adresse / sera réécrite. Ainsi par exemple --alias=1.2.3.0,6.7.8.0,255.255.255.0 modifiera 1.2.3.56 en 6.7.8.56 et 1.2.3.67 en 6.7.8.67. Cette fonctionnalité correspond à ce que les routeurs Cisco PIX appellent "bidouillage DNS" ("DNS doctoring"). Si l'ancienne IP est donnée sous la forme d'une gamme d'adresses, alors seules les adresses dans cette gamme seront réecrites, et non le sous-réseau dans son ensemble. Ainsi, --alias=192.168.0.10-192.168.0.40,10.0.0.0,255.255.255.0 fait correspondre 192.168.0.10->192.168.0.40 à 10.0.0.10->10.0.0.40 ; bogus-nxdomain= : Transforme les réponses contenant l'adresse IP fournie en réponses "pas de tel domaine" ("no such domain"). Ceci a pour but de neutraliser la modification sournoise mise en place par Verisign en septembre 2003, lorsqu'ils ont commencé à retourner l'adresse d'un serveur web publicitaire en réponse aux requêtes pour les noms de domaines non enregistrés, au lieu de la réponse correcte "NXDOMAIN". Cette option demande à Dnsmasq de retourner la réponse correcte lorsqu'il constate ce comportement. L'adresse retournée par Verisign en septembre 2003 est 64.94.110.11. ; filterwin2k : Les dernières versions de windows font des requêtes DNS périodiques auxquelles non seulement les serveurs DNS publics ne peuvent donner de réponse, mais qui, de surcroît, peuvent poser des problèmes en déclenchant des connexions intempestives pour des liens réseaux avec des connexions "à la demande". Fournir cette option active le filtrage des requêtes de ce type. Les requêtes bloquées sont les requêtes pour les entrées de type SOA ou SRV, ainsi que les requêtes de type ANY avec des noms possédant des caractères sous-lignés (requêtes pour des serveurs LDAP). ; resolv-file= : Lis les adresses des serveurs de nom amont dans le fichier de nom , au lieu du fichier /etc/resolv.conf. Pour le format de ce fichier, voir dans le manuel pour resolv.conf(5) les entrées correspondant aux serveurs de noms (nameserver). Dnsmasq peut lire plusieurs fichiers de type resolv.conf, le premier fichier spécifié remplace le fichier par défaut, le contenu des suivants est rajouté dans la liste des fichiers à consulter. Seul le fichier ayant la dernière date de modification sera chargé en mémoire. ; no-resolv : Ne pas lire le contenu du fichier /etc/resolv.conf. N'obtenir l'adresse des serveurs de nom amont que depuis la ligne de commande ou le fichier de configuration de Dnsmasq. ; enable-dbus : Autoriser la mise à jour de la configuration de Dnsmasq par le biais d'appel de méthodes DBus. Il est possible par ce biais de mettre à jour l'adresse de serveurs DNS amont (et les domaines correspondants) et de vider le cache. Cette option nécessite que Dnsmasq soit compilé avec le support DBus. ; strict-order : Par défaut, Dnsmasq envoie les requêtes à n'importe lequel des serveurs amonts dont il a connaissance tout en essayant de favoriser les serveurs qu'il sait fonctionner. Cette option force Dnsmasq à essayer d'interroger, pour chaque requête, les serveurs DNS dans leur ordre d'apparition dans le fichier /etc/resolv.conf. ; all-servers : Par défaut, lorsque dnsmasq a plus d'un serveur amont disponible, il n'envoie les requêtes qu'à un seul serveur. Spécifier cette option force dnsmasq à effectuer ses requêtes à tous les serveurs disponibles. Le résultat renvoyé au client sera celui fournit par le premier serveur ayant répondu. ; stop-dns-rebind : Rejete (et enregistre dans le journal d'activité) les adresses dans la gamme d'adresses IP privée (au sens RFC1918) qui pourraient être renvoyées par les serveurs amonts suite à une résolution de nom. Cela bloque les attaques cherchant à détourner de leur usage les logiciels de navigation web ('browser') en s'en servant pour découvrir les machines situées sur le réseau local. ; rebind-localhost-ok : Exclue 127.0.0/8 des vérifications de réassociation DNS. Cette gamme d'adresses est retournée par les serveurs Realtime Blackhole (RBL, utilisés dans la lutte contre le spam), la bloquer peut entraîner des dysfonctionnements de ces services. ; %%rebind-domain-ok=[]|[[//[/]%% : Ne pas détecter ni bloquer les actions de type dns-rebind pour ces domaines. Cette option peut prendre comme valeur soit un nom de domaine soit plusieurs noms de domains entourés par des '/', selon une syntaxe similaire à l'option --server, c-à-d : --rebind-domain-ok=/domaine1/domaine2/domaine3/ ; no-poll : Ne pas vérifier régulièrement si le fichier /etc/resolv.conf a été modifié. ; clear-on-reload : Lorsque le fichier /etc/resolv.conf est relu, vider le cache DNS. Cela est utile si les nouveaux serveurs sont susceptibles d'avoir des données différentes de celles stockées dans le cache. ; domain-needed : Indique à Dnsmasq de ne jamais transmettre en amont de requêtes pour des noms simples, ne comprenant donc ni points ni nom de domaine. Si un nom n'est pas dans /etc/hosts ou dans la liste des baux DHCP, alors une réponse de type "non trouvé" est renvoyée. ; %%local, server=[/[]/[domaine/]][[#][@|[#]]]%% : Spécifie directement l'adresse IP d'un serveur de nom amont. Cette option ne supprime pas la lecture du fichier /etc/resolv.conf, utiliser pour cela l'option -R. Si un ou plusieurs nom(s) de domaine(s) optionnel(s) sont fournis, ce serveur sera uniquement utilisé uniquement pour ce(s) domaine(s), et toute requête concernant ce(s) domaine(s) sera adressée uniquement à ce serveur. Cette option est destinée aux serveurs de nom privés : si vous avez un serveur de nom sur votre réseau ayant pour adresse IP 192.168.1.1 et effectuant la résolution des noms de la forme xxx.internal.thekelleys.org.uk, alors -S /internal.thekelleys.org.uk/192.168.1.1 enverra toutes les requêtes pour les machines internes vers ce serveur de nom, alors que toutes les autres requêtes seront adressées aux serveurs indiqués dans le fichier /etc/resolv.conf. Une spécification de nom de domaine vide, %%//%% possède le sens particulier de "pour les noms non qualifiés uniquement", c'est-à-dire les noms ne possédant pas de points. Un port non standard peut être rajouté à la suite des adresses IP en utilisant le caractère #. Plus d'une option -S est autorisée, en répétant les domaines et adresses IP comme requis. : Le domaine le plus spécifique l'emporte sur le domaine le moins spécifique, ainsi : --server=/google.com/1.2.3.4 --server=/www.google.com/2.3.4.5 enverra les requêtes pour *.google.com à 1.2.3.4, à l'exception des requêtes *www.google.com, qui seront envoyées à 2.3.4.5. : L'adresse spéciale '#' signifie "utiliser les serveurs standards", ainsi --server=/google.com/1.2.3.4 --server=/www.google.com/# enverra les requêtes pour *.google.com à 1.2.3.4, à l'exception des requêtes pour *www.google.com qui seront envoyées comme d'habitude (c-à-d aux serveurs définis par défaut). : Il est également permis de donner une option -S avec un nom de domaine mais sans adresse IP; Cela informe Dnsmasq que le domaine est local et qu'il doit répondre aux requêtes le concernant depuis les entrées contenues dans le fichier /etc/hosts ou les baux DHCP, et ne doit en aucun cas transmettre les requêtes aux serveurs amonts. local est synonyme de server ("serveur") afin de rendre plus claire l'utilisation de cette option pour cet usage particulier. : La chaîne de caractères optionnelle suivant le caractère @ permet de définir la source que Dnsmasq doit utiliser pour les réponses à ce serveur de nom. Il doit s'agir d'une des adresses IP appartenant à la machine sur laquelle tourne Dnsmasq ou sinon la ligne sera ignorée et une erreur sera consignée dans le journal des événements, ou alors d'un nom d'interface. Si un nom d'interface est donné, alors les requêtes vers le serveur de nom seront envoyées depuis cette interface; si une adresse ip est donnée, alors l'adresse source de la requête sera l'adresse en question. L'option query-port est ignorée pour tous les serveurs ayant une adresse source spécifiée, mais il est possible de la donner directement dans la spécification de l'adresse source. Forcer les requêtes à être émises depuis une interface spécifique n'est pas possible sur toutes les plateformes supportées par dnsmasq. ; address=//[domaine/] : Spécifie une adresse IP à retourner pour toute requête pour les domaines fournis en option. Les requêtes pour ce(s) domaine(s) ne sont jamais transmises aux serveurs amonts et reçoivent comme réponse l'adresse IP spécifiée qui peut être une adresse IPv4 ou IPv6. Pour donner à la fois une adresse IPv4 et une adresse IPv6 pour un domaine, utiliser plusieurs options -A. Il faut noter que le contenu du fichier /etc/hosts et de celui des baux DHCP supplante ceci pour des noms individuels. Une utilisation courante de cette option est de rediriger la totalité du domaine doubleclick.net vers un serveur web local afin d'éviter les bannières publicitaires. La spécification de domaine fonctionne de la même façon que --server, avec la caractéristique supplémentaire que /#/ coïncide avec tout domaine. Ainsi, : address=/#/1.2.3.4 retournera 1.2.3.4 pour toute requête n'ayant de réponse ni dans /etc/hosts, ni dans les baux DHCP, et n'étant pas transmise à un serveur spécifique par le biais d'une directive --server. ; %%mx-host=[[,],]%% : Spécifie un enregistrement de type MX pour retournant le nom donné dans (s'il est présent), ou sinon le nom spécifié dans l'option --mx-target si elle est présente. Sinon retourne le nom de la machine sur laquelle Dnsmasq tourne. La valeur par défaut (spécifiée dans l'option --mx-target ) est utile dans un réseau local pour rediriger les courriers électroniques vers un serveur central. La valeur de préférence est optionnelle et vaut par défaut 1 si elle n'est pas spécifiée. Plus d'une entrée MX peut être fournie pour un hôte donné. ; mx-target= : Spécifie la réponse par défaut fournie par Dnsmasq pour les requêtes sur des enregistrements de type MX. Voir --mx-host. Si --mx-target est donné mais pas de --mx-host, alors Dnsmasq retourne comme réponse un enregistrement MX contenant le nom d'hôte spécifié dans l'option --mx-target pour toute requête concernant le MX de la machine sur laquelle tourne Dnsmasq. ; selfmx : Définit, pour toutes les machines locales, un MX correspondant à l'hôte considéré. Les machines locales sont celles définies dans le fichier /etc/hosts ou dans un bail DHCP. ; localmx : Définit, pour toutes les machines locales, un enregistrement MX pointant sur l'hôte spécifié par mx-target (ou la machine sur laquelle Dnsmasq tourne). Les machines locales sont celles définies dans le fichier /etc/hosts ou dans un bail DHCP. ; srv-host=<_service>.<_protocole>.[],[[,[,[,]]]] : Spécifie un enregistrement DNS de type SRV. Voir la RFC2782 pour plus de détails. Si le champs n'est pas fourni, prends par défaut la valeur fournie dans l'option --domain. La valeur par défaut pour le domaine est vide et le port par défaut est 1, alors que les poids et priorités par défaut sont 0. Attention lorsque vous transposez des valeurs issues d'une configuration BIND : les ports, poids et priorités sont dans un ordre différents. Pour un service/domaine donné, plus d'un enregistrement SRV est autorisé et tous les enregistrements qui coïncident sont retournés dans la réponse. ; %%txt-record=[[,],]%% : Définit un enregistrement DNS de type TXT. La valeur de l'enregistrement TXT est un ensemble de chaînes de caractères, donc un nombre variable de chaînes de caractères peuvent être spécifiées, séparées par des virgules. ; ptr-record=[,] : Définit un enregistrement DNS de type PTR. ; naptr-record=,,,,,[,] : Retourne un enregistrement de type NAPTR, tel que spécifié dans le RFC3403. ; cname=, : Retourne un enregistrement de type CNAME qui indique que est en réalité . Il existe des contraintes significatives sur la valeur de cible; il doit s'agir d'un nom DNS qui est connu de dnsmasq via /etc/hosts (ou un fichier hôtes additionnel) ou via DHCP. Si une cible ne satisfait pas ces critères, le CNAME est ignoré. Le CNAME doit être unique, mais il est autorisé d'avoir plus d'un CNAME pointant vers la même cible. ; interface-name=, : Définit un entregistrement DNS associant le nom avec l'adresse primaire sur l'interface donnée en argument. Cette option spécifie un enregistrement de type A pour le nom donné en argument de la même façon que s'il était défini par une ligne de /etc/hosts, sauf que l'adresse n'est pas constante mais dépendante de l'interface définie. Si l'interface est inactive, non existante ou non configurée, une réponse vide est fournie. Un enregistrement inverse (PTR) est également créé par cette option, associant l'adresse de l'interface avec le nom. Plus d'un nom peut être associé à une interface donnée en répétant cette option plusieurs fois; dans ce cas, l'enregistrement inverse pointe vers le nom fourni dans la première instance de cette option. ; cache-size= : Définit la taille du cache de Dnsmasq. La valeur par défaut est de 150 noms. Définir une valeur de zéro désactive le cache. ; no-negcache : Désactive le "cache négatif". Le "cache négatif" permet à Dnsmasq de se souvenir des réponses de type "no such domain" fournies par les serveurs DNS en amont et de fournir les réponses sans avoir à re-transmettre les requêtes aux serveurs amont. ; dns-forward-max= : Définit le nombre maximum de requêtes DNS simultanées. La valeur par défaut est 150, ce qui devrait être suffisant dans la majorité des configurations. La seule situation identifiée dans laquelle cette valeur nécessite d'être augmentée est lorsqu'un serveur web a la résolution de nom activée pour l'enregistrement de son journal des requêtes, ce qui peut générer un nombre important de requêtes simultanées. ; dhcp-range=[interface:,][tag: