System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Compilation Installation et Configuration Bind9

Voila un article qui ne vous servira pas tout les jours !

Parce qu'on ne monte pas un serveur Dns tous les 4 matins...

Mais ça peu servir :)

Tout d'abord télécharger la dernière version de bind9 :

Site ici https://www.isc.org/download

La 9.6.1_P3 lors de la rédaction de ce billet.

cd /opt/SOURCES
wget http://ftp.isc.org/isc/bind9/9.6.1-P3/bind-9.6.1-P3.tar.gz

Dés-archivez le :

tar xvzf bind-9.6.1-P3.tar.gz
cd bind-9.6.1-P3
mkdir -p /opt/bind961P3

Pré requis :

Vérifiez bien votre version de Openssl si vous comptez utiliser ssl car il y a eu pas mal de failles et autres farfelades. Il vous faudra la version dev d'Openssl.

Compilation :

./configure --help | more
./configure --prefix=/opt/bind961P3 --enable-openssl-version-check --enable-largefile --with-openssl --disable-openssl-version-check
make
make install

Configuration ou Migration :

cd /opt/
ln -s bind961P3 bind9
cd bind9/etc

Création de l'utilisateur bind9 :

useradd -s /sbin/nologin -d /opt/bind9/var/cache/bind9

Et le tour est joué !

Création de fichier de conf, named.conf pour commencer :

Si c'est votre première installation il vous faudra créer tous les fichiers de configuration :

cd /opt/bind9/etc/
vi named.conf

et copiez y ceci :

// 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 "/opt/bind9/etc/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/opt/bind9/etc/db.root";
};

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

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

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

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

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

// zone "com" { type delegation-only; };
// zone "net" { type delegation-only; };

// From the release notes:
//  Because many of our users are uncomfortable receiving undelegated answers
//  from root or top level domains, other than a few for whom that behaviour
//  has been trusted and expected for quite some length of time, we have now
//  introduced the "root-delegations-only" feature which applies delegation-only
//  logic to all top level domains, and to the root domain.  An exception list
//  should be specified, including "MUSEUM" and "DE", and any other top level
//  domains from whom undelegated responses are expected and trusted.
// root-delegation-only exclude { "DE"; "MUSEUM"; };

include "/opt/bind9/etc/named.conf.local";

zone "domain1.fr" {
  type master;
  notify yes;
  file "/opt/bind9/etc/db.domain1.fr";
  forwarders{};

};

zone "domain2.fr" {
  type master;
  notify yes;
  file "/opt/bind9/etc/db.domain2.fr";
  forwarders{};

};

zone "92.123.xx.in-addr.arpa" {
  type master;
  file "/opt/bind9/etc/db.domain1.fr.inv";
  forwarders{};

};

A modifier à votre sauce biensur.

Fichier d'init pour bind9 :

Un petit script de contrôle ça peut être intéressant :

vi /etc/init.d/bind9

et copiez y ceci :

#!/bin/bash

# chkconfig: 2345 13 87
# description: Dovecot POP/IMAP server.

# source function library
. /etc/rc.d/init.d/functions


prog="named"

case "$1" in
        start)
                echo -n $"Starting $prog: "
                /opt/bind9/sbin/named -u bind9 && success || failure
                echo
                ;;
        stop)
                echo -n $"Stopping $prog: "
                killproc /opt/bind9/sbin/named
                echo
                ;;
        restart)
                $0 stop
                sleep 1
                $0 start
                ;;
   reload)
                echo -n  $"Reloading $prog: "
                /opt/bind9/sbin/rndc -c /opt/bind9/etc/rndc.conf reload > /dev/null && success || failure
                echo
                ;;

        status)
                pidof named
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
                exit 1
                ;;
esac

# Fin $rc_base/init.d/bind

il est biensur à adapter à votre installation.

Si vous en avez un mieux n'hésitez pas à le proposer :)

Lancement et test :

Faite un ptit tail -f sur les log de votre bind9 et lancez le.

tail -f /var/log/named/named.log 
ou
tail -f /var/log/messages

Pour lancer bind9 :

service bind9 start
ou
/opt/bind9/sbin/named -u user-bind

Problème de création de fichier dans var :

Vous rencontrerez sûrement ce souci :

/opt/bind9/etc/named.conf.options:2: change directory to '/opt/bind9/var/cache/bind' failed: file not found

Solution...quelques fichiers à créer et quelques droits à mettre.

cd /opt/bind9/var/
mkdir cache
cd cache 
mkdir bind
cd /opt/bind9/var/run
mkdir named
cd /opt/bind9/var
chown -R user-bind: *

Création du fichier d'option :

cd /opt/bind9/etc/
vi named.conf.options

avec comme contenu :

options {
        directory "/opt/bind9/var/cache/bind";

// cacher sa version de bind9

        version "L'Administrateur vous regarde...";

        // If there is a firewall between you and nameservers you want
        // to talk to, you might need to uncomment the query-source
        // directive below.  Previous versions of BIND always asked
        // questions using port 53, but BIND 8.1 and later use an unprivileged
        // port by default.

        // query-source address * port 53;

        // 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.

// serveurs du fai pour requetes externes

forward first;
forwarders {
        213.186.33.199;
};

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };

        // By default, name servers should only perform recursive domain
        // lookups for their direct clients.  If recursion is left open
        // to the entire Internet, your name server could be used to
        // perform distributed denial of service attacks against other
        // innocent computers.  For more information on DDoS recursion:
        // http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2006-0987

        recursion yes;
        allow-recursion { localhost; 127.0.0.1; 90.11.175.142; 89.25.28.21; 12.6.0.1; };
        allow-query-cache { localhost; 127.0.0.1; 90.11.175.142; 89.25.28.21; 12.6.0.1; };
        dnssec-enable yes;
        additional-from-cache yes;

///si vous avez un ou plusieurs serveurs secondaire

        allow-transfer {
        12.6.0.1;
        89.25.28.21;
        213.186.33.199;

};
        zone-statistics yes;
        statistics-file "/opt/bind9/etc/named.stats";

        // If you have DNS clients on other subnets outside of your
        // server's "localnets", you can explicitly add their networks
        // without opening up your server to the Internet at large:
        // allow-recursion { localnets; 192.168.0.0/24; };

        // If your name server is only listening on 127.0.0.1, consider:
        // allow-recursion { 127.0.0.1; };
};

Créer un fichier zone :

Exemple avec le domaine principal : domaine.fr

Créer le fichier db.domaine.fr de votre domaine principal.

$ORIGIN domain.fr.
$TTL    3600
@        IN SOA srvbind9.domaine.fr. root.domaine.fr.  (
         2010050501   ; Serial
         3600         ; Refresh (1 heure)
         900          ; Retry (15 minutes)
         1209600      ; Expire (2 weeks)
         43200        ; Minimum cache (12 heures)
         )

                IN      NS      srvbind9.domaine.fr.

srvbind9     A       91.12.15.42
mail2          A       89.25.28.21
mail           A       91.12.15.42
dellix         A       82.68.24.90

;** Les lignes suivantes sont des alias entre des noms et des autres noms

;mail            CNAME   srvbind9
;**www           CNAME   zalix
;**webmail       CNAME   zalix
;**ssh           CNAME   zalix

@               A       91.12.15.142

;** ENREGISTREMENTS "MX"

@     IN    MX  10  mail.domaine.fr.
@     IN    MX  20  mail2.domaine.fr.

domaine.fr. TXT "v=spf1 mx ?all"

Création de la zone inverse :

$TTL    604800
@       IN      SOA     srvbind9.domaine.fr. root.domaine.fr.  (
                    2008102801
                        604800
                         86400
                       2419200
                        604800
                                )

                  NS      srvbind9.domaine.fr.
                  NS      ns2.domaine.fr.

42              PTR     srvbind9.domaine.fr.
.

Fichiers standard de configuration :

Toujours dans /opt/bind9/etc/

vi db.0

avec dedans :

cat 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.
vi db.127

avec dedans :

;
; 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
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.
vi db.255

avec dedans :

;
; 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.
vi db.local

avec dedans :

;
; BIND 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
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
vi db.root

avec dedans :

; <<>> DiG 9.2.3 <<>> ns . @a.root-servers.net.
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18944
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      A.ROOT-SERVERS.NET.
.                       518400  IN      NS      B.ROOT-SERVERS.NET.
.                       518400  IN      NS      C.ROOT-SERVERS.NET.
.                       518400  IN      NS      D.ROOT-SERVERS.NET.
.                       518400  IN      NS      E.ROOT-SERVERS.NET.
.                       518400  IN      NS      F.ROOT-SERVERS.NET.
.                       518400  IN      NS      G.ROOT-SERVERS.NET.
.                       518400  IN      NS      H.ROOT-SERVERS.NET.
.                       518400  IN      NS      I.ROOT-SERVERS.NET.
.                       518400  IN      NS      J.ROOT-SERVERS.NET.
.                       518400  IN      NS      K.ROOT-SERVERS.NET.
.                       518400  IN      NS      L.ROOT-SERVERS.NET.
.                       518400  IN      NS      M.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.     3600000 IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     3600000 IN      A       192.228.79.201
C.ROOT-SERVERS.NET.     3600000 IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     3600000 IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     3600000 IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     3600000 IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     3600000 IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     3600000 IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     3600000 IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     3600000 IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     3600000 IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     3600000 IN      A       199.7.83.42
M.ROOT-SERVERS.NET.     3600000 IN      A       202.12.27.33

;; Query time: 81 msec
;; SERVER: 198.41.0.4#53(a.root-servers.net.)
;; WHEN: Sun Feb  1 11:27:14 2004
;; MSG SIZE  rcvd: 436

Ce dernier est a mettre à jour de temps a autre, ça ne doit pas etre trop dur de trouver la liste à jour des serveurs racine avec notre ami google.

Liste complète des options avec explication (pour named.conf et named.conf.options):

http://ftp.isc.org/www/bind/arm95/Bv9ARM.ch06.html

Si vous rencontrez des problèmes en suivant ce howto faites le nous savoir.

Par GanGan | le vendredi, mai 7 2010 07:00

Commentaires

1. Benjamin

vendredi, juin 5 2009 | 08:10

Merci pour cet article, cela me rappelle mes cours :)
Par contre, pourquoi n'utilises-tu pas la version Bind des dépôts ? Il est préférable d'utiliser les dépôt le plus souvent possible ;)

2. GanGan

vendredi, juin 5 2009 | 09:37

je prefere installer les progs comme ça pour mieux comprendre le fonctionnement :)

3. David

vendredi, mai 7 2010 | 14:29

Petite question, certainement de débutant,
Un serveur DNS sur une IP dynamique, c'est possible?

4. GanGan

vendredi, mai 7 2010 | 16:02

A non je crois pas.

5. DisSsha

samedi, mai 8 2010 | 22:54

Avec un DynDNS tu dois pouvoir mon ton ip de service dns sur un ip publique fournie par DynDNS.
En gros, DynDNS met a jour l'ip virtuelle associée au service dns chez toi a chaque notification que tu fais et met ainsi a jour ton ip.

A tester :) Cependant en débutant ça sera peut être chaud. :)

6. GanGan

dimanche, mai 9 2010 | 00:01

j'y pensais mais j'y crois pas !

7. tony

lundi, novembre 15 2010 | 10:56

c'est tout a fait possible, via dyndns...

pour aider dans la config. du dns + virtualhosts, il y a Virtualmin.