Bind

De DiouxX's Wiki
Aller à : navigation, rechercher


Arborescence de bind

├── bin
├── etc
│   ├── bind.keys
│   ├── named.conf
│   ├── named.conf.local
│   ├── named.conf.options
│   ├── rndc.conf
│   └── rndc.key
├── include
│   ├── bind9
│   ├── dns
│   ├── dst
│   ├── isc
│   ├── isccc
│   ├── isccfg
│   └── lwres
├── lib
├── named
├── opt
│   └── bind
│       ├── run
│       └── var
│           └── run
│               └── named
├── sbin
├── share
└── var
    ├── cache
    │   └── bind
    ├── run
    │   ├── named
    │   └── named.pid
    └── zones
        ├── db.0.168.192.in-addr.arpa
        ├── db.100.168.192.in-addr.arpa
        ├── db.10.168.192.in-addr.arpa
        ├── db.1.168.192.in-addr.arpa
        ├── db.168.168.192.in-addr.arpa
        ├── db.5.168.192.in-addr.arpa
        ├── db.6.168.192.in-addr.arpa
        ├── db.7.168.192.in-addr.arpa
        ├── db.8.168.192.in-addr.arpa
        ├── db.9.168.192.in-addr.arpa
        ├── db.admin.pass.be
        ├── db.expo.pass.be
        ├── db.labo.pass.be
        ├── db.pass.be
        └── db.server.pass.be


BIND 9 en Maître

Installation d'un serveur bind sur Debian.
Prérequis installation de OS Debian de façon PASS et configuration service réseaux.
Caractéristique de la machine:
Serveur: DELL Poweredge 745
Processeur Intel(R) Xeon(TM) CPU 3.20GHz
RAM : 2 Go
2 Carte réseaux Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 11)
eth0 192.168.168.130 (requête serveur/serveur)
eth1 192.168.1.18 (requête client/serveur).
Assurer que les outils de compilation sont bien installer
Avoir les accès root est indispensable.
Pour debian apt-get update et apt-get install build-essential vous permet de les installer.

Phases

  1. Compilation des sources Bind
  2. Configuration global du serveur
  3. Création des Zones et Zones-Reverse
  4. Mise des zones de l'ancien serveur sur le nouveau
  5. Démarrage du service Bind
  6. Sécuriser le serveur Bind
  7. Activation des log
  8. Commande d'administration
  9. Troubleshooting
  10. Backup/Restore

Compilation des sources Bind et installation

Acquisition de source sur le site officiel www.isc.org (la version actuelle)

Konsole.png


Décompression de l'archive de un dossier temporaire.


Konsole.png
[root@ordi ~]# tar xvzf bind-9.9.1.tar.gz && cd bind-9.9.1


A la racine de dossier désarchiver faire configure -h pour lister toute les options de configuration préinstallation

Konsole.png
[root@ordi ~]# ./configure -h


Configuration de package dans de le répertoire /opt/bind/ différent des chemins par défaut. L'avantage est que l'installation est propre et l'application sera plus sécurisé (la sécurité du service sera abordée plus loin).

Konsole.png
[root@ordi ~]# ./configure --prefix=/opt/bind


Si l'erreur suivante est affiché lors de la configuration :

checking for OpenSSL library... configure: error: OpenSSL was not found in any of /usr /usr/local /usr/local/ssl /usr/pkg /usr/sfw; use --with-openssl=/path
If you don't want OpenSSL, use --without-openssl


Il faut installer les librairies SSL

Konsole.png
[root@ordi ~]# apt-get install libssl-dev


Compilation proprement dite

Konsole.png
[root@ordi ~]# make


Installation du package dans le dossier /opt/bind

Konsole.png
[root@ordi ~]# make install


BlocNotes.png
À noter !
Afin de pouvoir avoir de l'aisance dans les commandes rajouter de la profile utilisateur le chemin de binaire
éditer le fichier profile et rajouter /opt/bind/bin pour l'utilisateur et /opt/bind/bin:/opt/bind/sbin pour root. Utiliser la commande source /etc/profile pour appliquer les changements

Configuration global du serveur

le service bind pour fonctionner n'a besoin que du fichier config named.conf qui se trouve dans /opt/bind/etc Par soucis de clarté. il sera segment en plusieurs fichier. explique si dessous:

#Fichier de configuration Global de bind

include "/opt/bind/etc/named.conf.options"; # Fichier des options de bind
include "/opt/bind/etc/rndc.key"; # Clef de sécuristion outil de managment

controls {                                                                      #
           inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key1"; } ; # ACL Restriction au IP du domaine d'administration
};                                                                              #    Commande RNDC


BlocNotes.png
À noter !

il est possible de tester la configuration du service à tout moment en lançant manuellement le service named et vérifie les logs /var/log/syslog

pour tuer le processus entre chaque teste utiliser pkill namaed


Les options du serveur proprement dit seront dans le fichier /opt/bind/etc/named.conf.options qui est appelé dans fichier named.conf

 
options {
          directory "/opt/bind/named"; # Répertoire ou se trouve le fichier n'est pas FQDN
          pid-file "/opt/bind/var/run/named.pid"; # indique le pid nécessaire pour lancer le service en utilisateur
          listen-on { 192.168.1.18; 127.0.0.1; }; # restriction des adresse IP sur lesquelles le serveur écoute.
          allow-query { 127.0.0.1; };   # restriction des adresse pouvant joindre le serveur.
};

Les service doit administrable, rndc permet de lancer des commande d'administration sur le serveur.
Ce service d'administration est lance lors de démarrage de processus named.
Afin de faire fonctionner le service bind et l'administration en toute sécurité, il faut configurer rndc à l'aide fichier du rndc.conf et créer une clef de partage entre les deux service dans le fichier rndc.key.
Tout les fichier de configuration se trouvent dans le le dossier /opt/bind/etc éditer le fichier rndc.conf et y ajouter le options suivante :

 
include "/opt/bind/etc/rndc.key"; # la Clef partager par named et rndc

options {
         default-key "rndc-key1"; # le clef par defaut car rndc peut adminitré plusieurs serveur donc plusieur clef
         default-server 127.0.0.1; # l'adresse au service est joignable
         default-port 953; # le port sur lequel il écoute.
};

Ensuite, au lieu d'intégrer dans chaque fichier configuration une section key. Celle-ci est externalisé dans un fichier rndc.key et appelé dans les fichier de configuration par un include. En éditant le fichier voici la syntaxe :

 
key "rndc-key1" {
                algorithm hmac-md5;
                secret "password";
};


Warning.png
Attention !

Le format du secret est spécifique : il s'agit d'une séquence de bits aléatoire encodée en base 64 bits.
Cela signifie que toute chaine de caractère d'une longueur égal à un multiple de 4 est admissible.

password est un mot de 8 caractère il est donc acceptable mais pas assez long pour assurer la sécurité.


Création des Zones et Zones-Reverse

Cette partie se décline en plusieurs phase

  • Création du fichier named.conf.local
  • Déclaration des zone dans le named.conf.local
  • Création des fichiers des zones et zones reverse

Création du fichier named.conf.local

Afin d'éviter les fautes de manipulation le named.conf. celui-ci sera en une 3ème partie.

Konsole.png
[root@ordi ~]# touch /opt/bind/etc/named.conf.local


éditer le fichier named.conf y ajouter un include le chemin

include "/opt/bind/etc/named.conf.local"; # Fichier des déclarotions des zones local

Le fichier named.conf.local servira à déclarer toutes les zones locale.

Voici un exemple de déclaration zone et de zone reverse

zone "admin.pass.be" {     # déclaration de zone entre {} 
type master;               # Type de zone 
file "/opt/bind/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
notify yes; # active la notification de la zone
};

zone "1.168.192.in-addr.arpa" { # déclaration de zone entre {} inverse
type master; # Type de zone
file "/opt/bind/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
notify yes;  # active la notification de la zone
};

La zone mappera le host se trouvant dans le domaine admin.pass.be à une adresse IP.

La zone inverse mappera l'adresse ip sur le host appartement à la zone.

Création du fichier des fichier de backend (Fichier de stockage de zone)

Le données dont ce sert le serveur bind pour répondre de trouve dans un fichier texte avec une syntaxe propre lui.

Warning.png
Attention !

Si la syntaxe n'est pas respecté sur une zone elle ne sera pas chargée au démarrage du service

le serveur ne saura donc pas répondre aux requêtes pour cette zone mais fonctionnera pour toute les autres

Voici un exemple de zone

 
$ORIGIN .
$TTL 604800     ; 1 week
admin.pass.be.           IN SOA  debnet. support_it.pass.be. (
                                2007074329 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      debnet.admin.pass.be.


Dans la partie si dessus c'est le déclaration de zone proprement dite.

admin.pass.be = zone.
IN = Classe. IN pour internet. il peut être omis car c'est une valeur par defaut
SOA = start of authority suivi nom du serveur autoritaire et le mail entre () ce sont les paramètres de la zone.
NS = nom du serveur authorité.

$ORIGIN admin.pass.be.
$TTL 300        ; 5 minutes
wiki                    A       192.168.100.39
1mc3q0j-6b0961d         A       192.168.1.131

Cette partie du fichier concerne la déclaration les host.
$ORIGIN = mot réserver permettant la simplification de déclaration en substituant la nom domaine. grace a cette variable pas besoin noter fqdn juste le nom host suffit

A = la déclaration host dans l'ordre nom host A adresse IP CNAME = pour L'alias permet de faire pointer sur nom sur autre pour la même adresse ip. AAAA = même chose que A pour IPV6

Voici un exemple de zone inverse

 
$ORIGIN .
$TTL 604800     ; 1 week
1.168.192.in-addr.arpa  IN SOA  debnet.admin.pass.be. root.admin.pass.be. (
                                2007074505 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      debnet.admin.pass.be.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 300        ; 5 minutes
10                      PTR     IRECSERVER.irecpass.local.

C'est le même principe que la déclaration zone sauf pour le déclaration host inverse PTR = Mapping inverse.

démarrage de service Bind

Le démarrage du service bind se fait partir du binaire named se trouvant de /opt/bind/sbin/named

Konsole.png
[root@ordi ~]# named

Cette commande simple de permet pas de débugger permet simplement à lancer service.
A ce stade, le seul moyen de vérifier que le service est démarré. C'est de vérifier dans les processus (top,ps,netstat) ou dans le syslog
La partie troubleshooting sera explicitée plus bas. Le service bind peut démarrer avec un autre utilisateur et emprisonné. Pour des raisons de stratégie sécurité nous opterons pour cette méthode ceci sera expliquer dans le prochain point.

Création du script démarrage

Voici un copier/coller du scripte de démarrage

#!/bin/bash
#
# BIND Script writing By Maxime Daniel 29/05/2012
#
RETVAL=0
prog="Bind"

start () {    # Start Daemons.
	      echo -n $"Starting $prog: "
	      /opt/bind/sbin/named 
	      RETVAL=$?
	      [ $RETVAL -eq 0 ] && touch /var/lock/bind
	      echo OK
	      return $RETVAL
	}
	
stop () {    # Stop Daemons.
	     echo -n $"Stopping $prog: "
	     kill `cat /opt/bind/var/run/named.pid`
	     RETVAL=$?
	     [ $RETVAL -eq 0 ] && rm -f /var/lock/bind	 
	}
	
restart () {
	     stop
	     start
        }
	
case "$1" in 
		start)
			start
			;;
		stop)
			stop
			;;
		restart)
			restart
			;;
		*)
		       echo $"Usage: $0 {start|stop|restart}"
esac
exit $?

Le but de cette page n'est pas de faire un cours de scripting pour les explications le code cfg ton ami le net.
Ce script nommé bind (très orignal comme nom ) sera placer dans dossier /etc/init.d/ et sera lancer au démarrage du serveur. cfg démarrage des service de Debian (ça sera utile).
Pour démarrer et arrêter manuellement le script

Konsole.png
[root@ordi ~]# /etc/init.d/bind start
Konsole.png
[root@ordi ~]# /etc/init.d/bind stop

Sécuriser le serveur Bind

Plusieurs choses sont envisage pour sécuriser le service.

  • Faire tourner bind avec un utilisateur propre et sans de session.
  • Mettre le droite sur le fichier configuration.
  • Emprisonner bind dans une aborescence propre au service (pas par defaut) et chrooter eau demarrage.
  • Création de acl propre au réseaux du Pass

Faire tourner bind avec un utilisateur propre et sans de session.

Création de user bind sans environnement shell

Konsole.png
[root@ordi ~]# addgroup bind


Création du groupe bind

Konsole.png
[root@ordi ~]# useradd -g bind -d /opt/bind/var/cache/bind -s /usr/sbin/nologin bind


Création du user bind. Son home pointant vers /opt/bind/var/cache/bind et pas de shell donc /usr/sbin/nologin

BlocNotes.png
À noter !
Penser à créer le dossier /opt/bind/var/cache/bind s'il n'existe pas déja


Lancer bind avec son utilisateur

Changer le propriétaire du dossier /opt/bind pour qu'il appartienne à bind :

Konsole.png
[root@ordi ~]# chown -R bind:bind /opt/bind


Konsole.png
[root@ordi ~]# named -u bind


BlocNotes.png
À noter !
Ne pas oublier de modifier le script de démarrage


Mettre le droite sur le fichier configuration.

Konsole.png
[root@ordi ~]# cd /opt/bind/ && chown -R bind:bind {var,named,opt}

se placer dans le dossier et changer l'utilisateur:groupe sur les dossiers de l'arborescence.

Emprisonner bind dans une aborescence propre au service (pas par defaut) et chrooter eau demarrage.

Avant de pouvoir chrooter le service bind, il est nécessaire de créer un dossier /opt/bind/dev qui contiendra deux fichiers spéciaux : null et random

├── dev
│   ├── null
│   └── random

Pour créer les deux fichier spéciaux, il faut utiliser les commandes suivantes

Konsole.png
[root@ordi ~]# mknod /opt/bind/dev/null c 1 3
[root@ordi ~]# mknod /opt/bind/dev/random c 1 8


Il ne faut pas oublier de changer l'utilisateur et d'appliquer les droits appropriés aux nouveaux fichiers

Konsole.png
[root@ordi ~]# chmod 666 /opt/bind/dev/* && chown -R bind:bind /opt/bind/dev


Le but est faire tourner le processus dans une arborescence restreinte. Le service n'a que les fichiers, librairies, exécutables, ... dont il a besoin.

Konsole.png
[root@ordi ~]# named -u bind -t /opt/bind/ -c /etc/named.conf

L'extension -t permet de placer l'utilisateur dans un sous-arborescence du système.
Il n'a pas conscience du reste l'arborescence système.
En cas de piratage les dégâts seront moins important et se limiterons au service bind.

Warning.png
Attention !
Dans tous les fichiers de configurations, le chemin absolue pointant vers les fichierx se trouvant dans l'arborescence doivent être modifiés.

BlocNotes.png
À noter !
Ne pas oublier de modifier le script de démarrage

Création de acl propre au réseau du Pass

Les acls servent à autoriser le serveur à répondre au station qu'il sont autorisé voir dans le fichier de configuration.
Dans le fichier /opt/bind/etc/named.conf ajouter déclaration acl

#Fichier de configuration Global de bind

acl interne { 127.0.0.0/8; 192.168.1.0/24; };    <------ Acl interne rajout de réseau interne


include "/etc/named.conf.options"; # Fichier des options de bind
include "/etc/rndc.key"; # Clef de sécuristion outil de managment

controls {									#
	   inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key1"; } ; # ACL Restriction au IP du domaine d'administration
};										#    Commande RNDC	

include "/etc/named.conf.local"; # Fichier des déclarotions des zones local


On implémente dans dans le fichier /opt/bind/etc/named.conf.options

          // Ecouter sur les interfaces locales uniquement (IPV4)
          listen-on-v6 { none; };
          listen-on { 192.168.1.18; 127.0.0.1; }; # restriction des adresse IP sur lesquelles le serveur écoute.
          // Ne pas transférer les informations de zones aux DNS secondaires
          allow-transfer { none; };
          // Accepter les requêtes pour le réseau interne uniquement
          allow-query { interne; };
          // Autoriser les requêtes récursives pour les hôtes locaux
          allow-recursion { interne; };
          // Ne pas rendre publique la version de BIND
          version none;

Activation des log

Création du fichier de log named.conf.log

logging {
        channel update_debug {
                file "/var/log/update_debug.log" versions 3 size 100k;
                severity debug;
                print-severity  yes;
                print-time      yes;
        };
        channel security_info {
                file "/var/log/security_info.log" versions 1 size 100k;
                severity info;
                print-severity  yes;
                print-time      yes;
        };
        channel bind_log {
                file "/var/log/bind.log" versions 3 size 1m;
                severity info;
                print-category  yes;
                print-severity  yes;
                print-time      yes;
        };

        category default { bind_log; };
        category lame-servers { null; };
        category update { update_debug; };
        category update-security { update_debug; };
        category security { security_info; };
};

En gros dans /var/log/syslog comprend le démarrage de bind.

Dans le dossier /opt/bind/var/log/ ce trouve 3 fichier de log contenant les log de fonctionnement de bind (exemple chargement des zones, update, ... ).


BlocNotes.png
À noter !
il faut inclure le fichier de configuration dans named.conf.local pour que les soit pris en compte

Activation du DNS forwarders

L'option dns forwarders permet au serveur DNS de transférer la requête vers un autre serveur s'il n'arrive pas à la résoudre. Pour ce faire, il faut rajouter les options suivantes au fichier /opt/bind/etc/named.conf  :

forwarders {10.0.0.1; 10.0.0.2;};
forward only;


Il suffit de remplacer la/les ip de l'option forwarders par la/les ip correspondante aux autres serveurs DNS du réseaux.

Commande d'administration

Troubleshooting

Mode Master - Slave

Il est possible d'avoir un deuxième serveur DNS qui sera considéré comme Slave. Le serveur DNS Master copiera les zones spécifié (généralement toutes les zones) vers le DNS Slave, grâce à cela, si le Master viendrait à rencontré un problème l'empêchant de répondre aux requêtes, c'est le serveur Slave qui pourra reprendre le relais.

Configuration du serveur Master

Pour utiliser une architecture Master-Slave au point de vue DNS, il est nécessaire d'apporter des modifications au serveur Master.

Fichier named.conf.options

Le fichier named.conf.options doit ressembler à ceci

options {
          directory "/var/cache/bind/"; # Répertoire ou se trouve le fichier n'est pas FQDN
          pid-file "/var/run/named.pid"; # indique le pid nécessaire pour lancer le service en utilisateur
          forward only;
          forwarders { 192.168.1.210; };
          auth-nxdomain no;    # conform to RFC1035
          // Ecouter sur les interfaces locales uniquement (IPV4)
          listen-on-v6 { none; };
          listen-on { 192.168.1.18; 127.0.0.1; }; # restriction des adresse IP sur lesquelles le serveur écoute.
          // Ne pas transférer les informations de zones aux DNS secondaires
          allow-transfer { 192.168.100.18; };
          // Accepter les requêtes pour le réseau interne uniquement
          allow-query { 192.168.1.0/24; 127.0.0.1; 192.168.100.0/24; };
          // Autoriser les requêtes récursives pour les hôtes locaux
          allow-recursion { 192.168.1.0/24; 127.0.0.1; 192.168.100.0/24; };
          // Ne pas rendre publique la version de BIND
          version none;
};
  • allow-transfer : Permet de transférer les zones, précisé dans le fichier named.conf.local , au serveur Slave spécifié par l'adresse IP.
  • allow-query : Autorise la réponse aux requêtes venant des réseaux spécifié. Nécessaire si le serveur Slave ne fais pas partie du même réseau que le serveur Master
  • allow-recursion : Autorise les requêtes récursives venant des réseaux spécifié. Nécessaire si le serveur Slave ne fais pas partie du même réseau que le serveur Master

Fichier named.conf.local

Le fichier named.conf.local va permettre de préciser quelles zones ont désiré transférer et à quelles serveurs. Si on veux qu'une zone soit transféré à un autre serveur, elle doit ressembler à ceci :

zone "admin.pass.be" {     # déclaration de zone entre {}
        type master;               # Type de zone
        #file "/opt/bind/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        file "/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        notify yes; # active la notification de la zone
        allow-transfer { 192.168.100.18; };
};

zone "1.168.192.in-addr.arpa" { # déclaration de zone entre {} inverse
        type master; # Type de zone
        #file "/opt/bind/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        file "/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        notify yes;  # active la notification de la zone
        allow-transfer { 192.168.100.18; };
};


BlocNotes.png
À noter !
Opération a répéter pour chaque zone que l'on souhaite transférer ainsi que pour les zones reverse correspondantes


Serveur Slave

Installation

Au point de vue de l'installation, un serveur DNS Slave s'installe de la même manière qu'un serveur DNS "traditionnelle", tout se passe au niveau de la configuration pour que le serveur se voit assigné le rôle de Slave.

Fichier named.conf.options

Le fichier /opt/bind/etc/named.conf.options doit ressembler à ceci :

#Avec chroot
options {
          directory "/named"; # Répertoire ou se trouve le fichier n'est pas FQDN
          pid-file "/var/run/named.pid"; # indique le pid nécessaire pour lancer le service en utilisateur
          #Ne pas transférer les informations de zones aux DNS secondaires
          listen-on-v6 { none; };
          listen-on { 192.168.100.18; 127.0.0.1; }; # restriction des adresse IP sur lesquelles le serveur écoute.
          allow-query { 192.168.1.0/24; 192.168.100.0/24; 127.0.0.1; };   # restriction des adresse pouvant joindre le serveur.
          // Autoriser les requêtes récursives pour les hôtes locaux
          allow-recursion { 192.168.1.0/24; 192.168.100.0/24; 127.0.0.1; };
          //Autoriser l'envoi de notification au serveur maitre
          allow-notify { 192.168.1.18; };
          // Ne pas rendre publique la version de BIND
          version none;
          #forwarders {192.168.1.18;};
          #forward only;
};
  • allow-notify : Permet d'envoyer des notifications au serveur maître et ainsi éviter des messages d'erreur dans les logs

Fichier named.conf.local

Le fichier /opt/bind/etc/named.conf.local va nous permettre de préciser pour quelles zones notre serveur est de type slave et préciser le serveur master de cette zone

zone "admin.pass.be" {     # déclaration de zone entre {}
        type slave;               # Type de zone
        #file "/opt/bind/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        file "/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        masters { 192.168.1.18; };
        notify yes; # active la notification de la zone
};

zone "1.168.192.in-addr.arpa" { # déclaration de zone entre {} inverse
        type slave; # Type de zone
        #file "/opt/bind/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        file "/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        masters { 192.168.1.18; };
        notify yes;  # active la notification de la zone
};

Les options importantes pour notre serveur slave sont

  • type : qui précise le type de notre serveur pour cette zone ( master ou slave)
  • master {} : indique qu'elle est le ou les serveurs maitres de cette zone.


DNS Dynamique

Le système de DNS dynamique permet de mettre à jour les zones DNS via le DHCP

Configuration DNS

Il est nécessaire de réaliser quelques modifications sur le serveur DNS afin de permettre au serveur DHCP d'appliquer des mises a jour

Fichier named.conf

Dans le fichier named.conf , il est nécessaire d'ajouter la ligne suivante :

include "/etc/rndc.key"; # Clef de sécuristion outil de managment

server 192.168.100.11 {
        keys { rndc-key1 ;};
};
  • include "/etc/rndc.key" : est le fichier contenant la clé
  • server 192.168.100.11 : est l'adresse IP du serveur DHCP. 127.0.0.1 si le serveur DHCP est sur la même machine que le serveur DNS

Au final, le fichier named.conf devrait ressembler à ceci :

#Fichier de configuration Global de bind

acl interne { 127.0.0.0/8; 192.168.1.0/24; 192.168.100.0/24; };


include "/etc/named.conf.options"; # Fichier des options de bind
include "/etc/rndc.key"; # Clef de sécuristion outil de managment

server 192.168.100.11 {
        keys { rndc-key1 ;};
};


controls {                                                                      #
           inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key1"; } ; # ACL Restriction au IP du domaine d'administration
};                                                                              #    Commande RNDC

include "/etc/named.conf.local"; # Fichier des déclarations des zones local


Warning.png
Attention !
Il faut bien faire attention aux réseaux qui sont renseigné dans le fichier


Fichier named.conf.local

Le fichier named.conf.local est le fichier qui reprend toutes les zones de notre serveur DNS, il est donc nécessaire de spécifier qu'elles zones notre serveur DNS autorise de mettre à jour via notre serveur DHCP. Pour ce faire, il faut rajouter aux zones désiré l'option allow-update:

allow-update { key rndc-key1; }


BlocNotes.png
À noter !
rndc-key1 est le nom de la clé contenu dans le fichier rndc.key qui est inclus grâce à l'option include dans le fichier named.conf


Pour exemple, la définition d'une zone peut ressembler à ceci :

zone "admin.pass.be" {     # déclaration de zone entre {}
        type master;               # Type de zone
        #file "/opt/bind/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        file "/var/zones/db.admin.pass.be"; # Création de fichier zone (Backend)
        notify yes; # active la notification de la zone
        allow-transfer { 192.168.1.25; 192.168.100.11; 192.168.100.1; };
        allow-update { key rndc-key1; };
};

zone "1.168.192.in-addr.arpa" { # déclaration de zone entre {} inverse
        type master; # Type de zone
        #file "/opt/bind/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        file "/var/zones/db.1.168.192.in-addr.arpa"; # Création de fichier zone (Backend)
        notify yes;  # active la notification de la zone
        allow-transfer { 192.168.1.25; 192.168.100.11; 192.168.100.1; };
        allow-update { key rndc-key1; };
};

zone "100.168.192.in-addr.arpa" {
        type master;
        #file "/opt/bind/var/zones/db.100.168.192.in-addr.arpa";
        file "/var/zones/db.100.168.192.in-addr.arpa";
        notify yes;
        allow-transfer { 192.168.1.25; 192.168.100.11; 192.168.100.1; };
        allow-update { key rndc-key1; };
};


Configuration DHCP

Le fichier de configuration dhcpd.conf doit être adapté afin d'envoyer des requêtes de mise à jour de zones au serveur DNS.

Avant toute chose, il faut transférer le fichier rndc.key sur le serveur DHCP et le renseigné au serveur via la clause include :

include "/opt/dhcp/etc/rndc.key";


Concernant la mise à jour du DNS proprement dite, il faut rajouter en paramètre globale ( avant la première définition de subnet ) ceci :

ddns-update-style interim;
ddns-updates on;
allow client-updates;


Warning.png
Attention !
la clause option domain-name-servers doit correspondre à l'IP de votre ou vos serveurs DNS
Exemple : option domain-name-servers 192.168.1.18, 192.168.1.25;
192.168.1.18 = DNS Master
192.168.1.25 = DNS Slave


Maintenant, on peux passer à la configuration des subnets en spécifiant :

  • ddns-domainname "admin.pass.be"; : précise la zone DNS à mettre à jour
  • ddns-rev-domainname "in-addr.arpa"; : spécifie la zone reverse à mettre à jour


BlocNotes.png
À noter !
Les zones déclarées avec les paramètres ci-dessus doivent au préalable existé sur le serveur DNS


Il faut également rajouter le serveur responsable des zones renseigné. Pour ce faire, on utilise les paramètres suivants :

zone 1.168.192.in-addr.arpa. {
              primary 192.168.1.18;
              key rndc-key1;
}
zone admin.pass.be. {
              primary 192.168.1.18;
              key rndc-key1;
}


  • primary 192.168.1.18 : indique l'adresse IP du serveur responsable de la zone
  • key rndc-key1 : spécifie la clé à utiliser pour signer les échanges de MAJ des zones. Cette clé est spécifié dans le fichier précisé avec le paramètre include
Exemple de déclaration de subnet
subnet 192.168.1.0 netmask 255.255.255.0 {
        pool{
#            failover peer "dhcp_failover";
             deny dynamic bootp clients;
             range 192.168.1.50 192.168.1.200;
             option domain-name "admin.pass.be";
             option routers 192.168.1.1;
             option broadcast-address 192.168.1.255;
             #option option netbios-name-servers 192.168.1.24;
             ddns-domainname "admin.pass.be";
             ddns-rev-domainname "in-addr.arpa";
             deny unknown-clients;
             zone 1.168.192.in-addr.arpa. {
                        primary 192.168.1.18;
                        key rndc-key1;
             }
             zone admin.pass.be. {
                        primary 192.168.1.18;
                        key rndc-key1;
             }

              host ubuntuweb1 { hardware ethernet 00:0C:29:11:8C:82; fixed-address 192.168.1.2; }
}


Backup/Restore

Backup

Pour sauvegarder notre serveur, nous pouvons utiliser un script bash.

Fonctionnement

Script

#!/bin/sh
#Script pour réaliser un backup du service DNS
#Susceptible d'etre ajouter dans une tache cron

# Auteur : Devleeschauwer Denis
# Date : Juin 2012

#Variables
DIRECTORY_BIND=/opt/bind

DATE=`date +"%d%m%Y"`
NAME_FILE=dns_slave-$DATE.tar.bz2

DESTINATION_BACKUP=/mnt/backup_server/backup_dns/Dns_Slave/

#Recuperation du nom de l'ancien backup
OLD_FILE=$(ssh root@192.168.1.7 ls /mnt/backup_server/backup_dns/Dns_Slave/dns_slave*)
#echo "\nOLD FILE : $OLD_FILE"

#Creation de l'archive
cp -R $DIRECTORY_BIND /tmp/
cd /tmp
tar -cjf $NAME_FILE bind/

#Copie du nouveau Backup sur le serveur distant
scp $NAME_FILE root@192.168.1.7:$DESTINATION_BACKUP

#Suppression du backup local et distant
ssh root@192.168.1.7 rm -f $OLD_FILE

rm -Rf bind/

rm -f $NAME_FILE


Restore

Pour restaurer le serveur DNS, il faut récupérer l'archive de backup qui se trouve sur le serveur 192.168.1.7 :

  • /mnt/backup_server/backup_dns/Dns_Master/dns_master-*******.tar.bz2 pour le DNS Master
  • /mnt/backup_server/backup_dns/Dns_Slave/dns_slave-*******.tar.bz2 pour le DNS Slave

et la transférer sur le serveur DNS à restaurer :

Konsole.png
[root@ordi ~]# scp dns_master-********.tar.bz2 root@192.168.1.18:/opt


BlocNotes.png
À noter !
On suppose qu'on se trouve dans le dossier contenant le backup afin de réaliser le transfert


Une fois l'archive rapatrié sur le serveur à restaurer, il ne reste plus qu'a désarchiver l'archive et de changer son propriétaire

Konsole.png
[root@ordi ~]# cd /opt && tar -cjvf dns_master-*******.tar.bz2
[root@ordi ~]# chown -R bind:bind bind/


Quand cela est réalisé, on peux (re)lancer le service bind via le script /etc/init.d/bind

Konsole.png
[user@ordi ~]$ /etc/init.d/bind start


Pour s'assurer que le service bind soit correctement lancé, on peux vérifier que le process tourne :

ps -ef | grep named
bind     20688     1  0 10:41 ?        00:00:00 /opt/bind/sbin/named -u bind -t /opt/bind/ -c /etc/named.conf
root     20801 20483  0 11:00 pts/0    00:00:00 grep named


Si ce n'est pas le cas, regarder dans le fichier de log la ou les erreurs qui y sont précisé

Konsole.png
[user@ordi ~]$ tail -f /var/log/syslog


--Ddevleeschauwer 18 juin 2012 à 16:16 (CEST)