Linux:Serveur DNS Bind

De Djjnet
Aller à : Navigation, rechercher

Sommaire

Configuration du serveur BIND

Le fichiers de configuration de bind utilise le symbole ; pour commencer des commentaires dans les fichiers de zones. # est aussi accepté pour le fichier named.conf.
Les interrogations DNS sont insensible à la "case" (majuscules/minuscules).

Fichier de configuration principale /etc/bind/named.conf

options {
       ;directory est le dossier où se situe les fichiers des zones (les définitions des noms de domaines)
       directory "/var/dj-j/named";
       pid-file "/var/run/bind/run/named.pid";
};

Limiter les logs inutiles :

logging {
       category lame-servers{ null; };
};

Définition d'une zone (un domaine) :

zone "dj-j.net" {
       #Il s'agit du DNS principale
       type master;
       #Par convention, un fichier de zone se nomme db.nomdedomaine
       file "master/dj-j/db.dj-j.net";
       #Authoriser les transferts pour les serveurs DNS secondaires :
       allow-transfer {
                       212.180.111.252;
       };
       #Authoriser les requêtes pour tout le monde :
       allow-query {
                       any;
       };
};

Fichier de configuration de la zone (le domaine)

Dans notre exemple le fichier /var/dj-j/named/master/dj-j/db.dj-j.net

Les noms des serveurs doivent terminer par un point si :

  • le domaine n'est pas celui de la zone
  • le domaine de la zone est indiqué

S'il n'y a pas de point, le domaine de la zone sera ajouté à la fin.

;Depuis la version 9 de bind, il est nécessaire de commencer par
$TTL 86400
;Commencer par l'enregistrement du SOA :
dj-j.net.       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
;L'enregistrement SOA de classe IN (Internet) a pour DNS primaire ns.dj-j.net et pour email de la personne en charge du domaine : webmaster@dj-j.net
;Le @ est remplacé par un .
;Puis l'enregistrement des serveurs de noms :
dj-j.net.       IN      NS      ns.dj-j.net.
dj-j.net.       IN      NS      ns0.dj-j.net.
;L'enregistrement des serveurs de mails :
dj-j.net.       IN      MX      10      mx.dj-j.net.
dj-j.net.       IN      MX      20      mx2.itenec.net.
;Plus le chiffre est petit, plus le serveur est prioritaire.
;Dans l'exemple mx2.itenec.net est le serveur secondaire, il relaie les emails du domaine dj-j.net si le serveur mx.dj-j.net est indisponible.
;Il peut avoir pour valeur 0 à 65535. Généralement, les valeurs sont entre 1 et 100.
;Un serveur indiqué en tant que mx doit obligatoirement avoir un enregistrement A, il ne peut être un CNAME.
;Les enregistrements d'adresse et d'alias :
;A pour une adresse et CNAME pour les alias de machines
ns.dj-j.net.      IN      A       82.236.161.216
ns0.dj-j.net.     IN      A       212.180.111.252
mx.dj-j.net.      IN      A       82.236.161.216
sangoku.dj-j.net. IN      A       82.236.161.216
www.dj-j.net.     IN      CNAME   sangoku.dj-j.net.
intranetdj-j.net. IN      CNAME   sangoku.dj-j.net.

TTL spécifique à un sous-domaine

Vous avez par défaut un TTL pour le domaine complet, par exemple 1 jour. Vous souhaitez que le sous-domaine dynamique est un TTL de 5 minutes, vous pouvez le préciser ainsi :

dynamique   300    IN    A    1.1.1.1

Les abreviations pour les fichiers de zones

Le nom de domaine peut ne pas être spécifié lorsqu'il s'agit de celui de la zone en cours, il n'y a alors pas de point à la fin :

sangoku IN      A       82.236.161.216
www     IN      CNAME   sangoku
test     IN      CNAME   www.dj-j.org.

Remarque : Cela n'est pas possible pour un enregistrement de type PTR (pour le reverse DNS)

Utilisation de @ pour remplacer le domaine de la zone :

@       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
@       IN      NS      ns.dj-j.net.
@       IN      NS      ns0.dj-j.net.

Ne pas répérer le dernier nom utilisé :

@       IN      SOA     ns.dj-j.net.    webmaster.dj-j.net.     (
                           2006110701 ; serial
                           43200      ; refresh 12h
                           3600       ; retry 1h
                           604800     ; expire 7d
                           86400)     ; TTL 1d
       IN      NS      ns.dj-j.net.
       IN      NS      ns0.dj-j.net.

Définition d'une zone sur le DNS secondaire

zone "dj-j.net" {
       ;Il s'agit du DNS secondaire
       type slave;
       ;Le fichier n'est pas à créer, le DNS secondaire le transférera depuis le principale. Mais le dossier est à créer.
       file "slave/dj-j/db.dj-j.net";
       ;Indiquer le(s) DNS principale(aux)
       masters {
               82.236.161.216;
       };
};

Valeur de l'enregistrement SOA

  • serial : doit être augmenté à chaque changement de la zone. Il est généralement formé de la date suivi d'un indicatif de modification de la journée.
  • refresh : interval entre chaque mise à jour des DNS secondaires
  • retry : temps après lequel le DNS secondaire retentera une mise à jour s'il n'avait pas réussi à joindre le DNS principale.
  • expire : les données du DNS secondaire sont considérées expirées après ce temps d'indisponibilité du DNS principale. Le DNS secondaire ne répond plus.
  • TTL : période de temps où les autres serveurs DNS garde en cache les réponses fournies.

Les ACL dans bind

Par défaut, les acl disponibles sont :

  • none : aucune IP
  • any : toutes les IPs
  • localhost : IPs de la machine locale
  • localnets : IPs du réseaux de la machine locale.

Définir un acl dans le fichier /etc/bind/named.conf :

acl "internal" {
       {
               192.168.100/24;
               192.168.101/24;
       };
};

Vous pouvez maintenant vous en servir dans les zones ou les options globales :

       allow-query {
                       internal;
       };

Mettre à jour le fichier des serveurs root

Dans cet exemple, notre fichier est /etc/bind/named.ca

Créer un fichier /etc/cron.monthly/updatebindroot et insérer la ligne suivante :

dig @a.root-servers.net  .  ns > /etc/bind/named.ca
/etc/init.d/bind9 reload

Le rendre exécutable :

chmod +x /etc/cron.monthly/updatebindroot 

Le fichier sera mis à jour une fois par mois.

DNSSEC

Terminologie

Définition wikipedia : https://en.wikipedia.org/wiki/List_of_DNS_record_types

DNSKEY 	48 	RFC 4034 	DNS Key record 	The key record used in DNSSEC. Uses the same format as the KEY record.
DS 	43 	RFC 4034 	Delegation signer 	The record used to identify the DNSSEC signing key of a delegated zone
NSEC 	47 	RFC 4034 	Next Secure record 	Part of DNSSEC—used to prove a name does not exist. Uses the same format as the (obsolete) NXT record.
RRSIG 	46 	RFC 4034 	DNSSEC signature 	Signature for a DNSSEC-secured record set. Uses the same format as the SIG record.

Resolver

  • Recursive servers, dnssec validation :

Pour bind, version >= 9.9 :

options {
    dnssec-validation auto;
};

Bind utilise alors /etc/bind/bind.keys qui contient les clefs de confiance, dont celle de la zone racine ".".

La "trusted public key" associé à un nom dns est la "trust anchor".

dnssec-validation à yes indique la configuration manuelle du fichier contenant les "trust anchor" (déconseillé).

dnssec-enable doit être à yes (valeur par défaut) pour que dnssec soit activé.


  • Validation avec dig, le résultat présente dans les flags des headers : ad (Authenticated Data) et dans les flags do (DNSSEC OK) :
dig @192.168.100.4 www.isc.org. A +dnssec +multiline

; <<>> DiG 9.11.0 <<>> @192.168.100.4 www.isc.org. A +dnssec +multiline
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22937
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;www.isc.org.		IN A

;; ANSWER SECTION:
www.isc.org.		29 IN A	149.20.64.69
www.isc.org.		29 IN RRSIG A 5 3 60 (
				20161116233321 20161017233321 13953 isc.org.
				AyDUIQPndFh53G9xLALteEa5FOh8RoUdCE68zmclxSJ5
				UiPiXjPanh0qb/mE4tvXa4YjAEKQ3BVlqLx4cpEc97sj
				TnL72gPKV/UnP5Y2+aTxx8l7bz7l0w3LI6aE8EN+qLlg
				aIAUBn2mdyx0mT1nDOy3SP7tCsYtw/52L2oDARw= )

  • Validation avec delv (Domain Entity Lookup & Validation si bind 9.10 et supérieur)

L'option +rtrace montre bien la chaine de validation DNSSEC :

delv @192.168.1.254 www.isc.org. A +rtrace +multiline
;; fetch: www.isc.org/A
;; fetch: isc.org/DNSKEY
;; fetch: isc.org/DS
;; fetch: org/DNSKEY
;; fetch: org/DS
;; fetch: ./DNSKEY
; fully validated
www.isc.org.		11 IN A	149.20.64.69
www.isc.org.		11 IN RRSIG A 5 3 60 (
				20161116233321 20161017233321 13953 isc.org.
				AyDUIQPndFh53G9xLALteEa5FOh8RoUdCE68zmclxSJ5
				UiPiXjPanh0qb/mE4tvXa4YjAEKQ3BVlqLx4cpEc97sj
				TnL72gPKV/UnP5Y2+aTxx8l7bz7l0w3LI6aE8EN+qLlg
				aIAUBn2mdyx0mT1nDOy3SP7tCsYtw/52L2oDARw= )
  • Vérifier qu'un problème est bien détecté avec www.dnssec-failed.org et avoir un SERVFAIL :
dig @192.168.100.4 www.dnssec-failed.org. A

; <<>> DiG 9.11.0 <<>> @192.168.100.4 www.dnssec-failed.org. A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 40752
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.dnssec-failed.org.		IN	A
  • Si vous avez un SERVFAIL, essayez d'ajouter l'option +cd à dig pour désactiver dnssec. Ainsi, vous vérifiez si le problème vient de dnssec ou autre chose :

On voit maintenant NOERROR et le flag cd :

dig www.dnssec-failed.org. A +cd

; <<>> DiG 9.11.0 <<>> www.dnssec-failed.org. A +cd
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51615
;; flags: qr rd ra cd; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 11

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.dnssec-failed.org.		IN	A

;; ANSWER SECTION:
www.dnssec-failed.org.	4200	IN	A	68.87.109.242
www.dnssec-failed.org.	4200	IN	A	69.252.193.191
  • En cas de problème, vérifier aussi que EDNS est bien actif et que tcp est autorisé sur les fw. :
; EDNS: version: 0, flags: do; udp: 4096