DHCP Failover : le plus simple et efficace ?

Hello,

Je cherche une méthode simple et efficace pour faire du dhcp failover. Étant donné que je gère mes serveur dhcp avec une base ldap et qu’il y a moulte vlan dessus, quand je dois rajouter un vlan sur mon dhcp, je dois redémarrer tout mon service (network et dhcpd), ce n’est pas très propre pour moi et mes besoins. Donc je voudrais faire du failover de façon à ce que cette manip soit totalement transparente pour mes enduser.

J’hésite entre faire du heartbeat et utiliser la clause failover peer “dhcp-failover”{}. J’aimerais éviter d’ajouter une couche logicielle (heartbeat), donc utiliser la clause prévue à cet effet me va bien, seulement la doc est pas très claire quant à son utilisation…

Quelle méthode avez vous utilisé et comment ?

Bonjour,

le dhcp en mode failover semble tout indiqué.

je l’ai utilisé sur un site pour la toip.

En plus c’est normalisé par une rfc, par conséquent c’est du solide.

L’installation est relativement simple et supporté par dhcp isc.

Par contre, ca fonctionne avec deux dhcps maître et esclave: seulement et il y a des subtilités concernant les états possibles de test serveurs lors d’un recouvrement (un coup de google).

a++

Hum, j’ai tenté de mettre ça en place, avec comme contrainte de me servir de ldap.

et je suis bloqué. Mon schema ldap contient bien tous les trucs pour faire du failover, mais ça ne va pas. J’ai suivi ce tuto et celui là. Pour intégrer ce bazar à la ldap, j’ai regardé par ici.

Bon, en résumer, si je prends mon arbre ldap sans dhcpfailover, je dois juste y rajouter une déclaration commune et une déclaration par réseau où je fais du failover, ce qui donne au sens ldap un arbre comme ça, pour mon serveur secondary(l’arbre change sur le primary , mais c’est juste les déclarations des serveur dhcp qui changent, le 116 prend la place du 115 et inversement).

[quote]dn: cn=DhcpConfig,ou=dhcp,dc=maboite
cn: DhcpConfig
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
dhcpOption: domain-name "domaine.local"
dhcpPrimaryDN: cn=virt-1128-116,ou=dhcp,dc=maboite
dhcpStatements: ddns-update-style ad-hoc
dhcpStatements: default-lease-time 86400
dhcpStatements: max-lease-time 604800
dhcpStatements: failover peer “dhcp_failover” { secondary; address 1
0.0.128.116; port 519; peer address 10.0.128.115; peer port 519
; max-response-delay 60; max-unacked-updates 10; mclt 3600;
split 128; load balance max seconds 3; }

dn: ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite
objectClass: organizationalUnit
objectClass: top
ou: pool

dn: cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24
cn: 10.0.128.0
dhcpOption: broadcast-address 10.0.128.255
dhcpOption: domain-name-servers x.x.x.33, x.x.x.34
dhcpOption: routers 10.0.128.254
dhcpRange: 10.0.128.1 10.0.128.253
dhcpStatements: failover peer “dhcp_failover”

dn: cn=virt-1128-115,cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 00:16:3e:8f:b5:ab
dhcpStatements: fixed-address 10.0.128.115
cn: virt-1128-115

dn: cn=virt-1128-116,cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 00:16:3e:f1:8d:16
dhcpStatements: fixed-address 10.0.128.116
cn: virt-1128-116

dn: cn=10.0.176.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24
cn: 10.0.176.0
dhcpOption: broadcast-address 10.0.176.255
dhcpOption: routers 10.0.176.254
dhcpOption: domain-name-servers x.x.x.33, x.x.x.34
dhcpRange: 10.0.176.1 10.0.176.253
dhcpStatements: failover peer “dhcp_failover”[/quote]

Et quand je veux démarrer le serveur 115 (le primary dont l’arbre ci-dessus correspond), voilà ce que dhcpd me dit :

[quote]dhcpd self-test failed. Please fix the config file.
The error was:
Internet Systems Consortium DHCP Server V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit isc.org/sw/dhcp/
Connecting to LDAP server localhost:389
Successfully logged into LDAP server localhost
Found dhcpServer LDAP entry 'cn=virt-1128-116,ou=dhcp,dc=maboite’
LDAP: Parsing dhcpServer options ‘cn=virt-1128-116,ou=dhcp,dc=maboite’ …
LDAP: Parsing dhcpService DN ’ ’ …
Found LDAP entry 'cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'cn=DhcpConfig,ou=dhcp,dc=maboite’
Sending config line 'ddns-update-style ad-hoc;
default-lease-time 86400;
max-lease-time 604800;
failover peer “dhcp_failover” { secondary; address 10.0.128.116; port 519; peer address 10.0.128.115; peer port 519; max-response-delay 60; max-unacked-updates 10; mclt 3600; split 128; load balance max seconds 3; }
option domain-name “domaine.local”;
'
LDAP line 4: secondary may not define load balance settings.
failover peer “dhcp_failover” { secondary; address 10.0.128.116; por
^
Found LDAP entry 'ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Found LDAP entry 'cn=10.0.176.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'cn=10.0.176.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Sending config line 'subnet 10.0.176.0 netmask 255.255.255.0 {
range 10.0.176.1 10.0.176.253;
failover peer “dhcp_failover”;
option broadcast-address 10.0.176.255;
option routers 10.0.176.254;
option domain-name-servers x.x.x.33, x.x.x.34;
'
LDAP line 7: failover peers may only be defined in shared-network
range 10.0.176.1 10.0.176.253;
^
declarations and the outer scope.
Sending config line '}
'
Found LDAP entry 'cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Sending config line 'subnet 10.0.128.0 netmask 255.255.255.0 {
range 10.0.128.1 10.0.128.253;
failover peer “dhcp_failover”;
option broadcast-address 10.0.128.255;
option domain-name-servers x.x.x.33, x.x.x.34;
option routers 10.0.128.254;
'
LDAP line 14: failover peers may only be defined in shared-network
range 10.0.128.1 10.0.128.253;
^
declarations and the outer scope.
Sending config line '}
'
LDAP: cannot parse dhcpService entry 'cn=dhcpConfig,ou=dhcp,dc=maboite’
Configuration file errors encountered – exiting
[/quote]

Je sais que je teste souvent des trucs exotiques, mais là, ça devrait marcher. A noter que je n’étais pas très bien sure d’une chose : la déclaration de failover peer “dhcp_failover” en dhcpStatements. On peut ajouter un attribut qui s’appelle dhcpFailOverPeerDN, mais il prend comme argument un adressage ldap… je ne vois pas vers quelle branche lui dire d’aller. Du coup, j’ai déclaré mon failover avec un dhcpStatements.

Si quelqu’un peut m’aider… Je comprends pas ce message d’erreur : failover peers may only be defined in shared-network. En gros, que mes serveur dhcp de failover doivent être déclarés dans le sous réseau où je les appel ? C’est déjà le cas de toute façon, non ?

Bonjour,

Je n’avais pas utilisé de ldap mais un simple fichier texte

Par contre il me semble que la directive “failover peer” devait être placé dans une section de type pool.

Par exemple:
subnet 10.0.0.0 netmask 255.255.255.0
{
option routers 10.0.0.1;

    pool
            {
            failover peer "foo";
            deny dynamic bootp clients;

            range 10.0.0.100  10.0.0.200;
            }
    }

En lisant ta configuration, il me semble que cela ne soit pas le cas, je crois.

En lisant la documentation de dhcpd.conf, la directive s’applique uniquement à un pool.

Peut-être essayer d’inserer un pool (dhcpPool).

Ci ca peut-aider.

A+

en fait, j’ai ceci en fichier plat qui fonctionne :

subnet 10.0.128.0 netmask 255.255.255.0 { pool { failover peer "dhcp_failover"; range 10.0.128.1 10.0.128.250 } option subnet-mask 255.255.255.0; option routers 10.0.128.254; }

Si je m’en tiens à la doc que j’ai lu, il faudrait donc que je transforme ça au format ldap, et suivant l’exemple de la doc, ça donnerait ceci :

dn: cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite objectClass: top objectClass: dhcpPool objectClass: dhcpOptions cn: 10.0.128.0 dhcpRange: 10.0.128.1 10.0.128.250 dhcpStatements: failover peer "dhcp_failover" dhcpStatements: deny dynamic bootp clients

On retrouve l’objectclass dhcpool, j’imagine que c’est conforme à ce qu’attend dhcp. Par contre, quand j’utilise cette conf, j’ai le message suivant dans dhcp : LDAP line 5: pool declared outside of network

Mon pool est déclaré en dehors de mon réseau ? Là j’avoue ne pas très bien saisir…

ps: le message d’erreur exact est le suivant :

[quote]Found LDAP entry 'ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Found LDAP entry 'cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Parsing external DNs for 'cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite’
Sending config line 'pool {
range 10.0.128.1 10.0.128.250;
failover peer “dhcp_failover”;
deny dynamic bootp clients;

'
LDAP line 5: pool declared outside of network
pool
^
Sending config line '}
'
LDAP: cannot parse dhcpService entry 'cn=dhcpConfig,ou=dhcp,dc=maboite’
Configuration file errors encountered – exiting[/quote]
On voit bien qu’il prend bien en compte le pool, il l’envoi de la même façon qu’il l’enverrai avec un fichier plat. Ce qui est troublant, c’est que cette conf façon fichier plat fonctionne, donc ce n’est pas un problème “réseau”.

Bonjour,

Il faut que l’objet dn: cn=10.0.128.0,ou=pool,cn=DhcpConfig,ou=dhcp,dc=maboite soit le fils d’un objet de type dhcpSubnet pour traduire le fait que ton pool est déclaré dans un subnet.

Cela ne semble pas le cas au vu de ton fichier ldiff (fichier partiel)

Voici un exemple à l’url suivant: howto-linux.tbugier.fr.eu.org/wi … _avec_LDAP.

Cordialement.

YES ! c’était ça, mille merci :slightly_smiling: