Nous avons deux serveurs DHCP isc-dhcpd configurés pour de la redondance après panne (failover). On nous informe qu'il n'est plus possible d'obtenir une adresse IP sur l'un des réseaux Wi-Fi. Les autres réseaux (sans fil et filaires) ne sont pas impactés.
Nous regardons le journal sur nos deux serveurs. Ils sont remplis (et se remplissent à grande vitesse) de ce message :
dhcpd: DHCPDISCOVER from 00:00:5E:00:53:01 via 192.0.2.1: peer holds all free leases
Au total, deux-trois réseaux subissent ce désagrément. En creusant, on s'aperçoit que ces erreurs se produisent depuis 4 à 6 jours, mais que c'est récent (moins d'un jour) pour le réseau Wi-Fi qui fait l'objet de l'investigation.
Cela peut signifier que nos plages d'IP dynamiques (range
) sont sous-dimensionnées par rapport à notre nombre d'utilisateurs (ce qui explique que nos réseaux Wi-Fi sont les premiers visés : de nos jours, tout le monde a 20 objets sur lui qui veulent se connecter à du réseau sans fil) ou que nos baux DHCP ne sont pas libérés / rendus (peut-être car nous octroyons une durée trop longue et que les clients ne les rendent pas explicitement, ce qui fait que les IP ne sont pas remises dans le pot commun ?).
Je fais cette réflexion à froid, mais, lors de cet incident, nous avons décidé de stopper le service sur chacun de nos serveurs DHCP, de supprimer le journal des baux octroyés (/var/lib/dhcp/dhcpd.leases
) puis de démarrer le service DHCP. Évidemment, je ne recommande pas cette méthode, car elle peut mettre la grouille dans un réseau puisqu'on se repose exclusivement sur la capacité d'un système connecté au réseau de tester l'IP que lui a octroyée le DHCP et de la refuser (DHCPNAK) si elle est déjà utilisée (ce qui va être en grande majorité le cas), ce qui constitue une perte de la maîtrise de ton réseau.
Les journaux sont désormais saturés d'un autre message d'erreur :
dhcpd: DHCPDISCOVER from 00:00:5E:00:53:01 via 192.0.2.1: not responding (recovering)
Au début, nous ne nous inquiétions pas : ce message peut signifier que le serveur DHCP ne répond pas aux requêtes le temps de construire sa base de données suite à un failover. Rien de dramatique si ça dure moins de 30 secondes - 1 minute. Mais ce problème perdure.
Je décide de revenir sur le message d'erreur initial (« peer holds all free leases »). Cela ne signifierait-il pas que nos deux serveurs DHCP ne communiquent plus entre eux pour s'informer mutellement des adresses IPs distribuées ?
Je regarde la configuration : nos serveurs sont configurés pour échanger leur état sur le port TCP/519. Un petit ss -taupen | grep ":519"
met en évidence que nos deux serveurs écoutent sur ce port, mais qu'il y a aucune connexion d'un serveur vers l'autre.
Je regarde la configuration (/etc/dhcp/dhcpd.conf
) de chaque serveur : suite à une erreur récente (moins d'un jour) dans la modification d'un script de mise en production de ce fichier à partir d'une base de donnée maison, l'entête de chaque fichier de conf' est identique. Donc les deux serveurs croient avoir le rôle de primaire, la même IP et croient devoir contacter un autre serveur qu'eux sur une autre IP afin d'effectuer de la redondance en cas de panne.
Je corrige, je redémarre les services et… la distribution d'adresses IP reprend quasi instantanément son cours. \o/
Note : les adresses MACs citées ci-dessus sont des adresses MAC réservées et destinées à la documentation. Même chose pour les adresses IP.