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>
Installation
- On commence par mettre à jour les dépôts
APT:
apt-get update
- On installe le paquet nécessaire :
apt-get install -y bind9
Configuration
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.
Forêt
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.localdans cet exemple) - le type de serveur :
masterquand le serveur fait autorité pour la zone (serveur primaire ou maître).slavequand le serveur est une copie du serveur principal.hintpour les serveurs racines DNS.
- le chemin vers le fichier contenant les entrées DNS (
/etc/bind/zones/shyrkasys.localdans 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{};
};
Zone ou Domaine
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éesNS. - (si l'IPv6 est activée) le ou les enregistrement
AAAAcorrespondants aux adresses IPv6 des serveurs enregistrés dans les entréesNS.
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 :
AetAAAACNAME(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>
Zone de recherche inversée
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.
Forêt
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{};
};
Zone inversée
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>
Gestion du service
- 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
Autres configurations intéressantes
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.0par 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"; };
};
<note important>Il faudra penser à créer les différents fichiers de log et changer leur propriétaire et leur groupe par bind.</note>
— Nicolas THOREZ 2020/02/20 12:04
Discussion