Libre à vous de partager

Aujourd’hui nous aborderons la théorie des serveurs DNS ainsi que sa mise en pratique avec la configuration du DNS du défi. À l’origine, il devait y avoir deux articles. Finalement ils ont été regroupés.

Généralités sur les DNS

Qu’est-ce qu’un DNS ?

Le Domaine Name System (système de nom de domaine) et un service qui associe un nom de serveur, plus compréhensible et facile à retenir, à l’adresse IP de serveur. S’il est configuré correctement, le service est en mesure de fournir le nom de domaine à partir de l’adresse IP. Cette partie est appelée le Reverse DNS.

Ce système est un système hiérarchique. Il part d’une racine, notée «. », suivi de sous domaines séparés par des points. La racine est généralement omise par les utilisateurs et elle est ajoutée automatiquement par les logiciels.

Le premier sous domaine est appelé domaine de premier niveau (TLD, Top Level Domain). Ils peuvent être soit des domaines nationaux, soit des domaines généraux. Ces domaines sont gérés par l’ICANN. Cependant, l’association délègue de nombreuses sociétés ou autres associations la réelle gestion de ses domaines.

À partir de ses domaines de premier niveau, sont mis en place les sous domaines. Il est nécessaire d’être enregistré sur ses serveurs pour avoir un nom de domaine valide. Ces noms de domaine sont donc loués par les associations pour une durée d’un an ou plus aux propriétaires des sites.

Pour dépendre de certains domaines de premier niveau, il est parfois nécessaire de répondre à des exigences précises. Par exemple, en France, seules des administrations peuvent utiliser le sous-domaine gouv.fr. Ou bien, le sous-domaine.org n’est ouvert qu’à des associations enregistrées auprès des états.

dns du défi

La liste de toutes les TLD disponibles se trouve à cette adresse https://www.iana.org/domains/root/db

Fonctionnement du DNS

Chaque sous domaine est géré par un ou plusieurs serveurs faisant autorité. Pour éviter la surcharge de ses serveurs, il existe de nombreux serveurs cache. Ces serveurs cache sont généralement gérés par des opérateurs ou des entreprises d’envergure Internationale.

Quand vous demandez la résolution d’un nom de domaine, le serveur cache DNS le plus proche répondra. S’il n’a pas la réponse, il la demandera à un serveur hiérarchique. La procédure est complètement transparente pour l’utilisateur.

Les caches ont généralement une durée de vie. Ils sont donc régénérés à intervalles réguliers. De même, l’ordinateur client garde en cache ces informations. C’est la raison pour laquelle les sites où vous allez régulièrement s’affichent plus rapidement.

Il est possible d’avoir un serveur DNS qui n’est pas routé sur Internet. Dans ce cas, il est possible de s’affranchir des procédures légales. Toutefois, il faut s’assurer que cela n’interfère pas avec Internet.

Vous pouvez trouver dans des tutoriels ou des articles sur Internet, des auteurs qui utilisent des domaines se terminant en.loc ou.local. Ces domaines n’existant pas en TLD, vous n’aurez aucun problème. C’est l’approche que nous utiliserons pour la suite de cet article.

Le DNS du défi

Le DNS du défi sera un DNS privé sur notre réseau résolvant des adresses en.local. Le but ici est d’obtenir des noms de serveur ou de service indépendant de l’adressage IP.

Nous utilisons le logiciel bind9 pour fournir le DNS du défi.

Installation du DNS du défi

L’installation du DNS du défi se fait de manière très simple avec la commande apt.

gabriel@raspberrypi:~ $ sudo apt install bind9
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  bind9-utils python3-ply
Paquets suggérés :
  bind-doc dnsutils ufw python-ply-doc
Les NOUVEAUX paquets suivants seront installés :
  bind9 bind9-utils python3-ply
0 mis à jour, 3 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 991 ko dans les archives.
Après cette opération, 2 149 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] o
Réception de :1 http://mirrors.ircam.fr/pub/raspbian/raspbian bullseye/main armhf python3-ply all 3.11-4 [65,5 kB]
Réception de :2 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf bind9-utils armhf 1:9.16.44-1~deb11u1 [434 kB]
Réception de :3 http://raspbian.raspberrypi.org/raspbian bullseye/main armhf bind9 armhf 1:9.16.44-1~deb11u1 [491 kB]
991 ko réceptionnés en 2s (612 ko/s)
Sélection du paquet python3-ply précédemment désélectionné.
(Lecture de la base de données... 108834 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../python3-ply_3.11-4_all.deb ...
Dépaquetage de python3-ply (3.11-4) ...
Sélection du paquet bind9-utils précédemment désélectionné.
Préparation du dépaquetage de .../bind9-utils_1%3a9.16.44-1~deb11u1_armhf.deb ...
Dépaquetage de bind9-utils (1:9.16.44-1~deb11u1) ...
Sélection du paquet bind9 précédemment désélectionné.
Préparation du dépaquetage de .../bind9_1%3a9.16.44-1~deb11u1_armhf.deb ...
Dépaquetage de bind9 (1:9.16.44-1~deb11u1) ...
Paramétrage de python3-ply (3.11-4) ...
Paramétrage de bind9-utils (1:9.16.44-1~deb11u1) ...
Paramétrage de bind9 (1:9.16.44-1~deb11u1) ...
Ajout du groupe « bind » (GID 124)...
Fait.
Ajout de l'utilisateur système « bind » (UID 116) ...
Ajout du nouvel utilisateur « bind » (UID 116) avec pour groupe d'appartenance « bind » ...
Le répertoire personnel « /var/cache/bind » a été créé.
wrote key file "/etc/bind/rndc.key"
named-resolvconf.service is a disabled or a static unit, not starting it.
Created symlink /etc/systemd/system/bind9.service → /lib/systemd/system/named.service.
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /lib/systemd/system/named.service.
Traitement des actions différées (« triggers ») pour man-db (2.9.4-2) ...

Configuration de la zone DNS du défi

Par défaut, le paquet fournit un fichier de zone minimale. Nous allons d’abord le copier en le renommant du nom de notre domaine. J’ai choisi admin-libre.local. Bien entendu, à vous de l’adapter en fonction de vos besoins.

gabriel@raspberrypi:~ $ sudo cp /etc/bind/db.local /etc/bind/db.admin-libre.local
gabriel@raspberrypi:/etc/bind $ cat /etc/bind/db.admin-libre.local
;
; BIND data file for admin-libre.local
;
$ORIGIN admin-libre.local.
$TTL    604800
@       IN      SOA     raspberrypi. root.rapsberrypi. (
                         20231102       ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      raspberrypi.
@       IN      A       192.168.1.1

Nous allons devoir modifier ce fichier en :

  • Remplaçant localhost par le nom de l’hôte du serveur hébergeant le service. Ici raspberrypi
  • Remplaçant l’adresse locale 127.0.0.1 par l’adresse IP du Raspberry pi 192. 168.1.1.
  • Créant l’entrée $ORIGIN pour ne pas répéter le nom de domaine à travers le fichier.
  • Modifiant le numéro de série du fichier (la ligne terminant par serial).

Note : le numéro de série du fichier est indispensable. À chaque modification du fichier, il faut le modifier. Ainsi le service saura que la configuration a été modifiée. Il y a plusieurs écoles concernant la numérotation du fichier. Celle que j’utilise est de mettre l’année, suivi du mois, suivi du jour de la modification. Cette façon de faire est la plus simple et vous certifie que, à moins que vous ne fassiez plusieurs modifications par jour du fichier, votre numéro de série sera toujours unique. Si vous faites plusieurs modifications par jour, il vous suffit de rajouter l’heure et les minutes.

La configuration que nous venons de faire, et la configuration la plus simple du DNS du défi. Nous modifions à plusieurs reprises ce fichier au cours de l’installation des nouveaux services.

Il existe aussi plusieurs types d’enregistrement que nous n’aborderons pas dans la configuration DNS du défi.

Garder en tête, que chaque modification du fichier nécessite la relance du service pour sa prise en compte. Ce qui veut dire que pendant quelques secondes, les clients du réseau ne pourront plus résoudre les noms de domaine.

Configuration de la zone inverse DNS du défi

Ce fichier permet de configurer la résolution inverse, c’est-à-dire la transformation en adresse Internet une adresse IP.

Tout comme pour le fichier de configuration de la zone, nous allons nous appuyer sur la configuration du localhost.

gabriel@raspberrypi:/etc/bind $ cat /etc/bind/db.192.168.1
;
; BIND reverse data file for admin-libre.local interface
;
$ORIGIN 1.168.192.in-addr.arpa.
$TTL    604800
@       IN      SOA     raspberrypi.admin-libre.local. root.rapsberrypi.admin-libre.local. (
                        20231102        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      raspberrypi.admin-libre.local.
1       IN      PTR     raspberrypi.admin-libre.local.

Nous allons devoir modifier ce fichier en :

  • Remplaçant localhost par le nom de l’hôte du serveur hébergeant le service. Ici raspberrypi
  • Remplaçant l’adresse locale 127.0.0.1 par l’adresse IP du Raspberry pi 192. 168.1.1.
  • Créant l’entrée $ORIGIN pour ne pas répéter le nom de domaine à travers le fichier.
  • Modifiant le numéro de série du fichier (la ligne terminant par serial).

Les mêmes remarques que pour le fichier précédent, s’appliquent notamment concernant les numéros de série.

Configuration du service DNS du défi

Cette étape n’est à effectuer que lorsque l’on crée une nouvelle zone DNS. Il s’agit de fournir aux services les deux fichiers de configuration de la zone que nous venons de créer. Il n’est donc pas nécessaire de modifier ce fichier lorsque l’on fait une mise à jour de la zone DNS. Sauf bien entendu si vous changez le nom des fichiers.

Le fichier en question est le fichier /etc/bind/named.conf.local.

gabriel@raspberrypi:/etc/bind $ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
// Resolution de la zone admin-libre.local
zone "admin-libre.local" IN {
        type master;
        file "/etc/bind/db.admin-libre.local";
        };
// Resolution inverse de la zone admin-libre.local
zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168.1";
        };

Il y a une autre configuration à faire qui elle se trouve dans le /etc/bind/named.conf.options.

gabriel@raspberrypi:/etc/bind $ cat /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                192.168.1.254;
                8.8.8.8;
         };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6 { any; };

Nous allons modifier la directive forwarders qui est de base commentée par //. Il faut d’abord des commentées les lignes concernées. Nous allons ainsi dire à notre serveur DNS de renvoyer toutes les demandes de résolution de nom ne concernant pas la zone que nous venons de créer vers un autre serveur DNS.

J’y ai mis deux adresses. La première est celle de notre passerelle qui est aussi notre box opérateurs. Ainsi vous aurez la même résolution de nom que celle que vous aviez auparavant. La seconde est celle du DNS de Google que vous pouvez mettre en secours. Sachez que d’autres sociétés telles que Cloudfare proposent ce type de service.

Maintenant que le DNS du défi est configuré il faut redémarrer le service pour que les modifications soient prises en compte. Si aucun message d’erreur n’apparaît, il est probable que cela fonctionne correctement.

Il nous reste alors aller modifier le fichier de configuration du DHCP pour rajouter une instruction DNS et ainsi ajouter notre DNS du défi. Le DHCP pouvant fournir plusieurs serveurs DNS, je vous conseille de rajouter une instruction et non pas de remplacer l’instruction déjà existante. Il faut que vous mettiez la nouvelle adresse au-dessus de l’ancienne. Pensez à redémarrer le service isc-dhcp-server.service.

gabriel@raspberrypi:/etc/bind $ cat /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
option domain-name "admin-libre.loc";
#option domain-name-servers 192.168.1.254;

default-lease-time 600;
max-lease-time 7200;

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.199;
        option broadcast-address 192.168.1.255;
        option routers 192.168.1.254;
        option domain-name-servers 192.168.1.1;
        option domain-name-servers 192.168.1.254;
}
...
gabriel@raspberrypi:~ $ sudo systemctl restart isc-dhcp-server.service

En effet, si pour une raison X ou Y le service de DNS du défi du Raspberry pi venait à être indisponible, la totalité des clients se retrouverait alors dans l’incapacité de naviguer sur Internet. La présence d’un deuxième serveur DNS dans la configuration réseau, fera que le client contactera le second serveur DNS s’il n’obtient de réponse du premier.

Au renouvellement du bail DHCP, la configuration DNS du client sera modifiée. Si vous parvenez à naviguer sur Internet, c’est que tout fonctionne normalement.

Conclusion

Félicitations, vous venez de terminer la configuration de votre service DNS du défi. Comme vous avez pu le voir, la mise en place d’un nouveau service nécessite souvent la modification de services déjà existants.

Lors de la mise en place des services de serveur de fichiers, nous rajouterons des entrées dans le DNS du défi.

Comme pour les fois précédentes, si vous avez des commentaires ou des questions n’hésitaient pas à les mettre sur le site, LinkedIn ou Facebook.

Laisser un commentaire