Provision du Datacenter - Installation du DCHP isc-dhcp-server - [Raspberry PI/Rock64]

[FIN DE VIE] Voir l’article (en anglais) J’ai remplacé les service DNS/DHCP (Bind9/isc-dhcp-server) par Technitium DNS

[ NIVEAU ] Débutant
Cette procédure permet l’installation du service isc-dhcp-server, qui est l’implémentation d’un service DHCP (Dynamic Host Configuration Protocol).

[ INTEGRATION MYTINYDC-IM ] en cours… ( voir Gestionnaire de datacenter )

Pré-requis

Pour exécuter cette opération vous devez :

  • avoir suivi la procédure : Provision du Datacenter - Installation du DNS Bind9
  • savoir exécuter une commande dans une console Linux
  • savoir utiliser l’éditeur “vi”
  • être connecté “root” à la console, pour les utilisateur sudo : tapez sudo bash

A quoi sert un service DHCP sur un réseau

Le service DHCP est chargé de distribuer des adresses IP aux serveurs connectés à ce même réseau. Ceci permet de simplifier la tâche d’administration en centralisant toutes les informations du réseau dans un seul endroit. Les adresses IP peuvent être distribuées de manière aléatoire ou bien de manière discriminante.
Une fois l’adresse distribuée au serveur, le service DHCP inscrira les informations de ce serveur ainsi que l’adresse IP distribuée auprès du service DNS voir le chapitre précédent.

Par défaut, le serveur DHCP attribue une adresse IP au demandeur située dans la plage d’adresses indiquée dans le fichier de configuration (de manière aléatoire).
Par conséquent si un serveur change d’adresse IP vous pourrez toujours le retrouver par son nom hôte DNS.
Mais là où cela se complique, c’est au niveau des firewalls.
Il est possible d’utiliser des noms qualifiés dans les règles de firewall, mais ce dernier convertira ce nom en adresse IP avec les informations DNS de l’instant où vous appliquez les règles.
Si un des serveurs redémarre et obtient une adresse IP différente de la précédente, les règles de firewall devront être rechargées sur l’ensemble du Datacenter.

Pour cette raison, et aussi pour disposer d’une meilleure traçabilité, il est préférable d’attibuer des adresses IP fixes aux serveurs. Cette discrination se fera au travers de l’adresse MAC, sensée être différente pour chaque appareil de réseau (plus d’informations sur les adresses MAC).

Cet article Wikipédia explique clairement le fonctionnement général d’un service DHCP.

L’implémentation Mytinydc

Mytinydc utilise le service “isc-dhdp-server” fourni par le paquet Debian du même nom. Ce service supporte toutes les opérations liées à DHCP.

Installation des paquets nécessaires

Exécutez la commande :

apt-get -y install isc-dhcp-server

Paramétrage du serveur DHCP

La configuration qui suit est étroitement liée à la configuration du serveur DNS. Après avoir attribué l’adresse IP à l’ordinateur demandeur, le serveur DHCP va demander la mise à jour du service DNS, afin d’y inscrire les informations du demandeur : son nom hôte, et son adresse ip.

Dans un premier temps, nous allons limiter l’accès de ce service à l’interface réseau chargée de supporter ce service.

Attention, l’accès à plusieurs services DHCP sur un même réseau (authoritative) peut avoir des effets inattendus. Par défaut, isc-dhcp-server écoute sur toutes les interfaces. Vous avez la possibilité de restreindre en indiquant les interfaces d’écoute dans le fichier “/etc/default/isc-dhcp-server”. Ce fichier permet de déterminer et de dissocier l’IPV4 et l’IPV6. N’utilisant pas l’IPV6, mon fichier contient ceci :

INTERFACESv4="eth0"
INTERFACESv6=""

Si vous voulez distribuer plusieurs réseaux, vous devrez lister les interfaces séparées par un espace, comme suit : INTERFACESvX="eth0 eth1 eth2". Le serveur saura différencier le réseau à distribuer selon l’interface.

Pour être certain de limiter le champs d’action de ce service, j’utilise les fonctions de Firewall, ouvert uniquement sur l’interface connecté au Datacenter.

Fichier de configuration isc-dhcp-server

Ci-après, vous trouverez la configuration permettant l’attribution d’adresse IP fixe fonction de l’adresse MAC du demandeur. Dans les deux cas, la configuration du serveur DNS sera maintenue par le serveur DHCP. Le service DNS autorise, au moyen d’une clé d’authentification, la mise à jour d’informations de DNS, par un service DHCP.

Dans cette documentation, le domaine à gérer est nommé “mondc”, le réseau utilisé est : 172.21.0.0/24 (255.255.255.0), le serveur DNS dispose de l’adresse IP 172.21.0.1, le fichier contenant la clé d’authentification DNS est disposée dans /etc/bind/rndc.key voir le chapitre précédent pour la génération de cette clé.

Rappel : pour implémenter cette configuration, vous devez avoir suivi et appliquer les procédures du chapitre précédent et concernant la partie DNS.

Ouvrir le fichier /etc/dhcp/dhcpd.conf, et remplacer le contenu par celui-ci :

#-----------------
# bloc globals
#-----------------
authoritative;
default-lease-time 3600;
max-lease-time 7200;
log-facility local7;
ddns-update-style interim;
include "/etc/bind/rndc.key";
update-static-leases on;
ignore client-updates;
deny unknown-clients;
#-----------------
# bloc zones
#-----------------
zone mondc. {
	primary 172.21.0.1;
	key rndc-key;
}
zone 0.21.172.in-addr.arpa. {
	primary 172.21.0.1;
	key rndc-key;
}
#-----------------
# bloc subnets
#-----------------
subnet 172.21.0.0 netmask 255.255.255.0 {
	ddns-domainname "mondc.";
	ddns-rev-domainname "in-addr.arpa";
	option broadcast-address 172.21.0.255;
	option subnet-mask 255.255.255.0;
	option routers 172.21.0.1;
	option domain-name-servers 172.21.0.1,208.67.222.222;
	option domain-name "mondc";
	range 172.21.0.2 172.21.0.20;
}
#-----------------
# bloc hosts
#-----------------
host matrix {
	hardware ethernet xx:xx:xx:xx:xx:xx;
	fixed-address 172.21.0.1;
	option host-name matrix;
}
host postgres {
	hardware ethernet xx:xx:xx:xx:xx:xx;
	fixed-address 172.21.0.4;
	option host-name postgres;
}
host nextcloud {
	hardware ethernet xx:xx:xx:xx:xx:xx;
	fixed-address 172.21.0.6;
	option host-name nextcloud;
}

ATTENTION à bien respecter la syntaxe, notamment les “;” et “.”

Explication du bloc globals

  • Ce serveur DHCP est seul sur le réseau : authoritative
  • Période de renouvellement du bail (secondes) : default-lease-time 3600
  • Validité max du bail (secondes) : max-lease-time 7200
  • Les évènements seront enregistrés dans le syslog (voir configuration syslogd): log-facility local7
  • Style de la mise à jour du dns (interim ou l’option ad-hoc qui n’est plus utilisée) ddns-update-style interim
  • Emplacement du fichier de cles d’authentification DNS : include “/etc/bind/rndc.key”
  • Par défaut non activé, ceci est l’option permettant l’activation de la mise à jour des DNS : update-static-leases on
  • Interdit au client de s’enregistrer avec son propre non de serveur : ignore client-updates
  • Permet d’interdire l’attribution d’une adresse IP à un hôte inconnu (nécessite donc de compléter les blocs hosts) : deny unknown-clients

Explications du bloc subnets

  • Adresse du réseau : subnet 172.21.0.0 netmask 255.255.255.0
  • Domaine DNS forward à mettre à jour : ddns-domainname “mondc.”
  • Donaine DNS reverse à mettre à jour : ddns-rev-domainname “in-addr.arpa”
  • Adresse de broadcast utilisé sur ce réseau (généralement la dernière adresse du segment) : option broadcast-address 172.21.0.255
  • Masque de sous-réseau (/24) : option subnet-mask 255.255.255.0
  • Routeur principal du réseau : option routers 172.21.0.1
  • Serveurs DNS à utiliser (DNS du datacenter et en option OPENDNS): option domain-name-servers 172.21.0.1,208.67.222.222
  • Domaine DNS d’appartenance des serveurs : option domain-name “mondc”
  • Amplitude des adresses distribuées (ici de 2 à 20 ) : range 172.21.0.2 172.21.0.20

Explications du bloc hosts

  • Début du bloc de configuration d’un client : host nextcloud
  • Son adresse MAC : hardware ethernet xx:xx:xx:xx:xx:xx
  • Adresse IP qui lui sera attribuée : fixed-address 172.21.0.6
  • Nom du serveur pour l’inscription auprès des DNS : option host-name nextcloud

Ouverture des ports de communication (Firewall)

Pour offrir ce service, le serveur disposant du service DHCP, devra écouter et répondre aux différentes requêtes des machines clientes.

Protocole Port Sens Interfaces réseaux
UDP 67 Input Interface(s) connectée(s) aux switch du Datacenter
UDP 67 Output Interface(s) connectée(s) aux switch du Datacenter

A ce stade, le service DHCP saura attribuer une adresse IP à un serveur situé dans le Datacenter, et enregistrer son nom de manière dynamique au sein du service DNS.

Interactions entre le service DHCP et le service DNS.

Une fois l’adresse IP attribuée au client, le service DHCP procédera à la mise à jour des services DNS dont les paramètres sont indiqués dans la configuration et ce de manière automatisée.

## Démarrage du service Le démarrage du service DHCP s’exécute par la commande :

systemctl start isc-dhcp-server

Arrêt du service

L’arrêt du service DHCP s’exécute par la commande :

systemctl stop isc-dhcp-server

## Redémarrage du service

Le redémarrage du service DHCP s’exécute par la commande :

systemctl restart isc-dhcp-server

Statut du service

Le statut du service DHCP s’affiche par la commande :

systemctl status isc-dhcp-server

Traces de démarrage et de fonctionnemnent

Vous pouvez consulter les évènements dans le fichier /var/log/syslog.

tail -f /var/log/syslog
# CTRL+C pour arrêter

## Ajouter un hôte Pour ajouter un client vous devez vous procurer son adresse MAC.
Du fait que le service DHCP refuse l’attribution d’adresses IP aux hôtes inconnus, la demande de ce type de client sera tracée dans le fichier /var/log/syslog.
Cette trace indiquera l’adresse MAC du serveur qui s’est vu refuser l’attribution d’une adresse IP.
Démarrer la visualisation des traces :

tail -f /var/log/syslog
# CTRL+C pour arrêter

Démarrer l’unité inconnue sur le réseau. Attendre quelques instants et vous verrez apparaître ce type d’évènement :

Sep 10 15:43:59 xxxxx dhcpd[27651]: DHCPDISCOVER from xx:xx:xx:xx:xx:xx via eth0: unknown client

En récupérant directement cette adresse MAC dans les logs, vous disposez maintenant de toutes les informations nécessaire à l’ajout d’un hôte dans le fichier de configuration DHCP (adresse MAC, nom hôte DNS à attribuer à cette machine, adresse IP à diffuser).

Ajouter un bloc au fichier de configuration du servcie DCHP /etc/dhcp/dhcpd.conf :

host monnouveauserveur {
	hardware ethernet xx:xx:xx:xx:xx:xx;
	fixed-address 172.21.0.7;
	option host-name nouveauserveur;
}

Remplacez “xx:xx:xx:xx:xx:xx” par son adresse MAC, “172.21.0.7” par son adresse Ip définitive, “nouveauserveur” par son nom hôte DNS.

Enregistrez la modification et redémarrer le service DHCP.

## Test de fonctionnement Démarrer le service DHPC, se connecter à une console du serveur et exécuter la commande de visualisation des traces :

tail -f /var/log/syslog
  • Assurez-vous que le client soit bien enregistré dans la configuration du service DHCP (bloc host avec son adresse MAC).
  • Connectez ce serveur au réseau du Datacenter et le mettre sous tension (ce serveur doit disposer d’un système d’exploitation en état de fonctionnement)
  • Attendre quelques instants et observer les évènements qui apparaissent dans le log.
  • Une fois les opérations d’attribution d’adresse IP et l’enregistrement dynamique auprès du DNS, arrêtez la visualisation des traces : ̀appuyer sur CTRL+C
  • tester la connexion de ce nouveau serveur avec la commande ping : `ping [adresse IP attribuée au serveur client]
  • tester l’enregistrement DNS avec la commande ping : ping [nom du serveur] Exemple pour le serveur nommé “nouveauserveur” avec l’adresse IP 172.21.0.7 :
ping 172.21.0.7
ping nouveauserveur

Résumé

Fichiers utilisés
/etc/default/isc-dhcp-server
/etc/dhcp/dhcpd.conf
Commandes utilisées
systemctl [ start | stop | restart ] isc-dhcp-serveer

Aller plus loin

  • La configuration d’un service DHCP permet aussi de démarrer des serveurs au travers du réseau sans que ce serveur ne dispose de disque dur (BOOTP, PXE). Ceci fera l’objet d’un chapitre indépendant.