Sur un réseau, les appareils n'échangent qu'avec des adresses IP.
Les serveurs DNS convertissent les noms d'hôte en adresses IP :
Un serveur DNS :
Dnsmasq assure à la fois les fonctions de cache et de serveur DHCP. Il gère les baux DHCP statiques et dynamiques.
Dans cette page, nous installons dnsmasq sur une machine pour lui donner accès aux machines du réseau local.
Voir aussi :
Nous présentons ici la méthode pour faire fonctionner les deux services ensemble.
...@...:~$ sudo apt install dnsmasq
Voir :
Comme précisé dans /etc/default/dnsmasq,
tous les fichiers du répertoire /etc/dnsmasq.d sont lus par dnsmasq en tant que fichiers de configuration,
sauf si leurs noms se terminent par “.dpkg-dist”, “. Dpkg-old” ou “.dpkg-new”.
On ne touche donc pas à :
Les fichiers de configuration à utiliser sont :
Fichier à utiliser | au lieu de | |
---|---|---|
/etc/hosts | résolution des noms d'hôte du réseau | |
/etc/resolv.dnsmasq | serveurs DNS à utiliser | /etc/resolv.conf |
/etc/dnsmasq.d/*.conf | fichier de configuration dans lequel une ligne demande d'utiliser /etc/resolv.dnsmasq | /etc/dnsmasq.conf |
...@...:~$ sudo mkdir /etc/systemd/resolved.conf.d
[Resolve] DNSStubListener=no
...@...:~$ sudo systemctl restart systemd-resolved.service
...@...:~$ sudo rm /etc/resolv.conf ...@...:~$ sudo touch /etc/resolv.conf
[main] dns=none
...@...:~$ sudo systemctl restart NetworkManager.service
resolv-file=/var/run/NetworkManager/resolv.conf
# Ignore les requêtes sans nom de domaine complet domain-needed # Pas de résolution inverse pour les réseaux privés bogus-priv # Fichier définissant les serveurs (au lieu de /etc/resolv.conf) resolv-file=/etc/resolv.dnsmasq # Essayer les serveurs dans l'ordre du fichier /etc/resolv.dnsmasq strict-order
address=/pc1.mondomaine/192.168.0.1 address=/framboise.mondomaine/192.168.0.31 address=/framboise4.mondomaine/192.168.0.32
Autre exemple :
# Teste les changements du fichier resolv.dnsmasq et le relit no-poll
# autres serveurs de noms, avec des spécifications de domaine si ce sont des domaines non publics : server=/localnet/192.168.0.1 # Exemple de routage des requêtes PTR vers les serveurs de noms # envoie toutes les requêtes adresse->nom pour 192.168.3/24 au serveur de noms 10.1.2.3 server=/3.168.192.in-addr.arpa/10.1.2.3
# domaines uniquement locaux # Les requêtes pour ces domaines ne sont traitées qu'à partir de /etc/hosts ou DHCP local=/localnet/
# forcer une adresse IP pour ces domaines. # Exemple : renvoyer n'importe quel hôte de doubleclick.net vers le serveur Web local : address=/doubleclick.net/127.0.0.1
interface=eth0
# Pour que dnsmasq ne lise pas /etc/hosts no-hosts
# Activer le serveur DHCP intégré avec la plage d'adresses disponibles et éventuellement une durée de bail : dhcp-range=192.168.0.100,192.168.0.150,24h # Baux statiques (adresse MAC,nom,adresse IP, durée du bail) # Baux permanents dhcp-host=00:24:d4:af:a8:0c,freebox-server,192.168.0.254,infinite dhcp-host=00:24:d4:7c:59:53,freebox-player,192.168.0.253,infinite dhcp-host=2C:B0:5D:8B:6C:12,swnetgear,192.168.0.239,infinite dhcp-host=14:DA:E9:6B:B2:03,omv,192.168.0.250,infinite dhcp-host=00:50:43:01:51:9A,sheebian,192.168.0.252,infinite dhcp-host=00:22:F4:42:A3:B1,picuntu,192.168.0.204,infinite # Baux à durée limitée dhcp-host=d0:66:7b:03:fa:66,samsungtv,192.168.0.20,48h dhcp-host=00:1e:8f:61:a4:0a,imprimante,192.168.0.21,48h dhcp-host=E0:2A:82:5B:34:F8,domadix,192.168.0.10,48h # Donner l'adresse IP 192.168.0.115 et un bail permanent à la machine qui annonce se nommer SqueezeboxTouch dhcp-host=SqueezeboxTouch,192.168.0.115,infinite
# Remplacer la route par défaut fournie par Dnsmasq (qui suppose que le routeur est sur la même machine que dnsmasq) # ici, mettre l'IP de la freebox comme routeur par défaut dhcp-option=option:router,192.168.0.254
# taille de la mémoire cache cache-size=256
On peut activer indépendamment les traces DNS et DHCP. Un exemple avec les deux activés (commenter log-queries ou log-dhcp pour inhiber) :
# Fichier de sortie du journal log-facility=/var/log/dnsmasq.log # Journaliser les requêtes DNS via Dnsmasq log-queries # Journaliser beaucoup d'informations supplémentaires sur les transactions DHCP log-dhcp
...@...:~$ sudo systemctl restart dnsmasq
# Use local dnsmasq for resolving nameserver 127.0.0.1
Inutile d'associer freebox-server = 192.168.0.254, cela ne fonctionnera pas, même si une règle dhcp-host est spécifiée dans le fichier de configuration.
La freebox-server est en effet configurée en IP statique sur la freebox (192.168.0.254). Elle ne lance pas de requête DHCP → dnsmasq ne reçoit donc pas de requête DHCP de la part de la freebox.
De même pour le Raspberry Pi qui héberge le serveur dnsmasq et est configuré en IP statique (bail statique dans la box ou fichier /etc/network/interfaces).
Mais en mettant ces adresses dans /etc/hosts, dnsmasq est configuré par défaut pour les lire.
Dans le fichier /etc/hosts, il ne faut pas indiquer framboise pour 127.0.0.1 sinon dnsmasq répondra à une requête DNS externe par la réponse framboise → 127.0.0.1, 192.168.0.31. Le PC distant contactera alors 127.0.0.1 (donc lui-même, alors qu'il pensait contacter framboise).
Voici un exemple de contenu du fichier /etc/hosts de framboise :
127.0.0.1 localhost 192.168.0.31 framboise 192.168.0.31 dns.local
Le fichier resolv.conf renvoie vers dnsmasq qui est installé sur cette machine :
Le fichier /etc/resolv.dnsmasq spécifie les serveurs DNS externes à utiliser par dnsmasq :
nameserver 127.0.0.1
Dnsmasq a été configuré pour respecter l'ordre de ce fichier (les préférés en premiers), cf. directive strict-order
Voici un exemple :
# Free nameserver 212.27.40.240 nameserver 212.27.40.241 # OpenDNS nameserver 208.67.222.222 nameserver 208.67.220.220 # OVH nameserver 91.121.161.184 nameserver 91.121.164.227 nameserver 188.165.197.144 # Google nameserver 8.8.8.8 nameserver 4.4.4.4
Solution sur framboise :
Dans /etc/hosts, indiquer les hôtes ayant une adresse IP statique et configurer dnsmasq pour lire le fichier /etc/hosts au démarrage. Pour cela, commenter la règle suivante :
#no-hosts
Dans le fichier /etc/hosts, il ne faut pas indiquer 'framboise' pour 127.0.0.1 sinon dnsmasq répondra à une requête DNS externe par la réponse framboise → 127.0.0.1, 192.168.0.250. L'hôte distant contactera donc 127.0.0.1 (c'est-à-dire lui-même, alors qu'il pensait contacter framboise)
On spécifie les hôtes avec une adresse IP statique, donc non allouée pas dnsmasq.
127.0.0.1 localhost 192.168.0.250 sheebian sheebian.maison.lan
Ce fichier spécifie le serveur DNS à utiliser, donc renvoie vers dnsmasq qui est installé sur cette machine.
nameserver 127.0.0.1
Cf la page officielle de man en français : http://www.linuxcertif.com/man/8/dnsmasq/
recopiée ici : Paramètres de dnsmasq.conf
Les directives de configuration seront écrites dans un fichier /etc/dnsmasq.d/local.conf créé pour l'occasion et pris en charge automatiquement 2)
Ce fichier spécifie en particulier les DNS externes à utiliser par dnsmasq (lignes nameserver). Dnsmasq a été configuré pour respecter l'ordre de ce fichier (les préférés en premiers), cf. directive strict-order
# Free nameserver 212.27.40.240 nameserver 212.27.40.241 # OpenDNS nameserver 208.67.222.222 nameserver 208.67.220.220 # OVH nameserver 91.121.161.184 nameserver 91.121.164.227 nameserver 188.165.197.144 # Google nameserver 8.8.8.8 nameserver 4.4.4.4
éditez avec les droits d'administration le fichier /etc/dnsmasq.d/local.conf pour paramétrer les adresses IP voulues comme ceci :
On commence par empêcher de faire sortir sur internet les requêtes de domaines locaux :
Pour que dnsmasq ajoute automatiquement le nom de domaine quand il sert la demande, ajoutez l'option expand-hosts et la définition du nom de domaine (domain=).
Avec expand-hosts, la recherche DNS pour hostname.your_domain.com sauf si your_domain.com est spécifié dans l'option adresse. Par exemple,
domain=your_domain.com expand-hosts address=/zirconium.your_domain.com/zr.your_domain.com/192.168.1.31
Pour faire des recherches DNS inverses, utiliser ptr record :
address=/host.example.net/10.1.2.30 ptr-record=30.2.1.10.in-addr.arpa,"host.example.net"
Pour créer des baux statiques, utiliser la méthode dhcp-host pour les adresses ci-dessus, mais avec des adresses MAC pour ceux qui en ont besoin, par exemple :
# This entry is simply a static DNS address, great for mapping print servers, etc to names dhcp-host=zinc,192.168.1.30 # This entry assigns the given IP address to the MAC address for static IP addresses # Note that the IP address listed does NOT have to be in the DHCP range given, just on the same subnet dhcp-host=11:22:33:44:55:66,zinc,192.168.1.30,infinite
domain-needed bogus-priv
domain-needed bogus-priv cache-size=1024 expand-hosts domain=lan resolv-file=/etc/resolv.dnsmasq # Free nameserver 212.27.40.240 nameserver 212.27.40.241 # OpenDNS nameserver 208.67.222.222 nameserver 208.67.220.220 # OVH nameserver 91.121.161.184 nameserver 91.121.164.227 nameserver 188.165.197.144 # Google nameserver 8.8.8.8 nameserver 4.4.4.4 # Adresses à forcer address=/localhost/127.0.0.1 address=/framboise/192.168.0.100 address=/chateau/192.168.0.1 address=/trianon/192.168.0.2 address=/framboise.lan/192.168.0.100 address=/chateau.lan/192.168.0.1 address=/trianon.lan/192.168.0.2
server=/google.com/1.2.3.4 server=/www.google.com/2.3.4.5
server=/google.com/1.2.3.4 server=/www.google.com/#
enverra les requêtes pour *.google.com → 1.2.3.4
address=/zinc/192.168.1.30 address=/zirconium/zr/192.168.1.31 dhcp-host=zinc,192.168.1.30
address=/localhost/127.0.0.1 # le localhost de la machine depuis laquelle on consulte le serveur address=/framboise/192.168.0.100 # domaine framboise et ses sous-domaines *.framboise address=/chateau/192.168.0.1 # domaine chateau et ses sous-domaines *.chateau address=/trianon/192.168.0.2 #: domaine trianon et ses sous-domaines *.trianon address=/framboise.lan/192.168.0.100 # domaine framboise.lan et ses sous-domaines *.framboise.lan etc. :
Pour renseigner ce fichier, voir Paramètres de dnsmasq.conf
C'est tout. Redémarrer le service en tapant la commande :
$ sudo service dnsmasq restart
Désormais, les domaines framboise.lan, etc ainsi que leurs sous-domaines (*.framboise.lan, etc.) existent et permettent l'utilisation des sous-domaines automatiques.
Il ne reste qu'à déclarer les serveurs DNS. Éditez avec les droits d'administration le fichier /etc/resolv.dnsmasq pour y écrire l'adresse IP des serveurs DNS comme ceci :
nameserver 192.168.0.100 nameserver 192.168.0.254
Ne pas oublier de laisser l'adresse de la box (ici, 192.168.0.254)
Créer un petit intranet «maison» :
Carte du réseau :
Nom d'hôte | Nom de domaine | nom complet de l'hôte | Adresse IP |
---|---|---|---|
serveur DNS | mondomaine.lan | ns.mondomaine.lan | 192.168.0.100 |
machine1 | mondomaine.lan | machine1.mondomaine.lan | 192.168.0.1 |
machine2 | mondomaine.lan | machine2.mondomaine.lan | 192.168.0.2 |
machineX | mondomaine.lan | machineX.mondomaine.lan | 192.168.0.X |
Déclarer le serveur DNS d'adresse 192.168.0.1 en premier dans le fichier /etc/resolv.conf en mettant sa ligne au début.
Les adresses de DNS du fournisseur d'accès sont spécifiées dans le fichier /etc/named.conf par l'instruction forwarders.
éditez avec les droits d'administration le fichier /etc/network/interfaces pour le modifier comme ceci :
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.1.254 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.1.1
éditez avec les droits d'administration le fichier /etc/hostname pour renseigner le nom du serveur DNS comme ceci :
dns.mondomaine.lan
Démarrer le service :
/etc/init.d/hostname.sh start
Éditez avec les droits d'administration le fichier /etc/hosts pour y inscrire le nom du serveur et son adresse IP :
127.0.0.1 localhost.localdomain localhost 192.168.0.200 dns.mondomaine.lan dns
Éditez avec les droits d'administration le fichier /etc/host.conf pour y insérer les paramètres suivants (normalement c'est déjà fait par l'installation de bind9) :
order hosts, bind multi on
Éditez avec les droits d'administration le fichier /etc/resolv.conf pour y entrer le domaine, la zone de recherche et le nom du serveur DNS :
domain mondomaine.lan search mondomaine.lan nameserver 192.168.0.200
Il faut installer le paquet dnsutils ou en console :
$ sudo apt install dnsutils
...@...:~$ host nom_du_serveur ...@...:~$ host @IP_du_serveur
Par exemple :
...@...:~$ host -a mondomaine.lan ...@...:~$ host test1.mondomaine.lan ...@...:~$ $ host test2.mondomaine.lan ...@...:~$ host test3.mondomaine.lan
...@...:~$ nslookup nom_du_serveur ..@...:~$ nslookup @IP_du_serveur
...@...:~$ dig nom_du_serveur ...@...:~$ dig nom_de_domaine ...@...:~$ dig -x @IP_du_serveur
Exemple :
...@...:~$ dig z.framboise4.parc ...;; ANSWER SECTION: z.framboise4.parc. 0 IN A 192.168.0.32 ... ;; SERVER: 127.0.0.1#53(127.0.0.1) ...
...@...:~$ ping nom_du_serveur ...@...:~$ ping adresse_IP_du_serveur
...@...:~$ dhclient eth0
Voici quelques définitions utiles à la compréhension et au paramétrage du DNS :
Maintenant vous disposez d’un serveur DNS digne de ce nom (sans faire de jeu de mots). Le DNS est important surtout si vous souhaitez installer d’autres services comme la messagerie par exemple.
!!! Solution de contournement : désactiver le resolver natif systemd-resolved.service et utiliser dnsmasq.
Création d'un fichier pour dnsmasq pour y renseigner ses serveurs DNS et les autres commandes de dnsmasq.
Créez avec les droits d'administration le fichier /etc/NetworkManager/dnsmasq.d/monresolv.conf pour y écrire :
cache-size=1000 except-interface=lo server=/localhost/127.0.0.1 server=/nom.domaine.tld/adresse_ip_serveur_dns_1 server=/nom.domaine.tld/adresse_ip_serveur_dns_2 # adresses : address=/domaine1.tld/adresse_ip_1 # domaine domaine1.tld et ses sous-domaines *.domaine1.tld
Stoppez et désactivez le service systemd-resolved :
$ sudo systemctl disable systemd-resolved.service ... Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service. Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service. $ sudo systemctl stop systemd-resolved.service
Supprimez le fichier resolv.conf :
$ sudo rm /etc/resolv.conf
Éditez avec les droits d'administration le fichier /etc/NetworkManager/NetworkManager.conf et ajoutez la méthode dns=dnsmasq :
[main] plugins=ifupdown,keyfile dns=dnsmasq
Redémarrez le service NetworkManager :
$ sudo systemctl restart NetworkManager
Vérifiez que le service dnsmasq est bien lancé :
$ sudo ps -ef | grep dnsmasq ... xxxxxxx 13654 4831 0 09:57 pts/0 00:00:00 grep --color=auto dnsmasq
Vérifiez le fichier resolv.conf :
$ cat /etc/resolv.conf # Generated by NetworkManager nameserver 127.0.1.1
source : https://it.izero.fr/linux-remplacer-resolver-dns-systemd-resolved-par-dnsmasq/
Pour supprimer cette application, il suffit de supprimer son paquet.
Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée.
Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.