DNS Dynamique BIND DHCP – Ubuntu 14.04 Trusty

Installation

  • Confectionner un serveur DHCP avec DNS dynamique :

apt-get install bind9 dhcp3-server -y

Paramétrage du système

  • Paramétrer les fichiers /etc/hosts et /etc/hostname :

sed -i "s/${HOSTNAME}/ns1/g" /etc/host{s,name}
vi /etc/hosts

127.0.0.1	localhost
192.168.1.1	ns1.test.lan	ns1

/etc/network/interfaces

  • Paramétrage de l'interface eth0 :

vi /etc/network/interfaces

auto eth0
iface eth0 inet static
        address         192.168.1.1
        netmask         255.255.255.0
        broadcast       192.168.1.255
        gateway         192.168.1.254
        dns-nameservers 192.168.1.1 192.168.1.2
        dns-search      test.lan
        dns-domain      test.lan

  • On redémarre l'interface :

ifdown eth0 && ifup eth0

BIND

/etc/bind/named.conf

  • Ajouter le fichier de configuration pour le domaine test.lan :

vi /etc/bind/named.conf

include "/etc/bind/named.conf.local";

/etc/bind/named.conf.local

  • Inscrire les directives des zones (directe et inversée) :
    • Donner le type master
    • Le chemin du fichier de zone /etc/bind/named.conf.local
    • Autoriser la mise à jour dynamique et renseigner le nom de la clé utilisée pour la mise à jour
    • Notifications

mkdir /etc/bind/zones
touch /etc/bind/zones/{test.lan.db,rev.192.168.1.db}

vi /etc/bind/named.conf.local

zone "test.lan" in {
        type master;
        file "/etc/bind/zones/test.lan.db";
        allow-update { key "rndc-key"; };
        notify yes;
};
 
zone "1.168.192.in-addr.arpa" in {
        type master;
        file "/etc/bind/zones/rev.192.168.1.db";
        allow-update { key "rndc-key"; };
        notify yes;
};
 
include "/etc/bind/rndc.key";

fichier de zone directe /etc/bind/zones/test.lan.db

  • Création du fichier de zone direct

vi /etc/bind/zones/test.lan.db

$TTL 10800
@       IN      SOA     ns1.test.lan. root.test.lan. (
                        2010071201
                        10800
                        3600
                        604800
                        38400 )

@       IN      NS      ns1.test.lan.

@       IN      MX      10      mail.test.lan.

test.lan.       A       192.168.1.1

ns1             A       192.168.1.1
mail            A       192.168.1.10
dhcp    IN      CNAME   ns1.test.lan.

vi /etc/bind/zones/rev.192.168.1.db

$TTL 10800
@       IN      SOA     ns1.test.lan. root.test.lan. (
                        2010071201
                        10800
                        3600
                        604800
                        38400 )

@       IN      NS      ns1.test.lan.

@       IN      MX      10      mail.test.lan.

$ORIGIN 0.168.192.in-addr.arpa.

1		IN      PTR     ns1.test.lan.
10		IN      PTR     mail.test.lan.

/etc/bind/named.conf.options

  • On ajouter la directive controls et au besoin on indique un ou plusieurs redirecteurs (forwarders) :

vi /etc/bind/named.conf.options

options {
        directory "/var/cache/bind";
 
//        forwarders {
//                8.8.8.8;8.8.2.2;
//        };
 
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

        // A rajouter pour la mise à jour sécurisée
        controls {
        inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; };
        };

/etc/bind/zones

  • On ajoute l'utilisateur Bind afin d'écrire dans le dossier zones :

chown bind /etc/bind/zones -R

  • Redémarrer le service named :

/etc/init.d/bind9 restart

  • A ce stade, le serveur doit pouvoir répondre sur des requêtes via nslookup :

nslookup test.lan

  • Retourne :

Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   test.lan
Address: 192.168.1.1

nslookup 192.168.1.1

  • Retourne :

Server:         192.168.1.1
Address:        192.168.1.1#53

1.1.168.192.in-addr.arpa        name = ns1.test.lan.

mv /etc/dhcp/dhcpd.conf{,.ori}
vi /etc/dhcp/dhcpd.conf

# Basic stuff to name the server and switch on updating
server-identifier       192.168.1.1;
ddns-updates            on;
ddns-update-style       interim;
ddns-domainname         "test.lan.";
ddns-rev-domainname     "in-addr.arpa.";
# Ignore Windows FQDN updates
ignore                  client-updates;
 
# Include the key so that DHCP can authenticate itself to BIND9
include                 "/etc/bind/rndc.key";
 
# This is the communication zone
zone test.lan. {
        primary 127.0.0.1;
        key rndc-key;
}
 
# Normal DHCP stuff
option domain-name              "test.lan";
option domain-name-servers      192.168.1.1, 192.168.1.2;
option ip-forwarding            off;
 
default-lease-time              600;
max-lease-time                  7200;
log-facility			local7;
allow booting;
allow bootp;
 
# Tell the server it is authoritative on that subnet (essential)
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
        range                           192.168.1.50 192.168.1.254;
        option broadcast-address        192.168.1.255;
        option routers                  192.168.1.254;
        allow                           unknown-clients;
 
        zone 0.168.192.in-addr.arpa. {
                primary 192.168.1.1;
                key "rndc-key";
        }
 
        zone localdomain. {
                primary 192.168.1.1;
                key "rndc-key";
        }
}

Apparmor

  • Poser les permissions sur le système de fichier :

chown -R bind:bind /etc/bind/zones
chmod g+w /etc/bind
chmod +r /etc/bind/rndc.key

/etc/apparmor.d/usr.sbin.dhcpd

  • Ajouter les deux lignes suivantes :

vi /etc/apparmor.d/usr.sbin.dhcpd

  /etc/bind/ rw,
  /etc/bind/** rw,

vi /etc/apparmor.d/usr.sbin.named

  /etc/bind/zones/** rw,

  • Redémarrer tous les services (un reboot est conseillé) :

for serv in apparmor isc-dhcp-server bind9; do /etc/init.d/$serv restart; done

* Vérifier que tout fonctionne, test avec un client dhcp :

tailf /var/log/syslog

May  5 11:46:35 ns1 dhcpd: DHCPDISCOVER from 00:15:5d:00:c9:1e via eth0
May  5 11:46:36 ns1 dhcpd: DHCPOFFER on 192.168.1.50 to 00:15:5d:00:c9:1e (smtp) via eth0
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: signer "rndc-key" approved
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: updating zone 'test.lan/IN': adding an RR at 'smtp.test.lan' A
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: updating zone 'test.lan/IN': adding an RR at 'smtp.test.lan' TXT
May  5 11:46:36 ns1 dhcpd: DHCPREQUEST for 192.168.1.50 (192.168.1.1) from 00:15:5d:00:c9:1e (smtp) via eth0
May  5 11:46:36 ns1 dhcpd: DHCPACK on 192.168.1.50 to 00:15:5d:00:c9:1e (smtp) via eth0
May  5 11:46:36 ns1 dhcpd: Added new forward map from smtp.test.lan. to 192.168.1.50
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: signer "rndc-key" approved
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: updating zone '1.168.192.in-addr.arpa/IN': deleting rrset at '50.1.168.192.in-addr.arpa' PTR
May  5 11:46:36 ns1 named[2520]: client 192.168.1.1#55301/key rndc-key: updating zone '1.168.192.in-addr.arpa/IN': adding an RR at '50.1.168.192.in-addr.arpa' PTR
May  5 11:46:36 ns1 dhcpd: Added reverse map from 50.1.168.192.in-addr.arpa. to smtp.test.lan.

  • On peut également liste la création de fichiers jnl dans le répertoire Zones :

ll /etc/bind/zones

-rw-r--r-- 1 bind bind  439 mai    5 11:58 rev.192.168.1.db
-rw-r--r-- 1 bind bind  999 mai    5 11:48 rev.192.168.1.db.jnl
-rw-r--r-- 1 bind bind  592 mai    5 12:00 test.lan.db
-rw-r--r-- 1 bind bind 1028 mai    5 11:48 test.lan.db.jnl