wiki/HowtoDHCP.md

121 lines
4.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

**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.
Pour cela, 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
}
[...]
}
~~~
## 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 un `elsif ($line =~ /binding state active/) {`, alors que sous OpenBSD, le même push est dans un `elsif ($line !~ /abandoned/) {`.
### NRPE
Le script pour Debian est présent dans [ansible-roles](https://gitea.evolix.org/evolix/ansible-roles/src/branch/unstable/nagios-nrpe/files/plugins/check_dhcp_pool), celui pour OpenBSD est présent dans [EvoBSD](https://gitea.evolix.org/evolix/EvoBSD/src/branch/dev/roles/nagios-nrpe/files/plugins_bsd/check_dhcp_pool).
### Munin
Le script pour Debian est présent dans [ansible-roles](https://gitea.evolix.org/evolix/ansible-roles/src/branch/unstable/munin/files/plugins/dhcp_pool). 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](https://gitea.evolix.org/evolix/EvoBSD/src/branch/dev/roles/collectd/files/dhcp_pool.pl). 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.