Configurer un serveur DNS pour son poste de travail avec Dnsmasq
DnsMasq est un petit serveur DNS (cache DNS). Peu gourmand en ressources et très simple à configurer, il est bien adapté à une installation pour installer un petit serveur DNS sur son poste de travail.
Pour la résolution des noms, il se base sur les DNS déclarés dans la configuration réseau (/etc/resolv.conf) ou sur le fichier /etc/hosts. Ce qui est bien pratique pour configurer une petite zone lan : il suffit d’éditer le fichier /etc/hosts comme nous le ferions pour une seule machine.
Installer une interface réseau virtuelle pour le serveur DNS
Éditer /etc/systemd/network/10-virtualeth0.netdev
[NetDev] Name = virtualeth0 Kind = dummy
Éditer /etc/systemd/network/10-virtualeth0.network
[Match] Name = virtualeth0 [Network] Address = 10.10.10.1/24 Address = fd00::/8
systemctl start systemd-networkd.service
systemctl enable systemd-networkd.service
reboot
Après le redémarrage vérifier la présence de l'interface réseau virtuelle.
ip a … 3: virtualeth0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether 9a:3c:56:42:f5:c9 brd ff:ff:ff:ff:ff:ff inet 10.10.10.1/24 brd 10.10.10.255 scope global virtualeth0 valid_lft forever preferred_lft forever inet6 fd00::/8 scope global valid_lft forever preferred_lft forever inet6 fe80::983c:56ff:fe42:f5c9/64 scope link valid_lft forever preferred_lft forever …
Configuration du client DHCP
Pour pouvoir ajouter le serveur DNS local à /etc/resolv.conf, il faut renseigner l’option prepend qui permet l’ajout du serveur DNS local en début de la liste des serveurs DNS fournit automatiquement par DHCP.
Vérifier les DNS présents :
$ nmcli dev show | grep DNS IP4.DNS[1]: yyy.yyy.yyy.yyy IP4.DNS[1]: yyy.yyy.yyy.yyy IP6.DNS[1]: yyyy:yyyy:yyyy::yyyy IP6.DNS[2]: yyyy:yyyy:yyyy::yyyy IP6.DNS[3]: yyyy:yyyy:yyyy::yyyy $ resolvectl dns Global: Link 2 (enp0sxx): Link 3 (wlx803xxxxx): yyyy:yyyy:yyyy::yyyy yyyy:yyyy:yyyy::yyyy yyyy:yyyy:yyyy::yyyy yyy.yyy.yyy.yyy Link 4 (wlo1): yyy.yyy.yyy.yyy Link 6 (virtualeth0):
Éditer /etc/dhcp/dhclient.conf
prepend domaine-perso.fr 10.10.10.1 fd00::;
Domaine local du poste de travail
Voir le domaine local du poste de travail
$ hostname -d
Définir le domaine local de la machine Ubuntu
$ sudo hostnamectl set-hostname MachineUbuntu.domaine-perso.fr --static $ hostname -d domaine-perso.fr
Installation de Dnsmasq
Installer les applications de base pour Dnsmasq et sa gestion
$ sudo apt install dnsmasq net-tools
Configuration serveur DNS de Dnsmasq
Éditer /etc/dnsmasq.conf
# Ne transmet pas les requêtes ne contenant pas un nom de domaine complet domain-needed # "no such domain" pour des adresses IP privées non référencées dans dnsmasq bogus-priv # Corrige du spam DNS Microsoft filterwin2k # Formate les requêtes DNS suivant l’interface réseau utilisée localise-queries # Domaine dns local local = /domaine-perso.fr/ # Interfaces DNS interface = virtualeth0 exept-interface = lo exept-interface = enp0sxx exept-interface = wlx803xxxxx exept-interface = wlox # Adresses écoutées listen-address = 127.0.0.1 listen-address = 10.10.10.1 listen-address = fd00:: # Toutes les interfaces réseau sont en mode serveur DNS c’est ce qui permet de démarrer le serveur DNS bind-interfaces # Ajoute le nom de domaine DNS aux entrées /etc/hosts expand-hosts # Non de domaine pour extensions "expand-hosts" domain=domaine-perso.fr # Taille du cache DNS cache-size = 1000 # Désactive le "cache négatif" sur réponses "no such domain" no-negcache
Ajout du server DNS local à la liste des serveurs DNS de systemd-resolved. Éditer /etc/systemd/resolved.conf
DNS=10.10.10.1 fd00::
Relance de Dnsmasq
$ systemctl restart dnsmasq.service
$ systemctl enable dnsmasq.service
$ systemctl restart systemd-resolved.service
$ nmcli general reload
Ouvrir avec le pare feu les ports DNS pour les rendre accessibles depuis le réseau lan
Ouvrir le port DNS sur l'interface d'ip xxx.xxx.xxx.xxx avec UFW. Si UFW est activé, ouvrez le port DNS 53, UDP.
$ sudo ufw allow from xxx.xxx.0.0/16 to any port 53 proto udp
Tests du serveur DNS
Vérifier que le port 53 est utilisé par Dnsmasq
$ sudo lsof -i:53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 53916 systemd-resolve 12u IPv4 99537 0t0 UDP localhost:domain systemd-r 53916 systemd-resolve 13u IPv4 99538 0t0 TCP localhost:domain (LISTEN) dnsmasq 53732 dnsmasq 4u IPv4 95141 0t0 UDP MachineUbuntu:domain dnsmasq 53732 dnsmasq 5u IPv4 95142 0t0 TCP MachineUbuntu:domain (LISTEN) dnsmasq 53732 dnsmasq 6u IPv4 95151 0t0 UDP localhost:domain dnsmasq 53732 dnsmasq 7u IPv4 95152 0t0 TCP localhost:domain (LISTEN) dnsmasq 53732 dnsmasq 8u IPv6 95153 0t0 UDP MachineUbuntu:domain dnsmasq 53732 dnsmasq 9u IPv6 95154 0t0 TCP MachineUbuntu:domain (LISTEN) dnsmasq 53732 dnsmasq 10u IPv6 95155 0t0 UDP MachineUbuntu:domain dnsmasq 53732 dnsmasq 11u IPv6 95156 0t0 TCP MachineUbuntu:domain (LISTEN)
Vérifier que Dnsmasq écoute les requettes DNS sur les bonnes interfaces
$ sudo netstat -alnp | grep -i :53 tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 53916/systemd-resol tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 53732/dnsmasq tcp 0 0 10.10.10.1:53 0.0.0.0:* LISTEN 53732/dnsmasq tcp6 0 0 fd00:::53 :::* LISTEN 53732/dnsmasq tcp6 0 0 fe80::b817:faff:fe21:53 :::* LISTEN 53732/dnsmasq udp 0 0 127.0.0.53:53 0.0.0.0:* 53916/systemd-resol udp 0 0 127.0.0.1:53 0.0.0.0:* 53732/dnsmasq udp 0 0 10.10.10.1:53 0.0.0.0:* 53732/dnsmasq udp 0 0 0.0.0.0:5353 0.0.0.0:* 772/avahi-daemon: r udp6 0 0 fd00:::53 :::* 53732/dnsmasq udp6 0 0 fe80::b817:faff:fe21:53 :::* 53732/dnsmasq udp6 0 0 :::5353 :::* 772/avahi-daemon: r
Vérifier que le poste de travail écoute les résolution DNS de Dnsmasq
$ resolvectl dns Global: 10.10.10.1 fd00:: Link 2 (enp0sxx): yyyy:yyyy:yyyy::yyyy yyy.yyy.yyy.yyy Link 3 (virtualeth0): Link 4 (wlx803xxxxx): yyyy:yyyy:yyyy::yyyy yyyy:yyyy:yyyy::yyyy yyyy:yyyy:yyyy::yyyy yyy.yyy.yyy.yyy Link 5 (wlox): yyy.yyy.yyy.yyy
Vérifier la résolution DNS
$ dig MachineUbuntu +noall +answer MachineUbuntu. 0 IN A 127.0.1.1
$ dig MachineUbuntu.domaine-perso.fr +noall +answer MachineUbuntu.domaine-perso.fr. 0 IN A 127.0.1.1
$ dig bidon.domaine-perso.fr +noall +answer
$ dig bidon +noall +answer
Éditer /etc/hosts pour définir les alias DNS
127.0.0.1 localhost 127.0.1.1 MachineUbuntu … # Alias DNS 10.10.10.5 courriel 10.10.10.10 serveur 10.10.10.20 documentation
Vérifier la résolution DNS (relancer Dnsmasq si nécessaire)
$ dig courriel.domaine-perso.fr +noall +answer courriel.domaine-perso.fr. 0 IN A 10.10.10.5
$ dig courriel +noall +answer courriel. 0 IN A 10.10.10.5
$ dig serveur.domaine-perso.fr +noall +answer serveur.domaine-perso.fr. 0 IN A 10.10.10.10
$ dig serveur +noall +answer serveur. 0 IN A 10.10.10.10
$ dig documentation.domaine-perso.fr +noall +answer documentation.domaine-perso.fr. 0 IN A 10.10.10.20
$ dig documentation +noall +answer documentation. 0 IN A 10.10.10.20
$ dig bidon.domaine-perso.fr +noall +answer
$ dig bidon +noall +answer
Résolution DNS externe :
$ dig google.com +noall +answer google.com. 16 IN A 216.58.223.110