{{tag>dns network}}
====== Créer un serveur DNS avec Bind9 ======
La principale fonction d'un serveur de noms (Domain Name System) est
de traduire ''un nom de domaine'' en une (ou plusieurs) adresses ''IP''.
===== Création d'un serveur DNS en utilisant BIND9 =====
La mise en place d'un ''serveur DNS'' sur un réseau permet de remplacer
les adresses IP des machines par un nom. Ainsi, il est même possible
d'associer plusieurs noms à la même machine pour mettre en évidence
les différents services possibles.
Nous devons disposer de deux machines linux. On doit installer le
service bind9 dans les deux hôtes avec la commande ((docker est une alternative intéressante)):
apt-get install bind9
Quelques notions essentielles avant de configurer les serveurs.
* **TLD (Top-Level Domains)** : Il s'agit du niveau le plus élevé de la hiérarchie DNS.
* **SLD (Secondary Level Domains)** : Ce sont les noms de domaines avec lesquels vous êtes le plus familier, comme google.com, slashdot.org, thejimmahknows.com. Remarquez chacun de ces suffixes.
* **Sub Domains** : ressources regroupées logiquement, telles que mail.google.com et www.google.com. Peut avoir plusieurs sous-domaines de préfixe ( FIXME c'est-à-dire test.test.igpro-online.net).
* **Resource Records** : Il existe plusieurs types. Les plus courants sont les enregistrements A, MX et CNAME.
* **PTR (Pointer Record)** : Un enregistrement PTR peut uniquement être créé sur les serveurs de noms gérés par le propriétaire de l’adresse IP et s’applique uniquement à des adresses IP fixes.
===== Configuration du Master =====
On utilisera le nom de domaine **mederis.net** et deux Addresses IP :
''62.210.103.156'' pour le ''master'' et ''62.210.139.88'' pour le ''slave''.
* Vérifier que le dossier d'installation ''bind'' a les bonnes permission ''/etc/bind/''
-rw-r--r-- 1 root bind 463 Jan 15 2018 named.conf
* Éditer le fichier ''named.conf.options'' , dans la section ''options''
options {
...
dnssec-enable yes;
dnssec-validation auto;
auth-nxdomain no; /* conform to RFC1035 */
listen-on {
127.0.0.1;
62.210.103.156; /* l'addresse IP du Master */
};
allow-transfer {
62.210.139.88; /* l'addresse IP du Slave */
};
...
};
* Crée un dossier ''zones'' dans le dossier bind et crée un fichier avec votre nom de domaine, ce dernier contiendra la configuration de votre zone
$TTL 3600
test.mederis.net. IN SOA ns1.test.mederis.net. admin.test.mederis.net. (
20 /* ;Serial */
600 /* ;Refresh */
3600 /* ;Retry */
604800 /* ;Expire */
3600 /* ;Minimum */
)
/* ;Nameservers */
test.mederis.net. IN NS ns1.test.mederis.net.
test.mederis.net. IN NS ns2.test.mederis.net.
/* ;Resolve Nameserver IPs */
ns1.test.mederis.net. IN A 62.210.103.156
ns2.test.mederis.net. IN A 62.210.139.88
/* ; Main Ip resolution */
test.mederis.net. IN A 62.210.139.88
/* ; CNAMEs */
lola.test.mederis.net. IN CNAME test.mederis.net.
* Ajouter deux records de type ''A'' et l'autre de type ''NS'' chez votre fournisseur DNS.
/* # A records */
ns1.test.mederis.net. 900 A 62.210.103.156 # addresse IP Master
ns2.test.mederis.net. 900 A 62.210.139.88 # addresse IP Slave
/* # Name server */
test.mederis.net. 900 NS ns2.test.mederis.net.
test.mederis.net. 900 NS ns1.test.mederis.net.
* Une zone inversée est également requise. Une zone inversée permet au DNS de convertir une adresse en un nom. Donc on crée deux fichiers de zones ''reverse'' dans le dossier ''/etc/bind/zones/''
/* # /etc/bind/db.62.210.103 */
$TTL 3600
103.210.62.in-addr.arpa. IN SOA ns1.test.mederis.net. admin.test.mederis.net. (
14 /* ; Serial */
1h /* ; Refresh [1h] */
10m /* ; Retry [10m] */
1d /* ; Expire [1d] */
10m) /* ; Negative Cache TTL [1h] */
/* ; Name Server */
103.210.62.in-addr.arpa. IN NS ns1.test.mederis.net.
/* ; PTR Records */
158.103.210.62.in-addr.arpa. IN PTR ns1.test.mederis.net.
/* # /etc/bind/db.62.210.139 */
$TTL 3600
139.210.62.in-addr.arpa. IN SOA ns2.test.mederis.net. admin.test.mederis.net. (
14 /* ; Serial */
1h /* ; Refresh [1h] */
10m /* ; Retry [10m] */
1d /* ; Expire [1d] */
10m) /* ; Negative Cache TTL [1h] */
/* ; Name Server */
139.210.62.in-addr.arpa. IN NS ns2.test.mederis.net.
/* ; PTR Records */
158.103.210.62.in-addr.arpa. IN PTR ns2.test.mederis.net.
* Ajouter la configuration correspondant au ''reverse'' dans le fichier ''named.conf.local''
...
zone "103.210.62.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.62.210.103";
notify yes;
};
zone "139.210.62.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.62.210.139";
notify yes;
};
* Redémarrer le serveur ''Bind9'' en utilisant la commande (**PS**: À chaque reload après modification dans l'un des fichiers ne pas oublier pas d'incrémenter le numéro de série (serial) du fichier zone de votre domaine)
sudo rndc reload
# OR
sudo systemctl restart bind9
===== Configuration du Slave =====
Dans la configuration du **Slave** on va installer les mêmes dépendances
qu'on a déjà installées dans le **Master**. Le but est que les deux
serveurs puissent communiquer. Le serveur **Master** doit pouvoir faire
un transfert de zone aux **Slave**
* Éditer dans la fin du fichier ''named.conf.options''
options{
...
dnssec-validation auto;
auth-nxdomain no; /* # conform to RFC1035 */
allow-query {
127.0.0.1;
62.210.139.88;
};
listen-on { 127.0.0.1;
62.210.139.88;
};
listen-on { any; };
listen-on-v6 { any; };
allow-transfer { 51.15.188.118;
127.0.0.1;
};
};
* Éditer le fichier ''named.conf.local''
zone "test.mederis.net" IN {
type slave;
file "/etc/bind/zones/test.mederis.net";
masters { 62.210.103.156; };
};
zone "103.210.62.in-addr.arpa" {
type slave;
file "/etc/bind/zones/db.62.210.103";
masters { 62.210.103.156; };
};
zone "139.210.62.in-addr.arpa" {
type slave;
file "/etc/bind/zones/db.62.210.139";
masters { 62.210.103.156; };
};
===== DNSSEC =====
Le ''DNSSEC'' permet de sécuriser l’authenticité de la réponse DNS. La
sécurité des données est effectuée à l’aide d’un mécanisme de clés
(''KSK'' pour Key Signing Key & ''ZSK'' pour Zone Signing Key) qui signe
les enregistrements DNS de sa propre zone.
{{ system_administration:dnssec-vs-dns-normal.png |}}
* Génération des paires de clefs ''KSK'' & ''ZSK'' dans le dossier ''/etc/bind/'' (dans ce cas on a utilisé l'algorithme NSEC3RSASHA1)
# Passer à root pour pouvoir générer les clefs
dnssec-keygen -a NSEC3RSASHA1 -b 4096 -n ZONE test.mederis.net # Generate ZSK KEYS
dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE test.mederis.net # Generate KSK KEYS
# Changer les noms des deux clefs générées par un nom symbolique
mv Ktest.mederis...+0..key Ktest.mederis.net.ksk.key #ZSK public key
mv Ktest.mederis...+0..key Ktest.mederis.net.ksk.private #ZSK private key
mv Ktest.mederis...+0..key Ktest.mederis.net.ksk.key #KSK public key
mv Ktest.mederis...+0..key Ktest.mederis.net.ksk.private #KSK private key
* Inclure les clefs générées à la fin du fichier de zone du domaine ''/etc/bind/zones/test.mederis.net''
$INCLUDE "/etc/bind/Ktest.mederis.net.ksk.key" ;
$INCLUDE "/etc/bind/Ktest.mederis.net.zsk.key" ;