SERVEUR DNS SUR DEBIAN

DNS : Domain Name System ou Domain Name Server

Le serveur DNS permet de convertir un nom en adresse ip. Par exemple sur internet au lieu de retenir l’adresse ip de Google 216.58.213.164 vous taper simplement son nom DNS www.google.com et le serveur DNS se charge de faire le reste à votre place (il convertit ce nom en IP et ensuite enverra votre requête vers le bon serveur). Pour ce TP nous aurons besoin de 2 machines. Une qui vas jouer le rôle de serveur et l’autre le rôle de client.

Configuration du Serveur DNS

Prérequis

Nous allons commencer par nous connecter à la machine qui va jouer le rôle de serveur DNS.

On commence par changer le nom de la machine

sudo sh -c "echo dns-server > /etc/hostname"
sudo hostname  dns-server

Il faut maintenant éditer le fichier de résolution d’hôte local.

sudo nano /etc/hosts

Et ajouter les lignes suivantes dans le fichier

192.168.57.200	dns-server.atomit.local	dns-server
127.0.0.1 dns-server

Si vous êtes en ssh vous pouvez avoir quelque message d’erreur alors que les commandes ont bien fonctionné. Ce problème disparaîtra après reboot du serveur. Pour faire cela, nous allons commencer par installer les paquets bind9 et dnsutils:

sudo sh -c "apt update  &&  apt install bind9 dnsutils"

Fixer l’IP de votre machine. Avoir un Serveur DNS avec une IP dynamique n’est pas très malin. Lister l’ensemble des interfaces réseau disponible avec la commande :

joel@dns-server: $  ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:dc:0e:40 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fe:ae:60 brd ff:ff:ff:ff:ff:ff

On repère la carte réseau qui est branchée sur le réseau local. Dans notre cas c’est l’interface 3 et elle se nomme enp0s8.

sudo sh -c "echo allow-hotplug enp0s8 >> /etc/network/interfaces"

Nous allons ajouter dans le fichier de configuration si ce n’est pas déjà le car une directive qui permet d’activer la carte au démarrage.

sudo nano  /etc/network/interfaces.d/enp0s8.conf

Placer y le contenu suivant :

#Interface enp0s8
	iface enp0s8 inet static 
	address 192.168.57.2
	netmask 255.255.255.0

Éditer le fichier resolv :

sudo nano /etc/resolv.conf

Placer s’y le contenue suivant :

domain   atomit.local
search   atomit.local
nameserver   192.168.57.200

On suppose ici que atomit.local sera le nom de notre dns et que notre serveur dns s’interroge lui-même en 1er pour les résolutions de nom. rebooter le serveur pour prendre en compte les modifications.

sudo reboot

Placer toutes les cartes de votre serveur DNS en static car si vous avez une carte en DHCP il est possible que le serveur modifie automatiquement le contenu du fichier /etc/resolv.conf ce qui aura pour effet d’effacer vos modifications. Donc, pensez à vérifier le contenu de ce fichier si vous avez des erreurs inattendues. ou alors vous écrivez un script qui vas modifier le fichier resolv a chaque reboot.

Configuration du service BIND9

Les interfaces réseaux sont à présent configuré nous pouvons passer a la configuration du serveur DNS. Nous admettons que enp0s8 est l’interface qui est connectée au réseau. Nous admettons ici que le domaine se nomme atomit.local. L’ip du serveur est 192.168.57.200 donc l’adresse du réseau sur le qu’elle il est et il a autorité est le 192.168.57.0.

Nous allons commencer par créer nos fichiers pour définir les zones de recherche directe (Conversion de Nom en adresse IP) et inversée (Conversion d’IP en Nom). Pour cela nous allons copier les modèles fournis avec le serveur dns.

Pour la zone de recherche directe

cp /etc/bind/db.local /etc/bind/db.atomit.local
sudo nano /etc/bind/db.atomit.local

Nous allons éditer ce fichier de manière à obtenir le résultat suivant :

;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	atomit.local. root.atomit.local. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	atomit.local.
@	IN	A	192.168.57.200
dns-server	IN	A	192.168.57.200
client		IN	A	192.168.57.101

Pour vérifier si le fichier de configuration a été configuré correctement :

sudo named-checkzone  atomit.local /etc/bind/db.atomit.local
joel@dns-server:/etc/bind$ sudo named-checkzone  atomit.local /etc/bind/db.atomit.local
zone atomit.local/IN: loaded serial 2
OK
joel@dns-server:/etc/bind$ 

Si vous avez une erreur essayée de la résoudre avant de passer à l’étape suivante.

Pour la zone de recherche inversée.

l’ip du serveur est 192.168.57.200 donc l’adresse du réseau sur le qu’elle il est et il a autorité est le 192.168.57.0. La parti réseau est prise (192.168.57) et est ensuite inversé on obtient (57.168.192) d’où le nom 57.168.192.in-addr.arpa pour la détermination de la zone de recherche inversée et nous allons placer son fichier de configuration a l’emplacement  /etc/bind/db.atomit.local.inv

sudo cp /etc/bind/db.127 /etc/bind/db.atomit.local.inv

sudo nano /etc/bind/db.atomit.local.inv

Nous allons éditer ce fichier de manière à obtenir le résultat suivant :

;
; BIND reverse data file for local loopback interface
;
$TTL	604800
@	IN	SOA	atomit.local. root.atomit.local. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	atomit.local.
@	IN	A	192.168.57.200
200	IN	PTR	dns-server.atomit.local.
101	IN	PTR	client.

Pour vérifier si le fichier de configuration a été configuré correctement :

sudo named-checkzone  atomit.local /etc/bind/db.atomit.local.inv

joel@dns-server:/etc/bind$ sudo named-checkzone  atomit.local /etc/bind/db.atomit.local.inv
zone atomit.local/IN: loaded serial 1
OK
joel@dns-server:/etc/bind$

Si vous avez une erreur critique tentée de la résoudre avant de passer à l’étape suivante.

Ensuite nous allons créer notre zone et renseigné ces dernier fichier comme étant leur fichier de configuration, pour cela il faut éditer le fichier named.conf.local

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

Placez-y le contenu qui suit servant à définir la zone de recherche directe et inversée :

zone "atomit.local" {
        type master;
        file "/etc/bind/db.atomit.local";
        allow-query { any; };
};
zone "57.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.atomit.local.inv";
};

Pour vérifier si le fichier de configuration a été configuré correctement :

sudo named-checkconf /etc/bind/named.conf
joel@dns-server:/etc/bind$ sudo named-checkconf /etc/bind/named.conf
joel@dns-server:/etc/bind$ 

Si vous avez une erreur tentée de la résoudre avant de passer à l’étape suivante. Vous pouvez ensuite configurer les options de redirection de requête. Éditer le fichier /etc/bind/named.conf.options de la manière suivante :

sudo nano /etc/bind/named.conf.options
options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you may need to fix the firewall to allow multiple
	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

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

	 forwarders {
	 	192.168.57.200;
	 	8.8.8.8;
	 	8.8.4.4;
	 };

	//========================================================================
	// If BIND logs error messages about the root key being expired,
	// you will need to update your keys.  See https://www.isc.org/bind-keys
	//========================================================================
	dnssec-validation auto;

	auth-nxdomain no;    # conform to RFC1035
	version none;
        	forward only;
	// listen-on-v6 { any; };
};

Pour vérifier si le fichier de configuration a été configuré correctement :

sudo named-checkconf /etc/bind/named.conf.options
joel@dns-server:/etc/bind$ sudo named-checkconf /etc/bind/named.conf.options
joel@dns-server:/etc/bind$ 

Si vous avez une erreur tentée de la résoudre avant de passer à l’étape suivante. Ensuite, redémarrez le service bind et vérifier qu’il fonctionne correctement :

joel@dns-server:~$ sudo systemctl restart bind9
[sudo] Mot de passe de joel : 
joel@dns-server:~$ sudo systemctl status bind9
● bind9.service - BIND Domain Name Server
   Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-10-26 16:17:39 CEST; 19s ago
     Docs: man:named(8)
  Process: 572 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
 Main PID: 576 (named)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/bind9.service
           └─576 /usr/sbin/named -f -u bind

oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'ns11.ovh.net/AAAA/IN': 2001:500:2::c#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'dns11.ovh.net/A/IN': 2001:500:2d::d#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'dns11.ovh.net/AAAA/IN': 2001:500:2d::d#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'ns11.ovh.net/A/IN': 2001:500:2d::d#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'ns11.ovh.net/AAAA/IN': 2001:500:2d::d#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'ns11.ovh.net/A/IN': 2001:dc3::35#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'dns11.ovh.net/A/IN': 2001:dc3::35#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'dns11.ovh.net/AAAA/IN': 2001:dc3::35#53
oct. 26 16:17:40 dns-server named[576]: network unreachable resolving 'ns11.ovh.net/AAAA/IN': 2001:dc3::35#53
oct. 26 16:17:41 dns-server named[576]: network unreachable resolving 'dns11.ovh.net/AAAA/IN': 2001:41d0:1:1983::1#53
joel@dns-server:~$ 

pour voir les 30 dernières lignes du fichier de log et déceler une erreur :

sudo tail -30 /var/log/syslog

Si vous n’avez pas d’erreur et que vous souhaitez voire le si le serveur dns fonctionne ou du moins si le serveur dns arrive lui-même a se reconnaître. Tapez la commande suivante :

sudo nslookup 

Ensuite dans l’interface taper le nom complet du serveur dns dans notre cas : dns-server.atomit.local , Il devrait afficher l’adresse ip du serveur DNS.

Taper ensuite client.atomit.fr qui est l’un des enregistrements que nous avons faits. Vous devrez avoir l’adresse du serveur DNS ainsi que l’ip qui a été résolu. Voici un rendu de ce que vous devez avoir :

joel@dns-server:/etc/bind$ nslookup 
> dns-server.atomit.local
Server:		192.168.57.200
Address:	192.168.57.200#53

Name:	dns-server.atomit.local
Address: 192.168.57.200
> client.atomit.local
Server:		192.168.57.200
Address:	192.168.57.200#53

Name:	client.atomit.local
Address: 192.168.57.101
> 

Configuration du client

Configurer l’ip du client pour qu’il soit sur le même réseau que le serveur DNS comme nous l’avons fait plus haut.

Lister l’ensemble des interfaces réseau disponible avec la commande :

joel@dns-server: $  ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:dc:0e:40 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:fe:ae:60 brd ff:ff:ff:ff:ff:ff

On repère la carte réseau qui est branchée sur le réseau local. Dans notre cas c’est l’interface 3 et elle se nomme enp0s8.

sudo sh -c "echo allow-hotplug enp0s8 >> /etc/network/interfaces"

Nous allons ajouter dans le fichier de configuration si ce n’est pas déjà le car une directive qui permet d’activer la carte au démarrage.

sudo nano  /etc/network/interfaces.d/enp0s8.conf

Placer y le contenu suivant :

#Interface enp0s8
	iface enp0s8 inet static 
	address 192.168.57.101
	netmask 255.255.255.0

Éditer le fichier resolv :

sudo nano /etc/resolv.conf

Placer s’y le contenue suivant :

domain   atomit.local
search   atomit.local
nameserver   192.168.57.200

Maintenant il vous suffit de tester votre domaine en réalisant un ping ver client.atomit.local ou vers dns-server.atomit.fr et voire si la résolution directe s’effectue bien pour tester la résolution inverse faite un ping vers l’adresse IP du client ou tu serveur DNS ex : 192.168.57.200. Le ping doit fonctionner et en plus vous devrez voire le nom du serveur apparaître.

Explication :

$TTL : (Time To Live) exprime la durée (en secondes) de validité, par défaut, des informations que contiennent les RRs. Une fois ce délai expiré, il est nécessaire de vérifier à nouveau les données. Les différents types :

SOA : permets de définir les informations relatives à la zone. En l’occurrence le nom du serveur DNS primaire « atomit.local. » et l’adresse mail du contact technique (root.atomit.local. ; le @ est remplacé par un point). Il est composé de plusieurs champs :

  1. Serial: est un entier non signé 32 bits. C’est le numéro de série à incrémenter à chaque modification du fichier. Il permet au serveur secondaire de recharger les informations qu’ils ont. L’usage général vient à le formater de cette manière YYYYMMDDXX .Ex : 16/10/2017 -> 2017102601
  2. Refresh: définis la période de rafraîchissement des données(en Seconde).
  1. Retry : si une erreur survient au cours du dernier rafraîchissement, celle-ci sera répétée au bout du délai Retry.
  2. Expire : le serveur sera considéré comme non disponible au bout du délai Expire.
  3. Negative cache TTL: définis la durée de vie d’une réponse NXDOMAIN de notre part.

NS : renseigne le nom des serveurs de noms pour le domaine (quel serveur de nom est maitre sur le domaine il peut y avoir plusieurs enregistrements NS) .

MX : renseigne sur le serveur de messagerie. Plusieurs peuvent être définis. Ainsi, il est possible de leur donner une priorité en leur affectant un numéro. Plus bas est le numéro, plus haute est la priorité.

A : associe un nom d’hôte à une adresse ipv4 (32 bits)

AAAA : associe un nom d’hôte à une adresse ipv6 (128 bits)

CNAME : identifie le nom canonique d’un alias (un nom pointant sur un autre nom)

PTR : c’est simplement la résolution inverse (le contraire du type A).

 

PDF24    Envoyer l'article en PDF   
Taggé , .Lien pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *