how-to-install-and-manage Help

DNS

Notions fondamentales sur le DNS

Définition

Le DNS (Domain Name System) est un service permettant de faire correspondre des noms de domaines à des adresses IP (et inversement). Il fonctionne de manière hiérarchique et distribuée:

  • La racine (root) est au sommet.

  • Ensuite viennent les TLD (ex : .com, .org, .cc).

  • Puis les domaines secondaires et leurs sous-domaines.

Chaque domaine peut déléguer la gestion de ses sous-domaines à d'autres serveurs DNS. Lorsqu’un serveur gère entièrement une zone (ensemble de sous-domaines non délégués), on dit qu’il a autorité sur celle-ci (serveur authoritative).

Les requêtes DNS sont récursives: elles progressent de la racine vers le domaine final en suivant les délégations.

Bind9

Choix de Bind9

Bind9 (Berkeley Internet Name Daemon) version 9 est un serveur DNS très utilisé sur Linux. Il permet :

  • De gérer des zones DNS en tant que maître ou esclave

  • De servir de cache DNS

  • De stocker des entrées DNS pour l'infrastructure

Dans notre cas, il est configuré comme serveur primaire sur plusieurs zones internes, incluant des zones directes (nom → IP) et inversées (IP → nom).

Configuration dans NixOS

Voici un extrait de notre configuration :

{ pkgs, ... }: { services.bind = { enable = false; forwarders = ["1.1.1.1" "8.8.8.8"]; zones = { ... }; }; }

Explications :

  • enable = true: le service est activé.

  • forwarders: les requêtes non résolues localement sont transmises à Cloudflare et Google DNS.

Déclaration des zones DNS

Zone directe : innovalia.cc

Le fichier de zone est défini avec pkgs.writeText pour rester dans l’approche déclarative.

"innovalia.cc" = { master = true; file = pkgs.writeText "zone-innovalia.cc" '' $TTL 86400 @ IN SOA ns1.innovalia.cc. admin.innovalia.cc. ( 2023010101 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) ; Minimum TTL IN NS ns1.innovalia.cc. ns1 IN A 192.0.2.1 grafana IN A 192.0.2.3 ntp-uranium-01 IN A 10.50.75.1 k3s-plutonium-02 IN A 10.1.1.5 ... ''; };

Ce fichier de zone contient :

  • Un en-tête SOA (définit les règles de synchronisation et de validité)

  • Un NS pour désigner le serveur de noms de la zone

  • Plusieurs entrées A pour les machines du réseau (par exemple les serveurs grafana, ntp, k3s, etc.)

Chaque machine est nommée de manière à refléter sa localisation (Uranium, Plutonium, Titanium) et son rôle.

Zones inversées :

Trois zones inversées sont définies, pour les sous-réseaux :

  • 10.50.75.0/24

  • 10.1.1.0/24

  • 10.125.0.0/24

Elles permettent d’effectuer la résolution inverse (IP → nom), utile pour :

  • Les journaux système

  • Le fonctionnement d'applications spécifiques.

Exemple pour le sous-réseau Uranium :

"75.50.10.in-addr.arpa" = { master = true; file = pkgs.writeText "rev-10.50.75" '' $TTL 86400 @ IN SOA ns1.innovalia.cc. admin.innovalia.cc. ( 2023010101 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) IN NS ns1.innovalia.cc. 1 IN PTR ntp-uranium-01.innovalia.cc. 2 IN PTR garage-uranium-01.innovalia.cc. 3 IN PTR dns-uranium-01.innovalia.cc. ''; };

Même principe appliqué aux sous-réseaux Plutonium et Titanium.

Tests de bon fonctionnement

Après avoir mis en place et activé Bind9, des tests fonctionnels ont été réalisés avec :

dig <nom> @<ip-du-serveur> dig -x <ip> @<ip-du-serveur>

Ces commandes ont permis de valider la résolution directe et inverse des machines définies dans la configuration. Le serveur répond correctement, les zones sont bien reconnues, et les enregistrements retournés sont cohérents.

instance-writerside
instance-writerside

Last modified: 29 April 2025