Aller au contenu principal

Configurer un serveur DNS sur une raspberry pi

· 4 minutes de lecture
Stéphane ROBERT
Consultant DevOps

Possédant 4 raspberry et 3 mini-pc sur lesquels je fais tourner 2 clusters kubernetes, j'ai eu besoin d'installer un serveur DNS sur un des rpi.

Installation de BIND9 sur raspbian

Dans un premier installons le serveur DNS bind9 :

sudo apt install -y bind9 bind9utils bind9-doc dnsutils

Configuration du serveur BIND

Editons le fichier named.conf.local

sudo vi /etc/bind/named.conf.local

Remplacer les lignes existantes par ces lignes en modifiant celles indiquées :

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "example.com" { # changer de domaine
    type master;
    file "/var/cache/bind/example.com.zone"; # zone file path
};
zone "1.168.192.in-addr.arpa" { # Changer de plage d'adresse si besoin
        type master;
        file "/var/cache/bind/rev-example.com.zone";
};

De la même manière sur le fichier named.conf.options

sudo vi /etc/bind/named.conf.options

Remplacer les lignes existantes par ces lignes en modifiant celles indiquées :

cl "allowed" {
        192.168.1.0/24;  # changer de plage d'adresse si besoin
};
options {
        directory "/var/cache/bind";
        listen-on port 53 { 127.0.0.1; 192.168.1.44; }; # Changer de serveur DNS
        allow-query { localhost; 192.168.1.0/24; }; # changer de plage d'adresse si besoin
        allow-recursion { 192.168.1.44; 192.168.1.0/24; }; # changer de plage d'adresse si besoin
        recursion yes;
        dnssec-enable yes;
        dnssec-validation auto;
        auth-nxdomain no;
};

Maintenant éditons les 2 fichiers de zone :

sudo vi /var/cache/bind/example.com.zone

Collez-y ce contenu en changeant le nom fr domaine et les plages d'adresses :

$TTL    86400
$ORIGIN example.com.
@       IN      SOA     rpi1.example.com. root.example.com. (
                2019061401   ; serial
                7200         ; refresh after 2 hours
                3600         ; retry after 1 hour
                604800       ; expire after 1 week
                86400 )      ; minimum TTL of 1 day
;
; Primary Nameserver
example.com.          IN      NS      rpi1.example.com.
;
; Define A records (forward lookups)
rpi1           IN      A       192.168.1.44
rpi2           IN      A       192.168.1.45
rpi3           IN      A       192.168.1.46
*.example.com     IN      A      192.168.1.42

A la dernière ligne est indiqué un asterisk qui pointe sur le reverse proxy traefik contenu dans mon cluster kubernetes k3s.

Il reste juste à éditer le fichier de reverse :

sudo vi /var/cache/bind/rev-example.com.zone

Collez-y ce contenu en changeant le nom fr domaine et les plages d'adresses :

$TTL    86400
@       IN      SOA     rpi1.example.com. root.example.com. (
                2019061401   ; serial
                7200         ; refresh after 2 hours
                3600         ; retry after 1 hour
                604800       ; expire after 1 week
                86400 )      ; minimum TTL of 1 day
;
; Primary nameserver
@       IN      NS      rpi1.example.com.
44      IN      PTR     rpi1.example.com.
; PTR records for reverse lookup
45      IN      PTR     rpi2.example.com
46      IN      PTR     rpi3.example.com

Pour contrôler vos fichiers de configuration vous pouvez utiliser les outils named-checkconf et named-checkzone

named-checkconf /etc/named.conf
named-checkzone example.com /var/cache/bind/example.com.zone
named-checkzone example.com /var/cache/bind/rev-example.com.zone

Maintenant activons et démarrons bind9:

sudo systemctl enable bind9
sudo systemctl start bind9

Testons notre serveur avec nslookup:

nslookup
> server 192.168.1.44
Default server: 192.168.1.44
Address: 192.168.1.44#53
> rpi1
Server:         192.168.1.44
Address:        192.168.1.44#53

Name:   rpi1.exapmle.com
Address: 192.168.1.44
> rpi2
Server:         192.168.1.44
Address:        192.168.1.44#53

Name:   rpi2.example.com
Address: 192.168.1.45

Configuration des clients (Ubuntu 18.04 et Raspbian)

Ubuntu

Ubuntu utilise netplan ou network-manager pour configurer le fichier resolv.conf. Dans le cas où il s'agit de netplan :

sudo vi /etc/netplan/
 This file is generated from information provided by
 the datasource.  Changes to it will not persist across an instance.
 To disable cloud-init's network configuration capabilities, write a file
 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
 network: {config: disabled}
network:
    version: 2
    ethernets:
        enp1s0: # modifier le nom de votre carte réseau
            dhcp4: true
            dhcp4-overrides:
                    use-dns: no
            nameservers:
                    search: [example.com] # modifier le nom de votre domaine
                    addresses: [192.168.1.44,8.8.8.8,8.8.4.4]

Appliquons les modifications

sudo netplan apply

Faites un test avec un ping et le nom d'une des machines configurer dans votre serveur DNS.

Raspbian

Sur raspbian il faut installer resolvconf

sudo apt install resolvconf

Il faut editer les fichiers présent dans le répertoire /etc/resolvconf/resolv.conf.d/ :

cd /etc/resolvconf/resolv.conf.d/
ls
base  head  original\  tail

Personnellement j'ai mis ceci dans le fichier base et viré ce qui était présent dans les fichiers head et tail:

nameserver 192.168.1.44
domain bob.local
search bob.local

Appliquons les modifications :

sudo resolvconf -u

Vous pouvez tester vos modifs avec un ping.