On pourrait avoir un serveur de domaine dédié. Mais en général quand on met en place un serveur de domaine on gère aussi un serveur DHCP car un nom de machine est associé à une adresse IP. Donc pour la simplicié on peut envisager d'installer le DNS sur le meme serveur que le DHCP. Mais cela n'a aucune incidence direct sur la procédure pour installer notre serveur DNS.
avoir une Debian 10 minimal. Si vous avez autre chose d'installé adaptez ce qui suit. Mais partez sur le principe que moins vous avez de chose sur un serveur moins vous aurez de risque de sécurité ou dysfonctionnement. Pour être sure de partir sur de bonne base on va d'abord vérifier les paramètres réseau du futur serveur.
Configurez d'abord les interfaces réseaux. S'il y a plusieurs interfaces, il faut au moins une interface en IP fixe.
Pour connaitre le nom des interfaces:
ls /sys/class/net
la configuration des interfaces se fait dans /etc/network/interfaces
On déclare la méthode de configuration des interfaces en mode manuel (statique) et pas en DHCP afin que les clients puissent toujours joindre le serveur avec la même adresse IP.
iface eth0 inet static
On paramètre la configuration réseau
address 192.168.1.3/24 gateway 192.168.1.1
Vérifier le fichier /etc/hostname pour le nom du serveur, le modifier et rebooter si besoin. Maintenant que la configuration du réseau du futur serveur DNS est opérationnel, passons à l'installation de la fonctionnalité serveur DNS.
Tout d'abord faire une mise à jour de votre système (sous root ou sudo):
apt update apt upgrade
Ensuite installez les paquets nécessaires:
apt install bind9
complément: https://wiki.debian.org/fr/Bind9, ou https://doc.ubuntu-fr.org/bind9
Une fois que bind est installé, nous allons gérer 5 fichiers. Sur Debian le fichier named.conf est découpé en 3 fichiers:
BIND9 possède un utilitaire, nommé RNDC (plus de détails), qui permet de gérer le demon named en ligne de commande. RNDC peut gérer un démon named distant. Il faut donc SECURISER le démon named et n'autoriser que des machines connues grâce à l'utilisation d'une clé avec l'authentification TSIG (Transaction SIGnature). Elle permet des échanges/controle de données entre BIND et par exemple un DHCP avec une clé RNDC (Remote Name Daemon Control). C'est une clé générée pendant l'installation de BIND et stockée dans /etc/bind/rndc.key
(remarque: on peut regénérer une nouvelle clé si besoin: https://wiki.debian.org/Bind9#TSIG_Signature)
Pour permettre ces échanges, ajoutez à la fin du fichier /etc/bind/named.conf et spécifier les hotes autorisées.
// Création d'un groupe nommé internals (nom arbitraire) qui inclut les machines du reseau local et le localhost // On pourra utiliser ce groupe pour lui affecter des droits dans la configuration du serveur DNS. acl internals { 127.0.0.0/8; 192.168.0.0/24; }; // Load options include "/etc/bind/named.conf.options"; // La clé TSIG pour les échanges //include "/etc/bind/rndc.key"; // Hotes autorises à gérer BIND avec RNDC // plus de détails: http://www.linux-france.org/prj/edu/archinet/systeme/ch30s04.html controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; }; // rndc-key est contenu dans rndc.key // inet * port 953 allow {internals;} keys {rndc-key;} ; }; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.local";
Le fichier de configuration globale: /etc/bind/named.conf.options“
options { directory "/var/cache/bind"; // securise la validite des informations du DNS, protection contre le DNS cache poisoning //https://www.ovh.com/blog/an-introduction-to-dnssec/ dnssec-validation auto; // Port d'échange entre les serveurs DNS externes, NE PAS mettre de port fixe pour eviter le cache poisoning //https://bind9.readthedocs.io/en/v9_16_6/reference.html?highlight=query-source#query-address query-source address * port *; // Si notre DNS ne sait pas réppondre aux requêtes il transmet la demande aux serveurs extenes indiqués ici. // Avant de répondre "pas de réponse" il teste les serveurs externes. (valeur only) forward only; forwarders {8.8.8.8; }; // Laisser a no pour compatibilté avec v8 auth-nxdomain no; # conform to RFC1035 // À partir de 9.9.5 ARM, désactiver le scan des interfaces pour éviter l'arrêt inopiné de l'écoute interface-interval 0; // Ecouter sur les interfaces locales uniquement (IPV4) listen-on-v6 { none; }; listen-on { 127.0.0.1; 192.168.1.1; }; // Ne pas transférer les informations de zones aux DNS secondaires allow-transfer { none; }; // Accepter les requêtes pour le réseau interne uniquement allow-query { internals; }; // Autoriser les requêtes récursives pour les hôtes locaux allow-recursion { internals; }; // Ne pas rendre publique la version de BIND version none; };
/etc/bind/named.conf.default-zones: laisser le contenu par défaut
/etc/bind/named.conf.local: c'est lui qui va definir notre domaine. Il configure la zone direct et inverse (nom machine <—> @IP). Dans ce fichier on fera référence vers 2 autres fichiers (direct et reverse) qui contiennent les enregistrements des machines de notre domaine.
// Gérer les fichiers de logs //include "/etc/bind/named.conf.log"; // Gestion du domaine example.com // ------------------------------ // On déclare notre domaine. // Déclaration du fichier de zone direct zone "beemoonandco.com" { type master; file "/etc/bind/direct.conf"; forwarders {}; //allow-update { key rndc-key; }; }; // Déclaration du fichier de zone reverse zone "1.168.192.in-addr.arpa" { type master; file "/etc/bind/reverse.conf"; forwarders {}; //allow-update { key rndc-key; }; }; // Obligatoire pour annoncer qu'on gère des IP privées include "/etc/bind/zones.rfc1918";
Remarque: la RFC1918 fixe les plages d'IP privée, dans la conf de BIND on l'inclut pour spécfier qu'on gère des IP privées et qu'il est inutile de faire des interrogations extérieures vers des 192.168.1 des DNS secondaires ou forward, ou du récursif.
(détails: https://kb.isc.org/docs/aa-00800)
Le fichier de nom direct: /etc/bind/direct.conf
$TTL 3600 @ IN SOA beemoonandco.com. root.beemoonandco.com. ( 2007010401 ; Serial 3600 ; Refresh [1h] 600 ; Retry [10m] 86400 ; Expire [1d] 600 ) ; Negative Cache TTL [1h] ; @ IN NS dns.beemoonandco.com. dns IN A 192.168.1.1 pc1 IN A 192.168.1.2
Le fichier de nom reverse: /var/cache/bind/reverse.conf
$TTL 3600 @ IN SOA beemoonandco.com. root.beemoonandco.com. ( 2007010401 ; Serial 3600 ; Refresh [1h] 600 ; Retry [10m] 86400 ; Expire [1d] 600 ) ; Negative Cache TTL [1h] ; @ IN NS dns.beemoonandco.com. 1 IN PTR dns.beemoonandco.com. 2 IN PTR pc1.beemoonandco.com.