Mise en place d'un serveur DNS primaire.

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.

Pré-requis

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.

Installation

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

Configuration

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:

  • named.conf: gère la découpe du contenu du fichier de configuration.
  • le fichier de configuartion globale: named.conf.options
  • named.conf.default-zones: on n'y touche pas car déclaration par défaut (localhost, 127.0.0.0, etc…)
  • named.conf.local
    • un fichier de nom direct associant un nom à une adresse IP
    • un fichier de reverse associant adresse IP à un nom

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.
Dernière modification: le 2020/12/30