Informations :
Dates
- Publish : : Friday 03 april 2020
- Modification : Friday 10 february 2023
- 5166 views
Share :
NdM : 2023/02/10 - Modification rédactionnel (Ajout d'informations ? nsupdate)
Je vous explique comment-faire pour configurer un (2) serveur(s) DNS maître / serveur DNS esclave - authoritaire/non-authoritaire.
Ci-dessous les adresses de mes serveurs "Domain Name Service" qui sont des DNS public accessible depuis n'importe quel ISP :)
L'un se trouve vers Montréal (Canada)
- DNS BIND version 9.11.5 - Debian Buster (10.3)
- DNS FQDN : ns1.lab3w.com
- DNS IPv4 PUBLIQUE :
158.69.126.137
- DNS IPv6 PUBLIQUE :
2607:5300:60:9389:58:0:1:1
- DNS IPv4 PRIVÉE :
10.101.150.1
Un se trouve à Nice (France)
- DNS BIND version 9.10.3 - Debian Stretch (9.12)
- DNS FQDN : ns2.lab3w.com
- DNS IPv4 PUBLIQUE :
83.159.31.116
- DNS IPv6 PUBLIQUE :
2607:5300:60:9389:58:0:2:1
- DNS IPv4 PRIVÉE :
10.106.0.1
Et.. Un se trouve à Francfort (Allemagne)
......
Pour informations : host dns.ipv10.net
retourne mes DNS ??
NdM : Pour upgrader une version , par exemple de la BIND 9.9.5 vers 9.10.3 sur Ubuntu Trusty : ajouter le dépot add-apt-repository ppa:lamont/ppa
, mettre à jour la liste des dépots apt update
et faite une upgrade apt upgrade
.
Ces 2 machines sont sur un réseau VPN par IPSec + XL2TP - docs sur le site (lien en bas de page).
Premièrement vous devez installer le démon BIND9 et le configurer.
Je vous transmet un lien Web pour configurer les fichiers de loggin html (copier/coller "Sample Logging Configuration" ;) ) et la documentation bind9 sur readthedocs.io html
Ci-joint l'installation et la configuration du serveur BIND9 depuis une distribution Linux Debian html et/ou depuis une distribution Linux Ubuntu html.
Installation du serveur DNS BIND9 / NAMED (master / slaves)
Installer le démon BIND9 et quelques paquets supplémentaires.
Script avec 2 lignes
001apt install bind9 002apt install dnsutils net-tools opendnssec mtr traceroute iputils-ping whois
Créer un fichier /etc/bind/named.conf.log
comme sur cette page html pour avoir les fichiers de logs adéquat.
Nous avons donc le fichier des include /etc/bind/name.conf
, le fichier des options /etc/bind/name.conf.options
et le fichier des qui déclare nos zones DNS /etc/bind/name.conf.local
que nous allons configurer.
Sur les 2 machines (NS1 : 10.101.150.1
) et (NS2 : 10.106.0.1
)
- Créer un répertoire
/etc/bind/masters/
pour y placer nos Reverses IPv4-v6 de ce réseau et zones DNS gérées par et depuis cette machine . - Créer un répertoire
/etc/bind/slaves/
pour y récupérer les Reverses IPv4-v6 des autres réseaux et des zones DNS gérées par et sur d'autres machines.
Script avec 1 ligne
001mkdir /etc/bind/masters/ /etc/bind/slaves/
Reverses IPv4 Locales Area Networks (LAN)
Nous allons créer les reverses IPv4 LAN (Locales Area Networks) sur les 2 machines NS1 et NS2, pour ensuite les transferer/updater, de la zone "master" vers la zone "slave", selon où elles se trouvent (les zones).
Cela permet :
- Si je modifie le fichier Reverse IPv4 du réseau IPv4 sur la machine "NS1", le fichier sera transférée et updatée sur la machine "NS2" ;)
- Si je modifie le fichier Reverse IPv4 du réseau IPv4 sur la machine "NS2", le fichier sera transférée et updatée sur la machine "NS1" ;)
En quelques sortes, pour que vous compreniez, si une zone DNS se trouve au Canada (de type "master") elle sera transférée sur la machine DNS de France (type "slave"). Si sur la machine de Nice une zone DNS de type "master" est modifiée, elle sera transféré à Montréal ;) Tout dépend qui (quel admin) gère quoi ^^
Reverses IPv4 DNS (réseau IPv4 LAN master NS1 de la zone IPv4 : 10.101.150.0/24
- slave des autres zones)
Sur la machine (NS1) nous allons créer les reverses IPv4 LAN (Locales Area Networks) dans le fichier /etc/bind/masters/150.101.10.in-addr.arpa
qui pourait ressembler à cela - Les IPv4 de ce/notre réseau de Montreal :
Script avec 24 lignes
001$ttl 86400 # (1 jour) - 604800 (7 jours) 002@ IN SOA ns1.lab3w.loc. hostmaster.lab3w.loc. ( 003 2020040302 ; serial, yearmonthdayserial 004 20 ; refresh, seconds / default:21600 005 5 ; retry, seconds / default:3600 006 420 ; expire, seconds / default:604800 007 60 ) ; minimum, seconds / default:3600 008 009;------------------------------------------------------- 010; SERVER DNS OF DOMAIN 011;------------------------------------------------------- 012@ IN NS ns1.lab3w.loc. 013@ IN NS ns2.lab3w.loc. 014 015;------------------------------------------------------- 016; IFORMATIONS OF DOMAIN 017;------------------------------------------------------- 018@ IN TXT "LAB3W.LOC : Reverse file (10.101.150.0/24)" 019 020;------------------------------------------------------- 021; ADDR REVERSE IP (PTR) OF SERVERS 022;------------------------------------------------------- 0231 IN PTR ns1.lab3w.loc. 02410 IN PTR ww1.lab3w.loc.
Reverses IPv4 DNS (réseau IPv4 LAN master NS2 de la zone IPv4 : 10.106.0.0/24
- slave des autres zones)
Sur la machine (NS2) nous allons créer les reverses IPv4 LAN (Locales Area Networks) dans le fichier /etc/bind/masters/0.106.10.in-addr.arpa
qui pourait ressembler à cela - Les IPv4 de ce/notre réseau de Nice :
Script avec 24 lignes
001$ttl 86400 # (1 jour) - 604800 (7 jours) 002@ IN SOA ns2.lab3w.loc. hostmaster.lab3w.loc. ( 003 2020040302 ; serial, yearmonthdayserial# 004 20 ; refresh, seconds / default:21600 005 5 ; retry, seconds / default:3600 006 420 ; expire, seconds / default:604800 007 60 ) ; minimum, seconds / default:3600 008 009;------------------------------------------------------- 010; SERVER DNS 011;------------------------------------------------------- 012@ IN NS ns1.lab3w.loc. 013@ IN NS ns2.lab3w.loc. 014 015;------------------------------------------------------- 016; IFORMATIONS OF DOMAIN 017;------------------------------------------------------- 018@ IN TXT "LAB3W.LOC : Reverse file (10.106.0.0/24)" 019 020;------------------------------------------------------- 021; ADDR REVERSE IP (PTR) OF SERVERS 022;------------------------------------------------------- 0231 IN PTR ns2.lab3w.loc. 02410 IN PTR ww2.lab3w.loc.
Cela permet d'afficher le nom du serveur en demandant l'informations d'une adresse IP - Qu'une IPv4 retourne le nom (host 10.106.0.10
).
En utilisant par exemple la commande suivante :
Script avec 2 lignes
001host 10.101.150.1 0021.150.101.10.in-addr.arpa domain name pointer ns1.lab3w.loc.
Script avec 2 lignes
001host 10.106.0.1 0021.0.106.10.in-addr.arpa domain name pointer ns2.lab3w.loc.
NdM 2022/01/10 : Petite explication complèmentaire (hors adressage du tutoriel) ;-)
Imaginer dans un premier temps que vous ayez plusieurs "amis" - un amis à Paris, un autre à Montréal, un autre à Londres et que vous ayez un serveur (en commun) dans un datacenter qui se trouve à Bruxelles.
Chacun gère un serveur DNS avec ses fichiers reverse DNS et ses fichiers DNS de noms de domaines.
- L'admin (l'ami) de Paris s'occupe donc de ses fichiers - et seulement lui ou elle.
- L'admin (l'ami) de Montréal s'occupe donc de ses fichiers - et seulement lui ou elle.
- L'admin (l'ami) de Londres s'occupe donc de ses fichiers - et seulement lui ou elle.
Par contre vous et chacun de vos amis veulent avoir accés à la configuration de l'autre - sur sa machine DNS local - et/ou disponible.
Pour cela c'est très simple :
Chacun des admins (amis) configurent LEURS zones en master et configure le transfert
et l'update
vers le serveur général de Bruxelles.
Ce qui correspondt à dire :
- Sur votre serveur en local toutes vos zones, celles qui vous appartiennent sont configurées en master et sont à transférer et à updater au serveur général.
- Sur votre serveur en local toutes les zones des amis, celles qui ne vous appartiennent pas sont configurées en slaves et sont à récupérer sur le serveur général.
- Sur le serveur général (en datacenter de Bruxelles) toutes vos, les zones (de vous tous) sont configurées en slaves.
Important : dans la configuration des serveurs DNS (fichier /etc/resolv.conf
) - Ajouter le serveur général (de Bruxelles) après votre serveur local.
Par exemple sur la machine DNS elle-même :
Script avec 5 lignes
001# DNS sur cette machine 002nameserver ::1 003nameserver 127.0.0.1 004# DNS général (Bruxe11es) 005nameserver 2607:5300:60:9389:15:1:a:1000
Par exemple sur votre réseau local (en imaginant que vous pouvez attraper l'IPv4 du DNS 10.0.2.1
) :
Script avec 5 lignes
001# DNS sur le réseau local 002nameserver 2607:5300:60:9389:58:0:2:1 003nameserver 10.0.2.1 004# DNS général (Bruxe11es) 005nameserver 2607:5300:60:9389:15:1:a:1000
Une fois configurés (les rndc keys, les fichiers zones et leurs configurations), dès que quelqu'un fera une mise à jour à un de ses fichiers celle-ci sera transférée jusqu'à votre serveur en local.
- Cela permet d'avoir un serveur DNS général - toujours à jour et toujours disponible et que l'on ne rédémare jamais.
- De pouvoir éteindre rédémarer notre machine DNS local sans pertuber nos amis - ainsi que nous-même (notre réseau local).
- Et de pouvoir récupérer toutes les zones même au cas où votre machine DNS local aurait explosée !
;-)
Cordialement,
Romain
NdMoi-même :
- Utiliser la commande
named-checkconf
pour vérifier la configuration des fichiers. - Utiliser la commande
named-checkzone
pour vérifier la configuration des fichiers zone avant de relancer le serveur.
Script avec 4 lignes
001# Sur NS1 002named-checkzone 150.101.10.in-addr.arpa arpa/150.101.10.in-addr.arpa 003zone 150.101.10.in-addr.arpa/IN: loaded serial 2020040302 004OK
Script avec 4 lignes
001# Sur NS2 002named-checkzone 0.106.10.in-addr.arpa arpa/0.106.10.in-addr.arpa 003zone 0.106.10.in-addr.arpa/IN: loaded serial 2020040302 004OK
Jusque là nous avons configuré 2 fichiers de zones arpa (pour les adresses IPv4). Nous pouvons configurer les zones DNS MASTER et SLAVES. IL faut avant tout configurer les options globales du serveur DNS, des zones, des requêtes.
Configuration du fichier /etc/bind/name.conf
Ce fichier permet par exemple de configurer les fichiers à inclure.
Le fichier /etc/bind/name.conf
pourait ressembler à cela :
Script avec 10 lignes
001// Gerer les fichiers de logs 002include "/etc/bind/named.conf.log"; 003 004include "/etc/bind/named.conf.options"; 005include "/etc/bind/named.conf.local"; 006include "/etc/bind/named.conf.default-zones"; 007 008// Les clefs du server 009include "/etc/bind/bind.keys"; 010include "/etc/bind/rndc.key";
Le fichier /etc/bind/rndc.key
permet de sécurisé les transaction entre serveur maître et esclaves.
Par défaut le fichier ressemble à cela et a les droits lire et écrire pour l'utilisateur -rw-r-----
et appartient à l'utilisateur bind
et goupe bind
:
Script avec 4 lignes
001key "rndc-key" { 002 algorithm hmac-md5; 003 secret "EWpZdK4VZZEZYtgWXFFKwU="; 004};
La sécurité TSIG permet de réduire les conséquences de l'IP spoofing entre les DNS primaires et secondaires.
La technologie de clé secrète partagée de TSIG permet à de multiples hôtes de partager la même clé secrète. Ce type de clé est plus vulnérable que les clés publique et privée que DNSSEC utilise, et donc TSIG n'est pas aussi sûr que DNSSECurisé.
On peut utiliser TSIG pour authentifier des transactions de messages DNS comme des requêtes et réponses, des mises à jour dynamiques, et des transferts de zones. On peut, par exemple, utiliser TSIG entre les serveurs DNS et les serveurs DNS des ISP ou des partenaires pour sécuriser ces communications. Si votre serveur BIND utilise une zone DDNS (Dynamic DNS), vous pouvez utiliser TSIG pour authentifier les mises à jour dynamiques provenant des clients, des serveurs DHCP, et des autres serveurs supportant TSIG. Ce type d'authentification des mises à jour dynamiques est plus sûr que l'authentification par adresse IP. On peut également utiliser TSIG pour authentifier les transferts de zones du serveur DNS primaire vers les serveurs DNS secondaires.
Nsupdate, supporte également TSIG à l'aide d'une option de clé secrète. Supposons que l'on veuille utiliser TSIG entre deux hôtes, host1 et host2. Il faut commencer par générer une clé secrète pour les hôtes. Pour cela, on dispose de la commande dnssec-keygen
.
Script avec 2 lignes
001dnssec-keygen -a HMAC-MD5 -b 512 -n HOST "ns-dns" 002w²Kns-dns.+157+00811
L'option -a
de cette commande définit l'algorithme de signature numérique que la clé générée utilisera. RFC 2845 html spécifie HMAC-MD5 comme l'algorithme obligatoire pour l'interopérabilité TSIG, et BIND n'accepte que HMAC-MD5 pour TSIG. La longueur de clé maximale pour HMACMD5 est de 512 bits.
On recupére la clef encodée HMAC-MD5 512bits version base64 dans le fichier Kns-dns.+157+00811.private
que l'on assigne à la la valeur "secret" de notre fichier /etc/bind/rndc.key
. On fait de même pour les machines slaves.
Script avec 9 lignes
001#key "rndc-key" { 002# algorithm hmac-md5; 003# secret "EWpZdK4VZZEZYtgWXFFKwU="; 004#}; 005key "ns-dns" { 006 algorithm hmac-md5; 007 secret "0YS2dJFTy8LOoKJTJw7eaOTvaXO7V4xMAdjN1QA0HvN0qW2BOQHEE8BSbqBYZjiCgEl3v7jtBMLwSk3hPrKnYQ=="; 008}; 009
On pourrait se créer plusieurs clées, pour différents serveurs, personnes, entitités.
Configuration du fichier /etc/bind/name.conf.options
On trouve dans ce fichier plusieurs options sur lequelles vous pouvez vous renseigner ici html.
- l'option
directory "/var/cache/bind";
permet de configuer le répertoire des fichiers de cache du serveur de noms de domaine BIND9 / NAMED. - l'option
forwarders { IPv4; IPv6; };
permet de configurer les DNS que vous ne gérer pas pour résoudre les autres sites / noms de domaines. - l'option
dnssec-enable yes;
permet d'activer les DNSSecurisé. - l'option
dnssec-validation yes|auto;
permet d'assurer la conformité du serveur. - l'option
dnssec-lookaside auto;
permet de configurer le serveur DNS de validation (par exemple :. trust-anchor dlv.isc.org.
- l'option
auth-nxdomain no;
conform à la Requests For Comments RFC 1035 html - l'option
listen-on { none; | any; | IPv4; };
permet de configuer les adresses IPv4 d'écoute du serveur. - l'option
listen-on-v6 { none; | any; | IPv6; };
permet de configuer les adresses IPv6 d'écoute du serveur. - l'option
allow-query { none; | any; | IPv4; | IPv6; | keywordsACL; };
permet de configuer les adresses IP qui peuvent intéroger le serveur DNS et résoudre les requêtes.
Il y a des keywords ACL prédéfinis (any, none, localhost et localnets
); nous pouvons en créer d'autres.
On peut créer l'ACLinternals
comme cela :
Script avec 5 lignes
001# ACL réseaux internes 002acl internals { 003 10.106.0.0/24; 004 10.101.150.0/24; 005};
- l'option
allow-transfer { IPv4; | IPv6; | keywordsACL; };
permet de configurer les adresses IP pour transférer aux serveurs DNS secondaires les zones mises à jour (nous les configurons manuellement dans les zones masters). - l'option
allow-notify { IPv4; | IPv6; | keywordsACL; };
permettre de notifier les adresses IP à prévenir immédiatement des serveurs DNS secondaires si une mise à jour de zone est effectuée (nous les configurons manuellement dans les zones masters). - l'option
also-notify { IPv4; | IPv6; | keywordsACL; };
notifier également les adresses IP à prévenir immédiatement des serveurs DNS secondaires si une mise à jour de zone est effectuée (nous les configurons manuellement dans les zones masters). - l'option
recursion yes;
permet d'autoriser les requêtes recusives (des sous-zones me semble-t'il ^^). - l'option
allow-recursion { none; | IPv4; | IPv6; | keywordsACL; };
permet de configurer les adresses IP qui sont autoriser pour les requêtes recusives (des sous-zones me semble-t'il ^^). - l'option
query-source address * port 953;
permet de configurer un seul port d'échange entre les serveurs (peu sécurisé). - D'autres options comme :
- l'option
controls { inet 127.0.0.1 allow { localhost; } ; };
- l'option
dump-file "data/cache_dump.db";
- l'option
statistics-file "data/named_stats.txt";
- l'option
memstatistics-file "data/named_mem_stats.txt";
- l'option
additional-from-auth yes ; // par default
- l'option
additional-from-cache yes ; // par default
- l'option
view { };
active html depuis la version BIND 9.2.X, permet de déclarer les mêmes zones selon d'où le client arrive (par exemple depuis le réseau internet ou depuis le réseau local).
- l'option
Le fichier /etc/bind/name.conf.options
pourait ressembler à cela :
Script avec 56 lignes
001 # Fichier de configuration server NS1 002options { 003 directory "/var/cache/bind"; 004 key-directory "/etc/bind/keys/"; 005 006 forwarders { 007 2001:4860:4860::8888; 008 8.8.8.8; 009 2001:4860:4860::8844; 010 8.4.8.4; 011 }; 012 013 dnssec-enable yes; 014 dnssec-validation yes; 015 dnssec-lookaside . trust-anchor dlv.isc.org.; 016 017 auth-nxdomain no; # conform to RFC1035 018 019 // Ecouter sur ces adresses 020 listen-on-v6 { 021 ::1; 022 2607:5300:60:9389:58:0:1:1; 023 }; 024 listen-on { 025 127.0.0.1; 026 10.101.150.1; 027 158.69.126.137; 028 }; 029 030 // Ne pas transférer les informations de zones aux DNS secondaires 031 // allow-transfer { none; }; # La configuration directement dans les fichiers zones 032 033 allow-notify { 10.101.150.1; }; # permettre de notifier les ips des serveurs 034 // Contient les DNS secondaires non officiels, cela permet de les prévenir immédiatement si une mise à jour d'une zone est effectuée 035 also-notify { 10.106.0.1; }; # notifier également les ips des serveurs 036 037 allow-query { any; }; 038 039 recursion yes; 040 041 allow-recursion { 042 127.0.0.0/8; 043 10.106.0.0/24; 044 10.101.150.0/24; 045 }; 046 047 // Port d'échange entre les serveurs DNS 048// query-source address * port 953; 049 050 dump-file "data/cache_dump.db"; 051 statistics-file "data/named_stats.txt"; 052 memstatistics-file "data/named_mem_stats.txt"; 053 054 additional-from-auth yes ; // par default 055 additional-from-cache yes ; // par default 056};
Configuration du fichier /etc/bind/name.conf.local
Nous allons maintemant configurer le fichier du serveur DNS principal où l'on déclare nos zones DNS. Celui appelle les fichiers de zones DNS.
Script avec 35 lignes
001//----------------------------------------------------------------- 002// REVERSE LOCAL 003// le fichier du réseau 10.101.150.0/24 sera transféré/updaté sur le(s) serveur(s) distant(s). 004//----------------------------- 005 006 zone "150.101.10.in-addr.arpa" { 007 type master; 008 file "/etc/bind/masters/150.101.10.in-addr.arpa"; 009 010 allow-transfer { key "ns-dns"; }; # la clef pour les transferts entre serveurs 011 allow-update { key "ns-dns"; }; # la clef pour les nsupdate entre serveurs 012 013// notify master-only; 014 notify yes; 015 }; 016 017//----------------------------------------------------------------- 018// REVERSE DISTANT 019// le fichier du réseau 10.106.0.0/24 sera transféré/updaté sur cette machine. 020//----------------------------- 021 022 zone "0.106.10.in-addr.arpa" { 023 type slave; 024 file "/etc/bind/slaves/0.106.10.in-addr.arpa"; 025 masterfile-format text; 026 027 masters { 10.101.150.1; }; 028 029// allow-notify { 10.101.150.1; }; 030 031 notify master-only; 032// notify yes; 033 }; 034 035//-----------------------------------------------------------------
Voilà nous avons configurer notre zone master et notre zone du serveur distant. Faire la même chose avec vos fichiers de zones DNS (comme d'habitude).
Inverser la configuration sur les serveurs DNS slaves.
Modifier le fichier /etc/bind/rndc.key
pour les transactions entre serveurs DNS
Il faut modifier le fichier /etc/bind/rndc.key
pour ajouter les adresses IPs des serveurs qui pourront s'intéroger. Faire la même chose sur les autres serveurs DNS en changant l'adresse IP.
Script avec 4 lignes
001server 10.106.0.1 { 002# transfer-format many-answers; 003 keys { "ns-dns"; }; 004};
On peut ajouter les adresses IP des serveurs que peuvent faire des update
? nsupdate !
Jusque là, je viens de vous expliquer comment configuer un (2) serveur(s) DNS en vous expliquant avec les adresses de reverse IPv4 pour que vous compreniez le fait de(s) maitre(s) et de(s) esclave(s).
Créer un fichier pour une zone lab3w.loc
Pour le bien fait du tutorial, je vous ajoute un fichier zone "exemple" de nom de domaine.
Vous devez configurer un fichier de zone lab3w.loc
pour qu'un nom retourne son adresse IP (host ww2.lab3w.loc
) !
Par exemple le fichier /etc/bind/masters/lab3w.loc.hosts
sur 1 des 2 serveurs :
Script avec 35 lignes
001$ttl 86400 # (1 jour) - 604800 (7 jours) 002@ IN SOA dns.lab3w.loc. hostmaster.lab3w.loc. ( 003 2020040302 ; serial, yearmonthdayserial# 004 20 ; refresh, seconds / default:21600 005 5 ; retry, seconds / default:3600 006 420 ; expire, seconds / default:604800 007 60 ) ; minimum, seconds / default:3600 008 009;------------------------------------------------------- 010; SERVER DNS 011;------------------------------------------------------- 012@ IN NS ns1.lab3w.loc. 013@ IN NS ns2.lab3w.loc. 014 015;------------------------------------------------------- 016; IFORMATIONS OF DOMAIN 017;------------------------------------------------------- 018@ IN TXT "LAB3W.LOC : Web and networks laboratory - InterNet engineering" 019 020;------------------------------------------------------- 021; ADDR IPv4 OF SERVERS (A) 022;------------------------------------------------------- 02310.101.150.1 IN A ns1.lab3w.loc. 02410.101.150.10 IN A ww1.lab3w.loc. 025 02610.106.0.1 IN A ns2.lab3w.loc. 02710.106.0.10 IN A ww2.lab3w.loc. 028 029;------------------------------------------------------- 030; ALIAS OF SERVERS (CNAME) 031;------------------------------------------------------- 032www IN CNAME ww2.lab3w.loc. 033 034dns IN CNAME ns1.lab3w.loc. 035dns IN CNAME ns2.lab3w.loc.
Puis il faut déclarer la nouvelle zone en master (sur le serveur où on la gère/modifie) dans le fichier /etc/bind/name.conf.local
et déclarer la zone en slave sur les serveurs secondaire pour la récupération.
Script avec 15 lignes
001//----------------------------------------------------------------- 002// DOMAIN GESTION LOCAL 003// le fichier du réseau lab3w.loc.hosts sera transféré/updaté sur le(s) serveur(s) distant(s). 004//----------------------------- 005 006 zone "lab3w.loc" { 007 type master; 008 file "/etc/bind/masters/lab3w.loc.hosts"; 009 010 allow-transfer { key "ns-dns"; }; # la clef pour les transferts entre serveurs 011 allow-update { key "ns-dns"; }; # la clef pour les nsupdate entre serveurs 012 013// notify master-only; 014 notify yes; 015 };
Le fichier lab3w.loc.hosts
sera transférait sur les serveurs secondaires dans le répertoire /etc/bind/slaves/
.
Je n'ai pas ajouté d'adresse IPv6 - pour la simplicité - sur la zone LAN lab3w.loc mais on pourait le faire.
Pour informations : le tag (mot clef) est AAAA
pour configurer un champ d'adresse IPv6 - En IPv4 c'est A
.
Ajouter aux fichiers /etc/bind/name.conf.local
des 2 serveurs :
- une zone master
lab3w.loc
sur le serveur authoritaire ; là où vous modifirez la zone DNS. - une zone slave
lab3w.loc
sur le(s) serveur(s) secondaire qui récupéra le fichier de la zone DNS - (comme la configuration reverse IP slave du début du tutorial).
Une fois que vous aurez configurer la zone lab3w.loc
la commande suivante retournera l'adresse IP du serveur :
Script avec 2 lignes
001host ww2.lab3w.loc 002ww2.lab3w.loc has address 10.106.0.10
En passant, n'oubliez pas d'ajouter à votre fichier /etc/resolv.conf
l'adresse IP de votre serveur. Par exemple comme ci-dessous :
Script avec 3 lignes
001nameserver 127.0.0.1 # addr loop 002nameserver 10.101.150.1 # addr local (ns1) 003nameserver 10.106.0.1 # addr slan (ns2)
Ici, vous avons configurer seulement vos serveurs DNS. Tout doit fonctionner s'ils répondent.
Si vous êtes derrière un firewall, il faut ouvir le port UDP:53
. J'ai écris un tutorial Firewall ICMPv6 html pour les plus aguérri.
Faire vos Reverses IPv6 c'est (encore plus) important et c'est une plus belle configuration d'un(e) host master ;)
Il suffit de prendre l'adresse IPv6, par exemple : 2607:5300:60:9389:58:0:1:1
et de demander l'arpa avec la commande host
(et ne pas oublier le .
après ip6.arpa) :
Script avec 2 lignes
001host 2607:5300:60:9389:58:0:1:1 0021.0.0.0.1.0.0.0.0.0.0.0.8.5.0.0.9.8.3.9.0.6.0.0.0.0.3.5.7.0.6.2.ip6.arpa domain name pointer ns1.lab3w.com.
Script avec 2 lignes
001host 2607:5300:60:9389:58:0:2:1 0021.0.0.0.2.0.0.0.0.0.0.0.8.5.0.0.9.8.3.9.0.6.0.0.0.0.3.5.7.0.6.2.ip6.arpa domain name pointer ns2.lab3w.com.
NdMoi-même : Pour faire un transfert, une update manuelle de zone on peut utiliser la commande dig -t AXFR 0.101.10.in-addr.arpa @10.101.150.1
pour récupérer la zone 150.101.10.in-addr.arpa
sur la machine 10.101.150.1
.
rndc reload
permet de transférer hors intervalles réguliers suivant les valeurs refresh
, retry
et expire
spécifiées dans l'enregistrement SOA
de la zone depuis le serveur maître (la zone master).
rndc retransfer domain.tld
permet de transférer depuis l'esclace un zone master modifiée.
Mise à jour de zone par la commande nsupdate
Si par exemple vous avez installé DNSSec sur votre serveur DNS et que vous souhaitez mettre à jour vos enregistrements DNS sans devoir ré-générer le fichier entier d'une zone pour ré-générer le cryptage des RR (Ressource Record), je vous explique ci-dessous comment faire.
Il faut :
- Avoir configuré la variable
allow-update { key "maj-nsupdate"; };
dans les zones que vous souhaitez pouvoir mettre à jour. - Et ajouter le(s) serveur(s) qui peuvent faire les mise à jour
server 10.10.10.10 { transfer-format many-answers; keys { "maj-nsupdate"; }; }
Après, depuis la machine, celle authorisée, que vous venez de configurer (par exemple sans serveur DNS, un serveur Web).
Il faut utiliser les commandes de l'utilitaire nsupdate
? server
, zone
, update
, et send
.
Par exemple un script qui va se connecter sur mon DNS (ns1.lab3w.com
) est faire une mise à jour de la zone zw3b.fr
:
- Je supprime l'enregistrement
A
avec l'adresse IPv4 :1.2.3.4
- J'ajoute l'enregistrement
A
avec l'adresse IPv4 :135.125.133.51
- J'ajoute l'enregistrement
A
avec l'adresse IPv6 :2001:41d0:701:1100::6530
On créait par exemple le fichier : vim nsupdate-zw3b_fr.nsupdate
Script avec 28 lignes
001; NSUPDATE 002;---------------------- 003; Server DNS authoritaire 004;------ 005server ns1.lab3w.com 006;---------------------- 007; ZW3B.FR 008;------ 009zone zw3b.fr 010;---------------------- 011; Suppression si besoin d'un enregistrement 012;------ 013update del www.zw3b.fr. 3600 A 1.2.3.4 014;---------------------- 015; Ajout d'un enregistrement 016;------ 017update add www.zw3b.fr. 3600 A 135.125.133.51 018update add www.zw3b.fr. 3600 AAAA 2001:41d0:701:1100::6530 019;---------------------- 020; Modification d'un enregistrement 021;------ 022update del wwd.zw3b.fr. 3600 A 1.2.3.4 023update add wwd.zw3b.fr. 3600 A 2.3.4.5 024;---------------------- 025; Envoie des mises à jour au serveur DNS 026;------ 027send 028
Et la commande pour lancer la mise à jour depuis le serveur web 10.10.10.10
:
Script avec 1 ligne
001web:~# nsupdate -k Kmaj-nsupdate.+157+098354.private nsupdate-zw3b_fr.nsupdate
La clée est celle créait par la commande : dnssec-keygen -a HMAC-MD5 -b 512 -n HOST "maj-nsupdate"
qui créait une clef en 512bits au format MD5 (qui doit être configuré dans le serveur DNS authoritaire (par exemple dans le fichier rndc.key
).
Voilà comment mettre à jour, supprimer, ajouter des enregistrements DNS à la volé (les mises à jour sont instantanés sur les serveurs DNS mondiaux).
🙂
J'ajoute ce lien qui explique très bien comment installer DNSSEC sur un Authoritative BIND DNS - pour vos zones - pour se protéger contre l'usurpation d'identité de chaque nom de sous-domaine :)
How To Setup DNSSEC on an Authoritative BIND DNS Server html
En résumé, il y a que 3 lignes de commandes !
C'est toujours agréable de savoir que personne puisse usurper l'adresse de nos sites Web et de nos noms de domaine.
NTP (Network Time Protocol)
Je vous ajoute l'adresse de mon serveur NTP (Network Time Protocol) qui permet à toutes mes machines d'être à la même heure.
Si les serveurs DNS (masters/slaves - authoritaire/non-autohoritaire) ne sont pas à la même heure (minute) ; les transferts de zones ne fonctionnent pas.
Vous pouvez ajouter : une tâche planifiée pour la mise à jour de l'heure de votre machine.
Comme cela - ouvrir vos tâches planifiées : crontab -e
- puis ajouter cette ligne.
Script avec 1 ligne
00105 */1 * * * sleep $(shuf -i 0-30 -n1); /usr/sbin/ntpdate -6 ntp.lab3w.com 1>>/var/log/syslog 2>/dev/null 2>&1
Pour faire une mise à jour toutes les heures à "5 minutes" (05 */1 * * *
) et attendre N secondes comprises entre 0 et 30 (sleep $(shuf -i 0-30 -n1);
), depuis mon serveur NTP accessible seulement en IPv6 ;)
Vous remarquerez une ligne dans /var/log/syslog
de type :
Script avec 1 ligne
00120 Jun 14:05:11 ntpdate[25604]: adjust time server 2607:5300:60:9389:58:0:2:101 offset 0.171356 sec
Bon adressage de noms ^^ moi c'est Olivier Romain Jaillet-ramey ;p alias ORJ (LAB3W html) - Freelance, consultant LAMP : Développeur OPérating Systems, W3C.Master confirmé, +15 ans d'eXPériences, spécialiste des technologies IHM et des architectures systèmes et réseaux double-piles IPs.
Cordialement,
Romain
Sources de documentations du serveur de noms de domaine BIND9 / NAMED
- RFC 1035 html : Noms de domaine - implémentation et spécification html
- RFC 8767 html : Servir des données périmées pour améliorer la résilience DNS html
- RFC 2845 html : Authentification de transaction par clé secrète pour DNS (TSIG) html
- RFC 5936 html : DNS Zone Transfer Protocol (AXFR) html - Transfert de zone DNS html.
- RFC 6895 html : Domain Name System (DNS) IANA Considerations
- RFC 9108 html : YANG Types for DNS Classes and Resource Record Types
Informations sur les reqêtes DIG pour interroger votre serveur de noms de domaine BIND9 / NAMED
Sécuriser votre serveur de noms de domaine BIND9 / NAMED
- Debian.org html : fr/Bind9 html
- CGSecurity.org html : Sécuriser un serveur de nom html
- ITpro.fr html : Utiliser TSIG dans BIND html
- DNSSEC par la pratique (tutoriel BIND9/Debian) html
- How To Setup DNSSEC on an Authoritative BIND DNS Server html
Comment installer DNSSEC sur un Authoritative BIND DNS - pour vos zones - pour se protéger contre l'usurpation d'identité de chaque nom de sous-domaine :)
DMARC (Domain-based Message Authentication, Reporting and Conformance)
Je vous ajoute des infos sur DMARC (Message basé sur l'Authentification du Domain avec Rapports de Conformité) pour se protèger contre l'usurpation des emails (at) nos noms de domaines.
- [Zimbra] Les bonnes pratiques pour un serveur mail SPF / DKIM / DMARC - iZero html - (SPF : Sender Policy Framework) / (DKIM : DomainKeys Identified Mail) / (DMARC : Domain-based Message Authentication, Reporting and Conformance) / (rDNS : Reverse Name Domain Server)
- J'ai posté une demande d'analyse des rapports DMARC entre administrateurs systèmes et réseaux sur Debian-FR.org - Un debrief ici : Servers Mails - Reports DMARC (SPF - DKIM) - analyse file XML? html
- Et une page de visualisation HTML des rapports DMARC envoyés à mes noms de domaine, ceux gérés par mon serveur mail : DMARC Rapports * ZW3B.SITE :-: Le Web Site html - avec codes sources PHP - à vos besoins pour votre utilisation personelle.