Dhcp:configuration isc-dhcp backend ldap
Un article de Free-4ever.
Sommaire |
Introduction
Ce document va expliquer la configuration redondée de deux serveurs ISC DHCP3 avec un stockage dans un serveur LDAP plutôt que dans des fichiers texte.
Pour cela, il faut utiliser le patch ISC DHCPd LDAP venant de http://www.lunytune.net/isc-ldap.html. Dans FreeBSD, le port isc-dhcp3-server inclut le patch et il suffit de l'installer comme n'importe quel port avec l'option DHCP_LDAP.
Sur une Debian, il faudra utiliser apt-get source dhcp3-server puis appliquer le patch à la main.
Dans la suite de ce document, tout sera basé sur un FreeBSD.
Prérequis
Il faudra biensûr avoir deux serveurs LDAP fonctionnels. Pour cela, si vous souhaitez utiliser OpenLDAP slapd, vous pouvez suivre le document suivant: Configuration SLAPD en réplication.
Du côté de ISC DHCP3, j'ai installé le port isc-dhcp3-server en sélectionnant l'option DHCP_LDAP.
Avoir lu les documents: Configuration ISC DHCP3 et Configuration ISC DHCP3 redondé pourrait être une bonne idée dans le mesure où je ne reviendrais pas sur l'utilité des paramètres de configuration d'un serveur ISC DHCP3 !
Le fichier dhcpd.conf
Le fichier sera complètement différent d'un fichier de configuration standard dans la mesure où l'on va se contenter de lui indiquer le serveur LDAP, le base DN avec un login et un mot de passe si nécessaire.
Cela sera de la forme suivante:
# Le serveur LDAP ldap-server "localhost"; # Le port utilisé ldap-port 389; # Le DN de l'utilisateur que l'on utiliser pour aller lire l'arbre LDAP ldap-username "cn=dhcpadmin,ou=dhcp,o=free-4ever,dc=net"; # Son password ldap-password "dhcppassword"; # Le base DN de la branche où toutes les informations sur le DHCP seront stockées ldap-base-dn "ou=dhcp,o=free-4ever,dc=net"; # La méthode: si on met dynamique, le serveur DHCP va interroger l'arbre LDAP à chaque fois # Il n'y a donc pas besoin de redémarrer quand on ajoute une entrée ldap-method dynamic; # Le fichier de log où l'on voit la configuration que le serveur DHCP construit à partir des informations qu'il va lire dans le LDAP ldap-debug-file "/var/log/dhcp-ldap-startup.log";
Avec cela, notre serveur DHCP est prêt à fonctionner. Mais il faut encore ajouter les fiches dans le serveur LDAP.
Il ne faut pas redémarrer de suite car il ne trouverait pas les informations minimums qui lui sont nécessaires et donc on aurait des messages d'erreurs et le service ne démarrerait pas !
Sur les deux serveurs DHCP, les fichiers de configuration seront identiques !
Le fichier slapd.conf
Il n'y aura que peu de modifications à faire à la configuration de slapd.
Voici un extrait du fichier de configuration:
[...]
# On ajoute le support des attributs et objectclass pour le dns
include /usr/local/etc/openldap/schema/dhcp.schema
[...]
# On ajoute l'indexation des paramètres en rapport avec le DHCP
index dhcpHWAddress eq
index dhcpClassData eq
[...]
# On ajoute un utilisateur spécial pour parcourir cette branche de l'arbre
# DHCP admin ACL
access to dn.subtree="ou=dhcp,o=free-4ever,dc=net"
by dn.regex="cn=dhcpadmin,ou=dhcp,o=free-4ever,dc=net" write
by * auth
Il ne faut pas oublier de redémarrer son daemon slapd pour que cela soit pris en compte.
Les ajouts dans l'annuaire LDAP
Maintenant nous allons voir quoi ajouter dans notre annuaire LDAP pour que nos serveurs DHCP fonctionnent correctement.
Pour toutes les manipulations avec les commandes LDAP client, vous pouvez vous reporter au document suivant: Utilisation des outils client. Tous les fichiers LDIF sont à ajouter avec la commande ldapadd.
Un container pour toutes les configurations
Nous allons créer une branche dans l'arbre pour mettre toutes les configurations des serveurs DHCP.
Le LDIF sera de la forme suivante:
dn: ou=dhcp,o=free-4ever,dc=net objectClass: top objectClass: organizationalUnit ou: dhcp description: All informations about DHCP
L'utilisateur dhcpadmin
Dans le fichier de configuration de slapd, nous avons ajouté un utilisateur dhcpadmin.
Voici son fichier ldif:
dn: cn=dhcpadmin,ou=dhcp,o=free-4ever,dc=net
objectClass: top
objectClass: person
userPassword: {SSHA}J8+mJREWzYkFDmXnZCTalBbQhq17xUzj
cn: dhcpadmin
sn: dhcpadmin user
Le service DHCP
Il va maintenant falloir définir un objet de type dhcpService qui va nous permettre définir les options de base de notre service DHCP et aussi quel serveur en fait partie.
Voici son fichier ldif:
# La définition de notre objet dn: cn=free-4ever,ou=dhcp,o=free-4ever,dc=ner cn: free-4ever objectClass: top objectClass: dhcpService # Le serveur qui sera le DHCP primaire # Le nom de l'objet LDAP qui représente le serveur doit être le même que ce que retourne la commande hostname sur le serveur dhcpPrimaryDN: cn=cordelia.free-4ever.net,ou=dhcp,o=free-4ever,dc=net # Le serveur qui sera le DHCP secondaire # Idem pour le nom de l'objet dhcpSecondaryDN: cn=titania.free-4ever.net,ou=dhcp,o=free-4ever,dc=net # Les paramètres de base d'un serveur DHCP dhcpStatements: ddns-update-style none dhcpStatements: default-lease-time 14400 dhcpStatements: max-lease-time 14400 dhcpStatements: authoritative
Le serveur primaire
Nous allons maintenant définir l'objet de type dhcpServer correspondant au serveur DHCP primaire.
Voici son fichier ldif:
# Définition de notre objet
dn: cn=cordelia.free-4ever.net,ou=dhcp,o=free-4ever,dc=net
cn: cordelia.free-4ever.net
objectClass: top
objectClass: dhcpServer
# Le service pour lequel ce serveur travaille
dhcpServiceDN: cn=free-4ever,ou=dhcp,o=free-4ever,dc=net
# Les paramètres de base d'un serveur DHCP avec la déclaration du failover en primaire
dhcpStatements: failover peer "dhcp-failover" { primary; address 192.168.1.250; port 520; peer address 192.168.1.253; peer port 520; \
max-response-delay 3 0; max-unacked-updates 10; load balance max seconds 3; mclt 1800; split 128; }
Le serveur secondaire
Nous allons maintenant définir l'objet de type dhcpServer correspondant au serveur DHCP secondaire.
Voici son fichier ldif:
# Définition de notre objet
dn: cn=titania.free-4ever.net,ou=dhcp,o=free-4ever,dc=net
cn: titania.free-4ever.net
objectClass: top
objectClass: dhcpServer
# Le service pour lequel ce serveur travaille
dhcpServiceDN: cn=free-4ever,ou=dhcp,o=free-4ever,dc=net
# Les paramètres de base d'un serveur DHCP avec la déclaration du failover en secondaire
dhcpStatements: failover peer "dhcp-failover" { secondary; address 192.168.1.253; port 520; peer address 192.168.1.254; peer port 520; \
max-response-delay 30; max-unacked-updates 10; }
Le container pour les réseaux
Nous allons maintenant définir l'objet de type dhcpSharedNetwork qui va contenir nos réseaux.
Voici son fichier ldif:
# Définition de notre objet dn: cn=networks,cn=free-4ever,ou=dhcp,o=free-4ever,dc=net cn: networks objectClass: top objectClass: dhcpSharedNetwork
Le réseau 192.168.1.0/24
Nous allons maintenant définir un object de type dhcpSubnet qui va représenter notre réseau 192.168.1.0/24.
Voici son fichier ldif:
# Définition de notre objet
dn: cn=192.168.1.0,cn=networks,cn=free-4ever,ou=dhcp,o=free-4ever,dc=net
cn: 192.168.1.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
# Le masque correspondant au réseau
dhcpNetMask: 24
# Les paramètres de base d'un serveur DHCP pour un réseau avec l'utilisation de notre failover
dhcpOption: broadcast-address 192.168.1.255
dhcpOption: routers 192.168.1.254
dhcpOption: domain-name "free-4ever.net"
dhcpOption: domain-name-servers 192.168.1.254
dhcpStatements: pool { failover peer "dhcp-failover"; deny dynamic bootp clients; range 192.168.1.2 192.168.1.126; }
Une réservation d'adresse IP fixe
Nous allons maintenant définir un object de type dhcpHost qui va représenter une machine qui aura comme adresse IP: 192.168.1.200 grâce à son adresse MAC 00:0D:5E:81:1A:D2.
Voici son fichier ldif:
# Définition de l'objet dn: cn=adrastee,cn=networks,cn=free-4ever,ou=dhcp,o=free-4ever,dc=net cn: adrastee objectClass: top objectClass: dhcpHost dhcpHWAddress: ethernet 00:0D:5E:81:1A:D2 dhcpStatements: fixed-address 192.168.1.200
Application des modifications
Il ne reste plus qu'à redémarrer les daemons ISC DHCP3. Il est conseillé pour un premier démarrage de démarrer le serveur esclave puis le maître. Dans les deux cas, la commande est la suivante:
# /usr/local/etc/rc.d/isc-dhcpd restart
Dans les logs système, on doit voir que ISC DHCP3 qui fait des requêtes sur le serveur LDAP. On pourra aussi aller lire le fichier: /var/log/dhcp-ldap-startup.log qui va contenir la configuration que ISC DHCP3 va se générer à partir des informations qu'il va lire dans le LDAP.
Pour les ajouts d'entrées, c'est dynamique ! Il n'est pas nécessaire de redémarrer le daemon ISC DHCP3.
Administration au quotidien
Pour faciliter l'administration de toutes ces entrées dans le LDAP, vous pouvez utiliser un logiciel du type phpLDAPadmin mais personnellement, je n'ai pas trop...
Sinon il y a aussi quelques petits scripts Perl que j'aime écrit vite fait sur un coin de bureau virtuel... Ca se passe par là: Scripts d'administration LDAP pour les daemons DHCP/DNS.
Mot de la fin
Voilà nos serveurs DHCP configuré avec un stockage en LDAP plutôt qu'en fichier texte.
Le plus gros avantage est que les modifications sont prises à chaud sans redémarrage. Sinon, je suis sûr que l'on peut en trouver plein d'autres... L'administration centralisée, etc...
Dernière modification: Silencer 7 février 2007 à 18:06 (CET)

