Le serveur DHCP de l'Internet Software Consortium conserve une base de données
persistante des concessions attribuées. Cette base de données est un fichier texte
ASCII sans contraintes de forme contenant une série de déclarations de concessions.
Chaque fois qu'une concession est attribuée, renouvelée ou libérée, sa nouvelle
valeur est enregistrée à la fin du fichier des concessions. Aussi si plus d'une
déclaration apparaît pour une concession donnée, la dernière valeur du fichier
est la valeur courante.
Quand dhcpd est installé pour la première fois, il n'y a pas de base de données
de concessions. Cependant, dhcpd requiert une base de donnée de concessions pour
démarrer. Pour créer la base de données des concessions initiales, créer
simplement un fichier vide de nom
/var/lib/dhcp/dhcpd.leases.
Pour éviter que la base de données ne devienne trop grande, le fichier est réécrit
de temps en temps. Premièrement, une base de données temporaire de concessions
est créée et toutes les concessions connues sont écrites dedans. Puis
la vieille base de données est renommée /var/lib/dhcp/dhcpd.leases~
et finalement la nouvelle base de donnée la remplace.
Il y a une fenêtre de vulnérabilité quand le processus dhcpd est tué ou
si le système plante après que la vieille base donnée a été renommée mais avant
que la nouvelle n'ait été déplacée à sa place, il n'y aura pas de fichier
/var/lib/dhcp/dhcpd.leases. Dans ce cas dhcpd, refusera
de démarrer et nécessitera une intervention manuelle.
IL NE FAUT PAS se contenter de créer un nouveau fichier de concessions -
sinon, vous perdrez la trace des concessions attribuées et ce sera le chaos.
À la place, renommez /var/lib/dhcp/dhcpd.leases~ en /var/lib/dhcp/dhcpd.leases,
pour restaurer l'ancien fichier de concessions et redémarrez dhcpd. Ceci garantit
qu'un fichier de concessions valide sera restauré.
Les descriptions des concessions seront stockées dans un format qui sera analysé
par le même analyseur récursif-descendant qui sert à lire les fichiers
dhcpd.conf(5)
et
dhclient.conf(5). Actuellement, la seule déclaration qui est utilisée
dans le fichier dhcpd.leases est la déclaration
lease.
lease ip-address { statements... }
Chaque déclaration de concession inclut une unique adresse IP qui a été
attribuée au client. La déclaration au sein des accolades définit la durée
de la concession et à qui elle a été attribuée.
Le début et la fin de la concession sont enregistrés en utilisant
les déclarations « starts » « ends ».
starts date;
ends date;
Les dates sont spécifiées comme suit :
Jour-semaine année/mois/jour
heure:minute:seconde
Le jour de la semaine est présent pour qu'un humain puisse facilement dire quand
une concession expire, il est spécifié sous forme de nombre entre 0 et 6
(Dimanche = 0). Le jour de la semaine est ignorée en tant qu'entrée.
L'année est spécifiée avec son siècle, aussi elle doit être spécifiée avec 4 chiffres
sauf pour les concessions vraiment longues.
Le mois est donné sous forme de nombre (Janvier = 1). De même le jour du mois
est spécifié sous forme de nombre qui commence à 1.
L'heure est un nombre entre 0 et 23, les minutes et les secondes sont des
nombres entre 0 et 59.
Les temps de concessions sont spécifiés suivant l'heure universelle de Greenwich
(GMT), et non suivant l'heure locale. Puisque Greenwich suit les changement d'heures
été/hiver, il n'y a probablement pas un endroit dans le monde
où les heures enregistrées dans les concessions sont les mêmes que celle
des horloges murales.
Sur une machine Unix, on peut se faire une idée de l'heure locale en GMT en
tapant
date -u.
L'adresse MAC de l'interface réseau qui est utilisée pour acquérir la concession
est enregistrée dans la déclaration
hardware :
hardware hardware-type mac-address;
L'adresse MAC est spécifiée sous forme d'une série d'octets hexadécimaux séparés
par des deux points.
Si le client a utilisé un identifiant client
pour acquérir son adresse, celui-ci est enregistré en utilisant la déclaration
uid :
uid client-identifier;
L'identifiant client est enregistré sous forme d'une série d'octets hexadécimaux,
sans regarder si le client a utilisé une chaîne de caractère ASCII ou
le nouveau format d'adresse MAC.
Si le client a envoyé un nom d'hôte en utilisant l'option
Client Hostname, comme spécifié dans certaines version d'ébauche du
document « Interaction DHCP-DNS » , ce nom d'hôte est enregistré dans la déclaration
client-hostname.
client-hostname "hostname";
Si le client envoie son nom d'hôte en utilisant l'option
Hostname
comme le fait Windows 95, il est enregistré dans la déclaration
hostname.
hostname "hostname";
Le serveur DHCP peut déterminer de plusieurs manières
si une concession a été mal utilisée,
soit parce que le client a reçu une concession NAK, soit parce que le
serveur essaye lui même de voir si une adresse qu'il s'apprête à réattribuer
est déjà utilisée.
Dans ce cas, la déclaration
abandoned sera utilisé
pour indiquer que cette concession ne doit plus être réassignée.
abandoned;
Les concessions abandonnées sont automatiquement réclamées.
Quand un client demande une nouvelle adresse, et que le serveur découvre
qu'il n'y en a plus de disponible,
il vérifie s'il n'y aurait pas des concession abandonnée,
et alloue la concession abandonnée la plus ancienne.
Le mécanisme standard pour vérifier les adresses de concessions en conflits est encore
suivi, aussi si une adresse IP abandonnée d'une concession est encore utilisée
elle est à nouveau abandonnée.
Si un client demande une adresse abandonnée, le serveur suppose que la raison
pour laquelle l'adresse a été abandonnée est une corruption du fichier des
concessions et que le client est la machine qui répondit quand la concession a été essayée, provoquant
son abandon. Dans ce cas, l'adresse est immédiatement assignée au client.