Ceci est une ancienne révision du document !


~~CLOSETOC~~

Bind - Installation d'un serveur DNS

Le service DNS (Domain Name System) correspond à l'annuaire de votre réseau. Il transforme les adresses telles que server.shyrka.sys en adresses IP permettant la communication entre les machines via leur FQDN (Fully-Qualified Domain Name) ou leur nom d'hôte (pour linux) et NetBIOS (pour Windows). Sous debian, le service DNS est fourni par BIND (Berkeley Internet Name Daemon).

<note>Cette procédure a été réalisée et testée sur une VM Debian 10.</note>

<note warning>Cette procédure nécessite des droits root. Faîtes donc attention à ce que vous faîtes.</note>

  • On commence par mettre à jour les dépôts APT :

apt-get update

  • On installe le paquet nécessaire :

apt-get install -y bind9

Pour une bonne configuration du serveur BIND, il faut configurer plusieurs fichiers, correspondant à des propriétés bien précises :

  • le fichier correspondant à la fôret. Ce fichier contient les définitions de chaque zone (domaine) gérée.
  • un fichier correspondant à chaque domaine de la forêt. Ce fichier contient les entrées DNS pour le domaine en question.

Ce fichier de configuration est /etc/bind/named.conf. On le configure en y ajoutant les informations suivantes :

  • le nom de la zone ou du domaine (shyrkasys.local dans cet exemple)
  • le type de serveur :
    • master quand le serveur fait autorité pour la zone (serveur primaire ou maître).
    • slave quand le serveur est une copie du serveur principal.
    • hint pour les serveurs racines DNS.
  • le chemin vers le fichier contenant les entrées DNS (/etc/bind/zones/shyrkasys.local dans cet exemple)
  • les éventuelles options de zone (se référer à la documentation de bind et de named.conf). Pour l'exemple, on ajoutera forwarders{}. Cette option permet en temps normal de renvoyer les requêtes vers les serveurs secondaires pour la zone (serveurs définis par leurs adresses IP). Cependant en n'indiquant aucune adresse, on empêche tout simplement les requêtes d'aller interroger les serveurs DNS d'internet quand le serveur BIND n'arrive pas à les résoudre.

La section à ajouter ressemble donc à cela :

zone "shyrkasys.local" { 
    type master; 
    file "/etc/bind/zones/shyrkasys.local"; 
    forwarders{}; 
}; 

Ce fichier doit être celui que vous avez indiqué dans le fichier /etc/bind/named.conf. L'entête de ce fichier contient différentes informations concernant la zone :

  • l'enregistrement TTL (Time To Live). Elle indique à tout système effectuant une requête auprès de ce serveur, combien de temps cette information est valide et donc quand est ce qu'il doit réinterroger le serveur. Dans cet exemple j'ai choisi 1h soit 3600s.
  • l'enregistrement SOA (Start Of Authority). Entrée indispensable qui indique notamment :
    • le nom du serveur primaire pour la zone (dns.shyrkasys.local dans cet exemple).
    • le numéro de série du fichier. Utilisé lors de la réplication de zone. La convention veut que son format soit l'année sur 4 chiffres, le mois sur 2 chiffres, le jour sur 2 chiffres et le nombre de modification du jour sur 2 chiffres, soit un numéro de série de ce style 2020022004 pour la quatrième modification du 20 février 2020.
    • le taux de rafraichissement des serveurs secondaires (durée maximale entre deux mise à jour, 7200 dans cet exemple).
    • le temps avant un nouvel essaie (durée minimal à attendre attendre avant requête si la mise à jour n'a pas fonctionné).
    • le temps d'expiration (durée maximal après laquelle les serveurs secondaires ne font plus de requête auprès d'un serveur principal qui ne répond plus).
    • le TTL pour le cache négatif (correspond à la durée de vie des réponses négatives comme les échecs).
  • le ou les enregistrements NS (Name Server) correspondants aux noms des serveurs DNS pour cette zone.
  • le ou les enregistrements A (Address) correspondants aux adresses IPv4 des serveurs enregistrés dans les entrées NS.
  • (si l'IPv6 est activée) le ou les enregistrement AAAA correspondants aux adresses IPv6 des serveurs enregistrés dans les entrées NS.

L'entête ressemble donc à cela :

$TTL 3600
@    IN     SOA     dns.shyrkasys.local. root.shyrkasys.local. (
          2020022004 ; serial
          7200       ; refresh
          900        ; retry
          604800     ; expire
          600 )      ; ttl

@    IN     NS     dns
@    IN     A      192.168.0.250

Une fois l'entête créée, on peut ajouter à la suite les différentes entrées telles que :

  • A et AAAA
  • CNAME (Canonical NAME)
  • SRV (SeRVice)
  • MX (Mail eXchanger)
  • TXT (TeXT)
  • SPF (Sender Policy Framework)

Exemple :

# Adresses
router          IN     A          192.168.0.1
printer         IN     A          192.168.0.2

share           IN     A          192.168.0.10

# DHCP --> 192.168.0.50 à 192.168.0.199

dns             IN     A          192.168.0.250
mail            IN     A          192.168.0.251
ldap            IN     A          192.168.0.252

# Alias
webmail         IN     CNAME      mail

<note important>Lorsque l'on change le fichier de zone, il ne faut pas oublier de mettre à jour le numéro de série afin que les serveurs secondaires puissent se mettre à jour.</note> <note tip>Il est intéressant que les adresses se suivent et qu'une ligne vide soit laissée entre 2 adresses qui ne se suivent pas. Cela aide à voir rapidement qu'elles sont les adresses disponibles.</note>

Pour que le système fonctionne correctement, il est impératif de créer une zone de recherche inversée pour chaque zone créée. Pour cela, le principe est le même que pour la création d'une zone à quelques détails près.

Dans le fichier /etc/bind/named.conf, on va créer une nouvelle zone. Sa particularité fera que son nom sera l'adresse du réseau de la zone écrite à l'envers suivie de in-addr.arpa correspondant au domaine des recherches inversées. Du coup, pour un réseau de classe C comme 192.168.0.X, le nom de la zone inversée sera 0.168.192.in-addr.arpa.

Exemple :

zone "0.168.192.in-addr.arpa" { 
    type master; 
    file "/etc/bind/zones/shyrkasys.local.inv"; 
    forwarders{}; 
}; 

Le fichiers de configuration est, là aussi, celui indiqué dans le fichier named.conf pour la zone de recherche inversée (/etc/bind/zones/shyrkasys.local.inv dans notre exemple). Il reprend la même entête que le fichier de configuration de la zone à l’exception de :

  • L'entrée NS, qui voit le nom des hôtes suivie du nom de domaine terminé par un ..
  • l'entrée A, qui est supprimée.

Le reste du fichier est constitué des entrées PTR (PoinTeR) correspondantes à chaque entrée A du fichier de zone.

Exemple :

$TTL 3600
@    IN     SOA     dns.shyrkasys.local. root.shyrkasys.local. (
          2020022004 ; serial
          7200       ; refresh
          900        ; retry
          604800     ; expire
          600 )      ; ttl

@    IN     NS     dns.shyrkasys.local.

# Pointeurs
1    IN     PTR     router.shyrkasys.local.
2    IN     PTR     printer.shyrkasys.local.

10   IN     PTR     share.shyrkasys.local.

250  IN     PTR     dns.shyrkasys.local.
251  IN     PTR     mail.shyrkasys.local.
252  IN     PTR     ldap.shyrkasys.local.

<note warning>Il est important de modifier le fichier de zone inversée en même temps que le fichier de zone (même numéro de série, informations concordantes).</note> <note important>N'oubliez pas de redémarrer le service bind après chaque modifications des fichiers de configuration.</note>

  • Démarrage :

systemctl start bind9.service

  • Redémarrage :

systemctl restart bind9.service

  • Arrêt :

systemctl stop bind9.service

  • Status :

systemctl status bind9.service

  • Activé au démarrage :

systemctl enable bind9.service

Bien que ce ne soit pas obligatoire pour faire fonctionner le serveur BIND, on peut rajouter en redirecteurs principaux, les adresses des serveurs DNS de notre fournisseurs d'accès à internet ou autres. Pour cela :

  • On édite le fichier /etc/bind/named.conf.options.
  • On décommente les lignes correspondantes à forwarders
  • On remplace 0.0.0.0 par les adresses des serveurs DNS, chaque adresse sur une ligne différente et terminée par un ;.

On peut aussi ajouter dans le même fichier les options de log, exemple :

logging {
        channel "requetes" {
                file "/var/log/bind/queries.log";
                print-time yes;
                print-category yes;
        };
        category queries { "requetes"; };
        channel "securite" {
                file "/var/log/bind/securite.log";
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        category security { "securite"; };
        channel "global" {
                file "/var/log/bind/global.log";
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        category general { "global"; };
        channel "configuration" {
                file "/var/log/bind/config.log";
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        category config { "configuration"; };
};

Nicolas THOREZ 2020/02/20 12:04

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • linux_bind.1582215097.txt.gz
  • Dernière modification : 2020/02/20 15:11
  • (modification externe)