Serveur DNS Bind9

Le système de noms de domaine, ou DNS, est l’un des éléments fondamentaux de l’Internet. C’est la base de données d’informations sur les hôtes globales, hiérarchiques et distribuées qui est chargée de la traduction des noms en adresses et inversement. BIND pour Berkeley Internet Name Domain est une implémentation des protocoles DNS et fournit une implémentation de référence ouvertement redistribuable des principaux composants du système de noms de domaine.

Installer Bind9

Directement sur votre machine :

# apt install bind9-doc

Fichiers de configuration

Le dossier /etc/bind contient :

# ls -l /etc/bind/
total 52
-rw-r--r-- 1 root root 2544 Mar 29 2011 bind.keys
-rw-r--r-- 1 root root 237 Dec 2 2010 db.0
-rw-r--r-- 1 root root 271 Dec 2 2010 db.127
-rw-r--r-- 1 root root 237 Dec 2 2010 db.255
-rw-r--r-- 1 root root 353 Dec 2 2010 db.empty
-rw-r--r-- 1 root root 270 Dec 2 2010 db.local
-rw-r--r-- 1 root root 3048 Mar 29 14:34 db.root
-rw-r--r-- 1 root bind 463 Jun 21 20:50 named.conf
-rw-r--r-- 1 root bind 490 Dec 2 2010 named.conf.default-zones
-rw-r--r-- 1 root bind 356 Sep 5 17:18 named.conf.local
-rw-r--r-- 1 root bind 719 Sep 25 11:49 named.conf.options
-rw-r----- 1 bind bind 77 Dec 30 2010 rndc.key
-rw-r--r-- 1 root root 1317 Dec 2 2010 zones.rfc1918

Fichiers concernant la sécurité :

  • bind.keys : utilisé pour DNSSEC
  • rndc.key : utilisé pour les clés RNDC permettant de commander le serveur à distance

Fichiers concernant la définitions des zones de bases :

  • db.0 : zone reverse locale de broadcast
  • db.127 : zone reverse locale
  • db.255 : zone reverse locale de broadcast
  • db.empty : zone “vide” utilisé pour ce qui n’existe pas (cas des réseaux locaux inexistant)
  • db.local : zone directe locale
  • db.root : références vers les serveurs DNS racine

Fichiers concernant le fonctionnement de Bind :

  • named.conf : configuration globale qui définit les fichiers à prendre en compte
  • named.conf.default-zones : configuration qui définit les fichiers de zones à prendre en compte par défaut
  • named.conf.local : configuration pour les zones de type réseau local
  • named.conf.options : les options de Bind
  • zones.rfc1918 : la liste des réseaux à considérer comme non existant (liste selon RFC1918)

Nous allons voir plus loin le détail de chaque fichier

Ressources Records

Bind contient les fichiers hosts de chaque site qu’il gère dans le dossier /var/lib/bind. Selon la configuration, Bind peut utiliser un autre dossier pour ces RRS (Ressources Records) :

# vi /var/lib/bind/
-rw-r--r-- 1 root root 285 12 janv.  2012 monsite1.com.hosts
-rw-r--r-- 1 root root 231 28 juil. 2012 monsite2.com.hosts
-rw-r--r-- 1 root root 246 29 juil. 2012 monsite3.org.hosts
-rw-r--r-- 1 root root 246 5 juin. 2013 monsite4.net.hosts
-rw-r--r-- 1 root root 246 6 juin. 2013 monsite5.fr.hosts

Le dossier cible est à définir dans le named.conf.options

Fichiers de configuration – Détails

Le fichier named.conf

Ce fichier contient la configuration générale de BIND, il en inclut 3 autres :

# vi /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the structure of BIND
// configuration files in Debian, *BEFORE* you customize this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

Les fichiers de configurations inclus dans named.conf sont :

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

Le fichier named.conf.options

Ce fichier contient les options de Bind :

# vi /etc/bind/named.conf.options
options {

directory "/var/lib/bind";

// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.

// forwarders {
// 0.0.0.0;
// };

auth-nxdomain no; # conform to RFC1035
listen-on-v6 { ::1; };
#listen-on { 127.0.0.1; };
listen-on { any; };
allow-recursion { 127.0.0.1; };
allow-recursion-on { 127.0.0.1; 168.84.42.21 };
};
  • options { Définie les options globales de Bind. Cette déclaration doit apparaître qu’une seule fois par fichier de configuration.

  • directory path_name; Indique à Bind où se situent les RRs (Ressources Records)

  • auth-nxdomain yes_or_no;

    • Si la valeur est à yes : Le bit AA sera toujours fixé à NXDOMAIN responses, même si le serveur ne fait pas autorité. A utiliser également dans le cas de l’utilisation d’un très vieux logiciel DNS
    • Si la valeur est à no : Modification depuis la version 8 de Bind.
  • listen-on [port ip_port] {address_match_list}; / listen-on-v6 [port ip_port] {address_match_list }; Interfaces et ports sur lesquels le serveur échanges les requêtes. Le port est optionnel, par défaut le serveur écoutera le port 53. Si aucune interface n’est spécifiée le serveur les écoutera toutes en utilisant le port 53.

  • allow-recursion { address_match_list }; Indique quels hôtes sont autorisés à envoyer des requêtes via le serveur. (Évitera au serveur de devenir un serveur DNS relais)

  • allow-recursion-on { address_match_list }; Détermine quelle adresse locale peut accepter les requêtes récursives. Si rien n’est spécifié BIND acceptera toutes les requêtes récursives.

Le fichier named.conf.default-zones

Ce fichier contient toutes les zones à prendre en compte par défaut.

# vi /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

Une zone peut-être de type master, slave, forward ou stub.

  • hint : Désigne un serveur racine
  • master : Bind fait autorité sur la zone
  • slave : Bind ne fait pas autorité sur la zone
  • forward : Bind redirige les requêtes de la zone vers un autre serveur DNS
  • stub : Bind ne fait pas autorité sur la zone et réplique uniquement les serveurs de noms
  • delegation-only : Zone de délégation

Ici nous avons 5 zones prédéfinies :

  • **zone “.“ ** qui appelle /etc/bind/db.root qui contient les RRs pour les serveurs racines

  • zone “localhost“ qui appelle /etc/bind/db.local qui contient l’enregistrement pour le loopback

  • zone “127.in-addr.arpa“ qui appelle /etc/bind/db.127 qui contient le pointer record

  • zone “0.in-addr.arpa“ qui appelle /etc/bind/db.0 et contient un RR pour le localhost

  • zone “255.in-addr.arpa“ qui appelle /etc/bind/db.255 qui contient et contient un RR pour le localhost

Le fichier /etc/bind/db.root

Le fichier /etc/bind/db.root est appelé par la zone “.” (zone racine) et contient les RRs pour les serveurs racines (de A à M) :

# vi /etc/bind/bd.root
[...]
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30
[...]
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
[...]
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
[...]
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
[...]
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
[...]
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2F::F
[...]
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
[...]
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803F:235
[...]
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
[...]
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30
[...]
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FD::1
[...]
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42
[...]
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:DC3::35

Soit 13 serveurs racines.

Le fichier /etc/bind/db.local

Le fichier /etc/bind/db.local est appelé par la zone localhost et contient l’enregistrement pour le loopback, pour que l’hôte puisse communiquer avec lui-même. L’adresse est toujours 127.0.0.1 avec pour nom localhost.

# vi /etc/bind/db.local
//
// BIND data file for local loopback interface
//
#TTL 604800
@ IN SOA localhost. root.localhost. (
1 // numéro de série
604800 // rafraîchissement après 7 jours
86400 // nouvel essai après 1 jour
2592000 // expiration après 1 mois
604800 ) // TTL réponse négative 7 jours

// Serveur DNS primaire
@ IN NS localhost.

// Déclaration de hôte local
@ IN A 127.0.0.1
@ IN AAAA ::1

Chaque serveur de noms est responsable de lui même. Si db.local et db.127.0.0 n’existent pas, une recherche vers localhost ou 127.0.0.1 échouera : le serveur de la racine contacté ne trouvera pas l’adresse de localhost ni faire correspondre 127.0.0.1.

Le fichier /etc/bind/db.127

Le fichier /etc/bind/db.127 est appelé par la zone 127.in-addr.arpa (désigne la zone locale reverse) et contient le pointer record :

# vi  /etc/bind/db.127/
//
// BIND reverse data file for local loopback interface
//
#TTL 604800
@ IN SOA localhost. root.localhost. (
1 // Serial
604800 // Refresh
86400 // Retry
2419200 // Expire
604800 ) // Negative Cache TTL

// Serveur DNS primaire
@ IN NS localhost.

// Declaration de hôte local
1.0.0 IN PTR localhost.

PTR record ou pointer record : associe une adresse IP à un enregistrement de nom de domaine, aussi dit « reverse » puisqu’il fait exactement le contraire du A record.

Chaque serveur de noms est responsable de lui même. Si db.local et db.127.0.0 n’existent pas, une recherche vers localhost ou 127.0.0.1 échouera : le serveur de la racine contacté ne trouvera pas l’adresse de localhost ni faire correspondre 127.0.0.1.

Le fichier /etc/bind/db.0

Le fichier /etc/bind/db.0 est appelé par la zone 0.in-addr.arpa (désigne la zone locale broadcast) et contient un RR :

# vi  /etc/bind/db.0
//
// BIND reverse data file for broadcast zone
//
#TTL 604800
@ IN SOA localhost. root.localhost. (
1 // Serial
604800 // Refresh
86400 // Retry
2419200 // Expire
604800 ) // Negative Cache TTL
//
@ IN NS localhost.
NS : Serveur de noms

Le fichier /etc/bind/db.255

Le fichier /etc/bind/db.255 est appelé par la zone 255.in-addr.arpa (désigne la zone locale broadcast) et contient un RR :

# vi  /etc/bind/db.255
//
// BIND reverse data file for broadcast zone
//
// #TTL 604800
@ IN SOA localhost. root.localhost. (
1 // Serial
604800 // Refresh
86400 // Retry
2419200 // Expire
604800 ) // Negative Cache TTL
//
@ IN NS localhost.
NS : Serveur de noms

Le fichier named.conf.local

Le fichier named.conf.local contient les détails de chaque zone.

# vi  /etc/bind/named.conf
// Do any local configuration here

// Consider adding the 1918 zones here, if they are not used in your organization
// include "/etc/bind/zones.rfc1918";

zone "monsite1.com" {
type master;
file "/var/lib/bind/monsite1.com.hosts";
};

zone "monsite2.com" {
type master;
file "/var/lib/bind/monsite2.com.hosts";
};

zone "monsite3.com" {
type master;
file "/var/lib/bind/monsite3.com.hosts";
};

C’est ici qu’on rajoute une zone.

Le fichier zones.rfc1918

Correspond aux définitions des réseaux privés de classes A, B et C et fait appel à /etc/bind/db.empty

# vi /etc/bind/zones.rfc1918
zone "10.in-addr.arpa"      { type master; file "/etc/bind/db.empty"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

(Obligatoire pour respecter une norme RFC1918)

Le fichier db.empty

Est appelé par zones.rfc1918

# vi /etc/bind/db.empty
// BIND reverse data file for empty rfc1918 zone
//
// DO NOT EDIT THIS FILE - it is used for multiple zones.
// Instead, copy it, edit named.conf, and use that copy.
//
#TTL 86400
@ IN SOA localhost. root.localhost. (
1 // Serial
604800 // Refresh
86400 // Retry
2419200 // Expire
86400 ) // Negative Cache TTL
//
@ IN NS localhost.

(Obligatoire pour respecter une norme RFC1918)

Le fichier rndc.key

Ce fichier défini la clé RNDC du serveur pour filtrer l’accès au serveur.

# vi /etc/bind/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "Xx42X42x42X42z42X42x42X";
};

BIND contient l’utilitaire rndc permettant d’administrer en ligne de commandes le démon named à partir de l’hôte local ou d’un hôte distant. BIND utilise une méthode d’authentification à clé secrète pour empêcher l’accès non-autorisé à named depuis un hôte.

Le fichier bind.keys

Ce fichier est utilisé dans le cadre des DNSSEC

# vi /etc/bind/bind.keys
/* #Id: bind.keys,v 1.5.42.2 2011-01-04 19:14:48 each Exp # */
# The bind.keys file is used to override built-in DNSSEC trust anchors
# which are included as part of BIND 9. As of the current release (BIND
# 9.7), the only trust anchor it sets is the one for the ISC DNSSEC
# Lookaside Validation zone ("dlv.isc.org"). Trust anchors for any other
# zones MUST be configured elsewhere; if they are configured here, they
# will not be recognized or used by named.
#
# This file also contains a copy of the trust anchor for the DNS root zone
# ("."). However, named does not use it; it is provided here for
# informational purposes only. To switch on DNSSEC validation at the
# root, the root key below can be copied into named.conf.
#
# The built-in DLV trust anchor in this file is used directly by named.
# However, it is not activated unless specifically switched on. To use
# the DLV key, set "dnssec-lookaside auto;" in the named.conf options.
# Without this option being set, the key in this file is ignored.
#
# This file is NOT expected to be user-configured.
#
# These keys are current as of January 2011. If any key fails to
# initialize correctly, it may have expired. In that event you should
# replace this file with a current version. The latest version of
# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys.

managed-keys {
# ISC DLV: See https://www.isc.org/solutions/dlv for details.
# NOTE: This key is activated by setting "dnssec-lookaside auto;"
# in named.conf.
dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE15lLy2
brhQv5rN32RKtMzX6Mj70jdzeND4Xk/W58dnJNPCxn8+jAGl2FZLK8t+
1uqeW+nnA3qO5+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5
ymX4BI/oQ+cAK50/xvJv00Frf8kw6ecMTwFlgPe+jnGxPPEmHAte/URk
Y62ZfkL5BAADLHQ9IrS5t/yAe7mbBZVcOwIeU+Rw/mRx/vwwMCTgNboM
QKtedvNXDrY+DSHZws3xiRXF1Rf+al9UmZfeav/4NWLKjHzpT59k/VSt
TDN05UuWrBNh";

# ROOT KEY: See https://data.iana.org/root-anchors/root-anchors.xml
# for current trust anchor information.
# NOTE: This key is activated by setting "dnssec-validation auto;"
# in named.conf.
. initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+5W29euxhJhVVLOyQbSEW0O8gcCjF
FVQeTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g5NfnfL5MTJRkxoX
bfDa/eVPQuYEhe37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXp+Y68LsvPVjR05Swze1+pAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgu/0sGIcGOYl7O/QdXfZ57relS
Qageu+ip5dTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1i+z0=";
};

DNSSEC : DNS Secure

Ajouter des commentaires dans BIND

Il existe 3 façons pour mettre du commentaire dans les fichiers de BIND et peuvent être écrit n’importe où.

Commentaire semblable au langade C (avec /* et */)

/* Commentaire dans BIND semblable au langage C */
/* Autres commentaires
Sur plusieurs lignes
Sur plusieurs lignes
Fin */

Commentaire semblable au langage C++ (avec //)

// Commentaire dans BIND semblable au langage C++
// Sur plusieurs lignes
// Fin

Commentaire semblable au langage Shell (avec #)

# Commentaire dans BIND semblable au langage Shell
# Sur plusieurs lignes
# Fin

Il existe aussi le “;” notamment utilisé dans les RRs

Création d’un nouvel enregistrement DNS

Création d’une nouvelle zone DNS

Il suffit d’éditer le fichier /etc/bind/named.conf.local et de rajouter une zone :

# vi /etc/bind/named.conf.local
zone "monsite42.com" {
type master;
file "/var/lib/bind/monsite42.com.hosts";
};

Et de créer le fichier hosts correspondant

Créations de fichier hosts

Il faut créer un fichier dans /var/lib/bind/ que nous appellerons monsite42.com.hosts par exemple.

Celui-ci doit contenir des informations pour les serveurs DNS (entre autres).

# vi /var/lib/bind/monsite42.com.hosts
#ttl 86400
quarantedeux.com. IN SOA quarantedeux.com. webmaster.quarantedeux.com. (
2012072902 ; Serial
21600 ; Refresh
3600 ; Retry
604800 ; Expire
86400 ) ; Minimum

IN NS ks7337.kimsufi.com.
IN NS ns.kimsufi.com.
IN A 95.42.43.44
www IN A 95.42.43.44
sql IN A 95.42.43.44
  • ttl : Durée de validité d’un enregistrement. (Par défaut : 86400 sec.)
  • IN : Classe correspondant aux protocoles d’Internet
  • SOA (Start Of Authority) : Permet de décrire le serveur de nom ayant autorité sur la zone et l’adresse électronique du contact technique.
  • postmaster : E-mail de l’administrateur du domaine (sans @)
  • Serial : Numéro de série, permet au serveur secondaire de se mettre à jour si nécessaire. Par convention yyyymmdd + numéro de la modification
  • Refresh : Fréquence à laquelle le serveur secondaire va consulter le serveur primaire. (Par défaut : 21600 sec.)
  • Retry : Délai au bout duquel il consulte une deuxième fois le serveur primaire si ce dernier n’a pas répondu au refresh. (Par défaut : 3600 sec.)
  • Expire : Durée après laquelle il considérera que le serveur primaire n’est plus accessible
  • Minimum TTL : Durée de vie minimum du cache. (Par défaut : 86400 sec.)
  • NS : Serveur de noms ( primaire, secondaire,…)
  • A : Adresse IP
  • MX : Le serveur de messagerie
  • CNAME : (Canonical name) Pour ajouter des alias

Documentation

http://www.isc.org/software/bind
http://www.bind9.net/manuals
http://wiki.goldzoneweb.info/configuration_et_optimisations_de_bind
http://www.afnic.fr/fr/produits-et-services/services/zonecheck
http://centosadmin.net/dns-primaire-bind-fichiers-zones
https://guides.web4all.fr/display/GDDA/Installation+d%27un+serveur+DNS+Bind

> Partager <