HowtoDHCP
Cette page a été importée automatiquement de notre ancien wiki mais n’a pas encore été révisée.
Failover DHCP master/master
Ce mode permet à deux serveurs DHCP de fonctionner simultanément sur un même LAN.
Les leases dynamiques sont alors partagés entre les 2 serveurs et synchronisés via un échange réseau entre les serveurs. En cas de panne de l’un deux, l’autre prend alors à sa charge l’ensemble des leases.
Sous Debian
Il est nécessaire d’ajouter une section “failover” sur chacun des serveurs. Exemple :
Master :
failover peer "dhcp-failover" {
primary;
address 192.0.2.1;
peer address 192.0.2.2;
port 647;
peer port 647;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
split 128;
mclt 1800;
}
Slave :
failover peer "dhcp-failover" {
secondary;
address 192.0.2.2;
peer address 192.0.2.1;
port 647;
peer port 647;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
}
Il est également nécessaire d’englober la directive “range” et les sections “host” dans une section “pool”, et l’on déclarera celle-ci en mode failover. Exemple :
subnet 192.0.2.0 netmask 255.255.0.0 {
option routers 192.2.0.254;
pool {
failover peer "dhcp-failover";
range 192.0.2.100 192.0.2.200;
host host1 {
hardware ethernet 08:00:1f:82:7a:72;
fixed-address 192.0.2.4
}
[...]
}
Sous OpenBSD
Il ne faut pas modifier la configuration DHCP en elle-même, mais ajouter des options au daemon. Voir le manuel dhcpd(8).
Dans /etc/rc.conf.local
, il faut ajouter les flags
-y
(interface d’écoute en unicast et multicast ou IP
unicast, ne doit être défini qu’une seule fois) et -Y
(interface d’envoi en multicast ou IP unicast, peut être défini
plusieurs fois).
Par exemple pour accepter tous les messages de synchronisation en
multicast et unicast à la réception sur l’interface em0
, et
envoyer des messages de multicast sur em0
, tout en
répondant aux requêtes DHCP sur les interfaces em0
et
em2
uniquement :
dhcpd_flags=-y em0 -Y em0 em0 em2
Pour accepter tous les messages de synchronisation à destination de
l’IP 192.0.2.5, et envoyer des messages sur l’IP 192.0.2.6, tout en
répondant aux requêtes DHCP sur les interfaces em1
et
em2
uniquement :
dhcpd_flags=-y 192.0.2.5 -Y 192.0.2.6 em1 em2
Si le fichier /var/db/dhcpd.key
existe, alors son
contenu sera utilisé comme clé pré-partagée entre les différents
serveurs DHCP qui doivent tous avoir exactement le même fichier, afin
d’authentifier les messages de synchronisation.
Leases, adresses IP et adresses MAC
Les leases sont les distributions d’IP aux clients.
Le serveur DHCP les stocke dans
/var/db/dhcpd.leases
.
Lister et compter les IP attribuées par DHCPD
awk -F" " '/lease/{print$2}' /var/db/dhcpd.leases | sort -V | uniq
awk -F" " '/lease/{print$2}' /var/db/dhcpd.leases | sort -V | uniq | wc -l
Lister les adresses MAC par nombre de leases
grep hardware /var/db/dhcpd.leases | sort | uniq -c | sort -hr
Attention, le nombre de leases n’est pas égal au nombre d’IPs attribuées !
Monitoring
Il est possible de monitorer l’utilisation des pool DHCP à l’aide d’un script, adapté selon l’outil de monitoring et l’OS hôte.
Le script indiquera le taux d’utilisation de chacun des pools configurés dans le serveur DHCP. Attention : les baux statiques ne sont pas pris en compte, seuls les baux dynamiques le sont. Les pools dynamiques ne doivent pas inclure les IPs attribuées par des baux statiques : si un bail statique a une IP comprise dans le pool dynamique, alors il ne sera pas compté dans le taux d’utilisation.
Le script change légèrement selon s’il doit tourner sous Debian ou OpenBSD :
- Sous Debian, la variable $CONFFILE sera généralement à
/etc/dhcp/dhcpd.conf
alors que sous OpenBSD, elle sera à/etc/dhcpd.conf
. - Sous Debian, la variable $LEASEFILE sera généralement à
/var/lib/dhcp/dhcpd.leases
alors que sous OpenBSD, elle sera à/var/db/dhcpd.leases
. - Sous Debian, on a un
push (@activeleases, $lease);
dans unelsif ($line =~ /binding state active/) {
, alors que sous OpenBSD, le même push est dans unelsif ($line !~ /abandoned/) {
.
NRPE
Le script pour Debian est présent dans ansible-roles, celui pour OpenBSD est présent dans EvoBSD.
Munin
Le script pour Debian est présent dans ansible-roles. Munin n’est généralement pas utilisé sous OpenBSD, et le script n’existe alors pas dans EvoBSD mais peut être adapté avec les indications ci-dessus au besoin.
Voir ensuite HowtoMunin pour la configuration.
Grafana
Le script pour OpenBSD est présent dans EvoBSD. Celui pour Debian n’existe pas encore dans ansible-roles mais peut être adaptée au besoin avec les indications ci-dessus.
Voir ensuite HowtoCollectd, HowtoInfluxDB et HowtoGrafana pour la configuration.
FAQ
Abandonned leases
Si le serveur DHCP n’arrive plus à attribuer d’adresses IP et log
no free leases on subnet
, il se peut que le liste des baux
DHCP attribués par le serveur (/var/db/dhcpd.leases
) soit
plein d’IP abandonned
.
Cela signifie que le serveur considère cette IP comme déjà utilisée et ne l’attribuera, pas à moins qu’il soit à court d’IP disponibles, auquel cas il revérifiera quand même que l’IP n’est pas toujours utilisée, ce qui pourrait tout de même empêcher son attribution.