| Prochaine révision | Révision précédente |
| linux_bind [2020/02/20 12:29] – créée nekan | linux_bind [2021/03/05 15:02] (Version actuelle) – [Zone inversée] nekan |
|---|
| ~~CLOSETOC~~ | |
| ====== Bind - Installation d'un serveur DNS ====== | ====== Bind - Installation d'un serveur DNS ====== |
| | <label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/02/20 12:04// |
| |
| Le service ''DNS'' (//**D**omain **N**ame **S**ystem//) 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'' (//**F**ully-**Q**ualified **D**omain **N**ame//) ou leur nom d'hôte (pour linux) et NetBIOS (pour Windows). Sous debian, le service DNS est fourni par ''BIND'' (//**B**erkeley **I**nternet **N**ame **D**aemon//). | Le service ''DNS'' (//**D**omain **N**ame **S**ystem//) 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'' (//**F**ully-**Q**ualified **D**omain **N**ame//) ou leur nom d'hôte (pour linux) et NetBIOS (pour Windows). Sous debian, le service DNS est fourni par ''BIND'' (//**B**erkeley **I**nternet **N**ame **D**aemon//). |
| |
| <note>Cette procédure a été réalisée et testée sur une VM Debian 10.</note> | <callout type="primary" icon="true" title="Environnement">Cette procédure a été réalisée et testée sur une VM Debian 10.</callout> |
| |
| <note warning>Cette procédure nécessite des droits ''root''. Faîtes donc attention à ce que vous faîtes.</note> | <callout type="danger" icon="true" title="Droits">Cette procédure nécessite des droits ''root''. Faîtes donc attention à ce que vous faîtes.</callout> |
| |
| ===== Installation ===== | ===== Installation ===== |
| ===== Configuration ===== | ===== 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 ==== |
| |
| {{ :underconstruction-copy-300x150.jpg |}} | 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 : |
| | <file>zone "shyrkasys.local" { |
| | type master; |
| | file "/etc/bind/zones/shyrkasys.local"; |
| | forwarders{}; |
| | }; </file> |
| | |
| | ==== 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'' (//**T**ime **T**o **L**ive//). 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'' (//**S**tart **O**f **A**uthority//). 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'' (//**N**ame **S**erver//) correspondants aux noms des serveurs DNS pour cette zone. |
| | * le ou les enregistrements ''A'' (//**A**ddress//) 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 : |
| | <file>$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 |
| | </file> |
| | |
| | Une fois l'entête créée, on peut ajouter à la suite les différentes entrées telles que : |
| | * ''A'' et ''AAAA'' |
| | * ''CNAME'' (//**C**anonical **NAME**//) |
| | * ''SRV'' (//**S**e**RV**ice//) |
| | * ''MX'' (//**M**ail e**X**changer//) |
| | * ''TXT'' (//**T**e**XT**//) |
| | * ''SPF'' (//**S**ender **P**olicy **F**ramework//) |
| | |
| | Exemple : |
| | <file>router IN A 192.168.0.1 |
| | printer IN A 192.168.0.2 |
| | |
| | share IN A 192.168.0.10 |
| | |
| | dns IN A 192.168.0.250 |
| | mail IN A 192.168.0.251 |
| | ldap IN A 192.168.0.252 |
| | |
| | webmail IN CNAME mail |
| | </file> |
| | |
| | <callout type="danger" icon="true" title="Numéro de série">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.</callout> |
| | <callout type="tip" icon="true" title="Astuce">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.</callout> |
| | |
| | ===== 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 : |
| | <file>zone "0.168.192.in-addr.arpa" { |
| | type master; |
| | file "/etc/bind/zones/shyrkasys.local.inv"; |
| | forwarders{}; |
| | }; </file> |
| | |
| | ==== 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'' (//**P**oin**T**e**R**//) correspondantes à chaque entrée ''A'' du fichier de zone. |
| | |
| | Exemple : |
| | <file>$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. |
| | |
| | 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. |
| | </file> |
| | |
| | <callout type="warning" icon="true" title="Zone inversée">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).</callout> |
| | <callout type="primary" icon="true" title="Redémarrage">N'oubliez pas de redémarrer le service ''bind'' après chaque modifications des fichiers de configuration.</callout> |
| | |
| | ===== Gestion du service ===== |
| | |
| | * Démarrage : |
| | <sxh bash>systemctl start bind9.service</sxh> |
| | |
| | * Redémarrage : |
| | <sxh bash>systemctl restart bind9.service</sxh> |
| | |
| | * Arrêt : |
| | <sxh bash>systemctl stop bind9.service</sxh> |
| | |
| | * Status : |
| | <sxh bash>systemctl status bind9.service</sxh> |
| | |
| | * Activé au démarrage : |
| | <sxh bash>systemctl enable bind9.service</sxh> |
| | |
| | ===== 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.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 : |
| | <file>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"; }; |
| | }; |
| | </file> |
| | <callout type="danger" icon="true" title="Logs">Il faudra penser à créer les différents fichiers de log et changer leur propriétaire et leur groupe par ''bind''. Pour debian 10 où ''apparmor'' est installé par défaut, il faudra aussi modifier les autorisations d'écriture.</callout> |
| |
| --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/02/20 12:04// | |
| ~~DISCUSSION~~ | ~~DISCUSSION~~ |