Projet

Général

Profil

Tâche #23902

Scénario #24479: Correction du bug DHCP addresses fixes

Fonctionnement souhaité pour un comportement satisfaisant le référentiel sécurité

Ajouté par Thierry Bertrand il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
14/05/2018
Echéance:
% réalisé:

100%

Temps estimé:
20.00 h
Restant à faire (heures):
0.0

Révisions associées

Révision 8dc55436 (diff)
Ajouté par Benjamin Bohard il y a plus de 5 ans

Implement static range functionnality

Besides assigning IP outside pools for hosts, static range are implemented
to give administrator the opportunity to specify dhcp parameters and
options for a set of host with static IP.

Ref #23902

Historique

#1 Mis à jour par Philippe Carre il y a presque 6 ans

  • Statut changé de Nouveau à En cours
  • % réalisé changé de 0 à 80
  • Restant à faire (heures) changé de 2.0 à 1.0

Récapitulatif des spécificités (problemes?) de eole-dhcp 2.6.2

Utilisation des pools

Il ya à mon avis une incohérence dans la gestion des pools.
Les infos globales et les valeurs communes pour tout le réseau (routers, ntp-server) seront appliquées sur tous les postes (statiques et dynamiques). Donc si des pools (dans un réseau) sont déclarés c'est bien pour différencier les infos de ces plages d'adresses. Un pool est défini par ip-basse et ip_haute , donc dans la plage dynamique.
Sauf que, on recommande aux services de faire de l'adressage statique, ce qu'ils font! (En tous cas les tickets en cours, de services utilisant eole-dhcp 2.6.2, le montrent).
La gestion des pools (avec des infos spécifiques) dans un réseau est possible, l'adressage statique complet est possible ( interdire_hotes_inconnus=oui) mais l'association ip/MAC n'est pas garantie! C'est le vrai pb de cette version !!
Voir https://dev-eole.ac-dijon.fr/issues/20083#note-6
Les services ne comprennent pas ce mode de fonctionnement : ils attribuent une ip à un poste (parce que c'est possible, et parce que ce poste doit être placé dans le pool concerné) et celui-ci récupère une autre ip !

Se pose également le pb de la connaissance des adresses attribuées : sauf à étudier les fichiers de log, on ne peut pas fournir de manière exacte l'identité d'un poste à partir de son adresse.

EAD3

Le cas est à mon sens moins "perturbant" avec EAD3 , puisqu'on peut associer un poste à un nom de pool (et non une ip pas forcément attribuée). Ceci-dit, ça ne résout pas le pb de la non connaissance d'un poste par son ip : le seul moyen reste la recherche dans les logs.
Par ex, dans EAD3 une réservation est :

Nom       Adresse IP ou Plage     Adresse MAC
poste-2   plage-ldap              2c:44:fd:65:03:02

(pour info, une réservation n'est possible que si interdire_hotes_inconnus=oui)
Est-ce que c'est acceptable de faire de l'adressage statique sans donner une ip fixe ?!

Aute pb de l'EAD3 : il n'est toujours pas possible d'utiliser des majuscules dans le nom des postes. Tel quel , on ne peut pas recommander aux services d'utiliser l'EAD3 !
Voir https://dev-eole.ac-dijon.fr/issues/23324

Pour finir, l'attribution d'adresses statiques dans la plage statique (donc hors plage ip_basse / ip_haute) est identique au fonctionnement des anciennes versions, et ne pose pas de pb.
Exemple de déclaration :

# dhcp statique
host poste-2 { hardware ethernet 2c:44:fd:65:03:02; }
host poste-50 { hardware ethernet 2c:44:fd:65:03:50; fixed-address 10.200.3.50; }

1ere ligne : adressage statique dans le pool -> pas d'ip associée mais le poste sera bien dans le pool
2eme ligne : pur adressage statique, hors pool
(quand la conf est réalisée depuis EAD3, les infos sont stockés directement dans le fichier dhcpd.conf et non plus dans fixed-address/fixed-addresses.txt)

Ceci-dit , eole-dhcp 2.6.2 , sans utilisation de plusieurs pools a exactement le même fonctionnement que les anciennes versions !!

baux en cours et LOG

Les baux en cours , donc l'adressage dynamique, sont visibles dans le fichier /var/lib/dhcp/dhcpd.lease

Les adresses attribuées (dynamiques et statiques) sont clairement écrites dans le fichier de log dhcpd.info.log
Ex:
2018-05-28T03:10:54.067910+02:00 ssl-auth-doo1.monreseau.p2 dhcpd[: DHCPDISCOVER from 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
2018-05-28T03:10:54.068189+02:00 ssl-auth-doo1.monreseau.p2 dhcpd]: DHCPOFFER on 172.26.63.237 to 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
2018-05-28T03:10:54.069898+02:00 ssl-auth-doo1.monreseau.p2 dhcpd : DHCPREQUEST for 172.26.63.237 (172.26.62.1) from 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
2018-05-28T03:10:54.070163+02:00 ssl-auth-doo1.monreseau.p2 dhcpd : DHCPACK on 172.26.63.237 to 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
DHCPOFFER : ip proposée

Puis :
2018-05-29T11:11:01.533855+02:00 ssl-auth-doo1.monreseau.p2 dhcpd : DHCPREQUEST for 172.26.63.237 from 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
2018-05-29T11:11:01.534120+02:00 ssl-auth-doo1.monreseau.p2 dhcpd : DHCPACK on 172.26.63.237 to 02:00:8f:17:22:ba (WIN-form-f1) via enp6s0f0
DHCPREQUEST a mi-bail , et confirmation, envoi de nouvelles infos, ... par le serveur : DHCPACK

gestion des adresses wins

Pour rappel , sur eSBL/eCDL on ne peut pas déclarer une adresse de serveur wins. Ou pour être précis, ce sera tjrs l'adresse ip de l'Interface-0 qui sera renvoyé comme adresse de serveur wins!
Voir https://dev-eole.ac-dijon.fr/issues/23598

#2 Mis à jour par Emmanuel IHRY il y a presque 6 ans

  • Sujet changé de spécifier le fonctionnement souhaité pour un comportement satisfaisant le référentiel sécurité à Fonctionnement souhaité pour un comportement satisfaisant le référentiel sécurité
  • Tâche parente changé de #23898 à #24028

#3 Mis à jour par Emmanuel IHRY il y a presque 6 ans

  • Projet changé de eole-dhcp à Distribution EOLE
  • Assigné à changé de Philippe Carre à Benjamin Bohard
  • Restant à faire (heures) changé de 1.0 à 20.0
  • Temps estimé changé de 2.00 h à 20.00 h

#4 Mis à jour par Emmanuel IHRY il y a presque 6 ans

  • Statut changé de En cours à Nouveau

#5 Mis à jour par Philippe Carre il y a presque 6 ans

Ajout d'un nouveau cas, repéré par un collègue , sur un serveur en prod :

Autre chose, bug constaté et non référencé dans la tâche eole que tu m'as fait suivre:
Problème rencontré avec la version Eole 2.6.2 lors du déploiement d’un serveur DHCP:
Nous avons rencontré un problème en essayant d’ajouter, depuis l’EAD, une nouvelle ip possible à une machine dont la l’adresse Mac est déjà présente dans les fichiers de configuration /var/lib/eole/config/dhcp.conf et /etc/dhcp/fixed-address/fixed-adresses.txt.
Lors de l’ajout de la machine (nouveau nom, nouvelle IP, même Mac), l’autre adresse attribuée à cette mac est supprimée. On ne peut donc avoir 2 adresses ip attribuées pour une adresse Mac pour la gestion des machines nomades (Problème avec le fichier /etc/dhcp/fixed-address/fixed-adresses.txt)

#6 Mis à jour par Philippe Carre il y a presque 6 ans

Pour info, mon escroquerie dhcp 2.5.2 est la suivante :

--- distrib/dhcpd.conf    2016-04-28 17:27:26.000000000 +0200
+++ modif/dhcpd.conf    2018-01-30 17:36:10.799786251 +0100
@@ -50,6 +50,8 @@
 }
 %end if

+shared-network allNet {
+
 %set %%subnets = {}
 %for %%subnet in %%adresse_network_dhcp
 %silent %%subnets.setdefault((%%str(%%subnet), %%subnet.adresse_netmask_dhcp),{})
@@ -89,7 +91,7 @@
  %if not %%len(%%gateway) == 0
     option routers %%custom_join(%%gateway, ' ');
  %end if
-    option subnet-mask %%subnet[1];
+    option subnet-mask %%adresse_netmask_eth2;
  %set %%domain = [g for g in %%subnets[%%subnet]['domain'] if g != None]
  %if not %%len(%%domain) == 0
     option domain-name "%%domain[0]";
@@ -168,3 +170,5 @@
 }

 %end for
+
+}

Le subnet global peut être divisé en plusieurs subnet mais est vu comme un seul réseau. C'est possible avec "shared-network allNet" :
The shared-network statement is used to inform the DHCP server that some IP subnets actually share the same physical network.

ça laisse la possibilité de définir plusieurs véritables plages statiques (hors pool dynamique donc) avec leurs propres infos.
Le 2eme ajout du patch change le masque renvoyé aux postes. Dans ce cas il faut bien que les postes récupèrent le masque du Lan (eth2 forcément chez nous) et pas le masque déclaré dans la conf dhcp.

Mais je ne sais pas si ça peut t'aider, à priori ça remet en cause toute la gestion actuelle des pools ?

#7 Mis à jour par Benjamin Bohard il y a plus de 5 ans

  • Statut changé de Nouveau à En cours

#8 Mis à jour par Benjamin Bohard il y a plus de 5 ans

La modification entreprise comprend :
  • un changement dans le dictionnaire pour déterminer si la plage renseignée doit être dynamique (pool + range dans la configuration de bind) ou statique (group + hosts) ;
  • la modification de l’action pour l’EAD3 (pas de modification prévue pour l’EAD2 : incompatible) ;
  • la modification du template pour encadrer les déclaration de hosts avec un group et des paramètres spécifiques (DNS, etc.).

La partie la plus délicate est la modification de l’action EAD3.

#9 Mis à jour par Emmanuel IHRY il y a plus de 5 ans

  • Tâche parente changé de #24028 à #24479

#10 Mis à jour par Benjamin Bohard il y a plus de 5 ans

  • Statut changé de En cours à Résolu
  • % réalisé changé de 80 à 100
  • Restant à faire (heures) changé de 20.0 à 0.0

À tester avec un jeu de tests plus représentatifs (voir avec Philippe en cours de semaine)

#11 Mis à jour par Benjamin Bohard il y a plus de 5 ans

  • Statut changé de Résolu à Fermé

Vérification de l’action EAD3 reportée.

#12 Mis à jour par Philippe Carre il y a plus de 5 ans

1ere salve!

j'ai testé :
- un réseau 10.10.10.0 /24 , ip_basse 10.10.10.100 ip_haute 10.10.10.110
nom_plage_dhcp="cr-ddtwin"

Distribuer des IP statiques pour cette plage (compatible EAD3 seulement) -> non

Dans EAD3 :

                Nom        Adresse basse    Adresse haute    Accès restreint    Type de plage
10.10.10.0/255.255.255.0    cr-ddtwin    10.10.10.100    10.10.10.110    non        dynamique
172.26.61.128/255.255.255.192    plage1        172.26.61.130    172.26.61.190    non        dynamique

pour le poste centos_dhcp

  • non déclaré : centos-dhcp -> 10.10.10.100 OK
  • déclaration dans EAD3 avec l'ip 10.10.10.105 (plage dyn.) : "L’adresse IP 10.10.10.105 n’est pas attribuable" (et, on ne peut pas déclarer un nom de Plage. Normal: adressage_statique="non" )
  • modification d'un poste déjà déclaré, changement de son ip en 10.10.10.103 : "L’adresse IP 10.10.10.103 n’est pas attribuable"
  • déclaration dans EAD3 avec l'ip 10.10.10.145 : centos-dhcp -> 10.10.10.145

On n'autorise pas l'adressage statique dans la plage dyn, on ne peut pas en ajouter !! OK

Distribuer des IP statiques pour cette plage (compatible EAD3 seulement) -> oui

Dans EAD3 :

                Nom        Adresse basse    Adresse haute    Accès restreint    Type de plage
10.10.10.0/255.255.255.0    cr-ddtwin    10.10.10.100    10.10.10.110    non        statique
172.26.61.128/255.255.255.192    plage1        172.26.61.130    172.26.61.190    non        dynamique

Tous les postes déjà présents dans la plage 'cr-ddtwin' doivent être 'MODIFIER' pour récupérer une ip attribuée dans EAD3. Un poste a donc maintenant obligatoirement une adresse ip désignée. Par ex,
avant : host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; }
après : host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; fixed-address 10.10.10.104; } -> IP désignée dans la liste des ip dispo.

Ajouter une réservation : w10-cp2i-107 cr-ddtwin 02:00:91:89:fb:37 > ip 10.10.10.107 attribuée , 1ere ip dispo

pour le poste centos_dhcp

  • déclaration dans EAD3 avec l'ip 10.10.10.145 : centos-dhcp -> 10.10.10.145 OK
  • modification de la réservation : suppression de 10.10.10.145 et ajout de 'cr-ddtwin' > ip 10.10.10.108 désignée :: centos-dhcp -> 10.10.10.108
  • modification de la réservation : suppression de cr-ddtwin' , modif de l'ip 10.10.10.109 > le poste est replacé dans cr-ddtwin :: centos-dhcp -> 10.10.10.109 OK
  1. suppression de centos-dhcp puis ajout de centos-dhcp 10.10.10.110 02:00:91:89:fb:44 > cr-ddtwin n'est pas ajouté
    DAns dhcp.conf , la déclaration n'est pas dans le groupe "group cr-ddtwin { " mais dans la section "# déclaration des hôtes statiques hors plage statique"
  2. suppression complète de centos-dhcp, plus de déclaration statique donc. Coté serveur DHCP le résultat est : "DHCPDISCOVER from 02:00:91:89:fb:44 via ens5: network 10.10.10.0/24: no free leases " L'ajout du poste est impossible.
    Donc quand on autorise l'adressage statique dans la plage dyn on ne fait que du statique.
    Du coup, est-ce que 'Interdire aux hotes inconnus... " (Accès restreint à Non, dans ce cas) a encore un sens ?? En Type de plage statique, l'option n'a plus d'effet ; En Type de plage dynamique on peut donc interdire tout accès dynamique , mais est ce que ça a encore un intérêt ?

Je me fais un poste Win, et je vérifie que toutes les infos renseignées sont bien celles envoyées au poste.

#13 Mis à jour par Philippe Carre il y a plus de 5 ans

2eme salve :

Distribuer des IP statiques pour cette plage (compatible EAD3 seulement) -> oui

ajout de w7-pcarre 10.10.10.108 02:00:91:89:fb:47 > cr-ddtwin n'est pas ajouté

# déclaration des hôtes des plages statiques
group cr-ddtwin {
  option subnet-mask 255.255.255.0;
  option routers 10.10.10.1;
  option domain-name "cete-ouest.i2";
  option domain-name-servers 10.10.10.1;
  option netbios-name-servers 172.26.26.26;
  option netbios-dd-server 172.26.26.26;
  option netbios-node-type 8;
  option ntp-servers 10.10.10.1;
  default-lease-time 144000;
  max-lease-time 144000;

  host w7-cp2i-02 { hardware ethernet 02:00:91:89:fb:01; fixed-address 10.10.10.102; }
  host w7-cp2i-03 { hardware ethernet 02:00:91:89:fb:03; fixed-address 10.10.10.103; }
  host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; fixed-address 10.10.10.104; }
  host w7-cp2i-9 { hardware ethernet 02:00:91:89:fb:16; fixed-address 10.10.10.106; }
  host w7-cp2i-6 { hardware ethernet 02:00:91:89:fb:19; fixed-address 10.10.10.101; }
  host w10-cp2i-106 { hardware ethernet 02:00:91:89:fb:34; fixed-address 10.10.10.100; }
  host w10-cp2i-107 { hardware ethernet 02:00:91:89:fb:37; fixed-address 10.10.10.107; }
}

# déclaration des hôtes statiques hors plage statique
host uc-cp2i-04 { hardware ethernet 02:00:91:89:fb:12; fixed-address 10.10.10.141; }
host w7-cp2i-11 { hardware ethernet 02:00:91:89:fb:14; fixed-address 10.10.10.142; }
host w7-cp2i-8 { hardware ethernet 02:00:91:89:fb:17; fixed-address 10.10.10.133; }
host w7-cp2i-7 { hardware ethernet 02:00:91:89:fb:18; fixed-address 10.10.10.134; }
host w10-cp2i-105 { hardware ethernet 02:00:91:89:fb:33; fixed-address 10.10.10.105; }
host win7-pcarre { hardware ethernet 02:00:91:89:fb:47; fixed-address 10.10.10.108; }

host win7-pcarre ajouté hors group. Et hors subnet !!
Le poste ne récupère effectivement aucune info, sauf l'ip.

suppression et ajout de w7-pcarre cr_ddtwin 02:00:91:89:fb:47 > 10.10.10.108 désignée

# déclaration des hôtes des plages statiques
group cr-ddtwin {
  option subnet-mask 255.255.255.0;
  option routers 10.10.10.1;
  option domain-name "cete-ouest.i2";
  option domain-name-servers 10.10.10.1;
  option netbios-name-servers 172.26.26.26;
  option netbios-dd-server 172.26.26.26;
  option netbios-node-type 8;
  option ntp-servers 10.10.10.1;
  default-lease-time 144000;
  max-lease-time 144000;

  host w7-cp2i-02 { hardware ethernet 02:00:91:89:fb:01; fixed-address 10.10.10.102; }
  host w7-cp2i-03 { hardware ethernet 02:00:91:89:fb:03; fixed-address 10.10.10.103; }
  host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; fixed-address 10.10.10.104; }
  host w7-cp2i-9 { hardware ethernet 02:00:91:89:fb:16; fixed-address 10.10.10.106; }
  host w7-cp2i-6 { hardware ethernet 02:00:91:89:fb:19; fixed-address 10.10.10.101; }
  host w10-cp2i-106 { hardware ethernet 02:00:91:89:fb:34; fixed-address 10.10.10.100; }
  host w10-cp2i-107 { hardware ethernet 02:00:91:89:fb:37; fixed-address 10.10.10.107; }
  host win7-pcarre { hardware ethernet 02:00:91:89:fb:47; fixed-address 10.10.10.108; }
}

# déclaration des hôtes statiques hors plage statique
host uc-cp2i-04 { hardware ethernet 02:00:91:89:fb:12; fixed-address 10.10.10.141; }
host w7-cp2i-11 { hardware ethernet 02:00:91:89:fb:14; fixed-address 10.10.10.142; }
....

Là le poste est dans le group.
Tout est ok sur le poste.

suppression de 10.10.10.108 et ajout de 10.10.10.135

# déclaration des hôtes des plages statiques
group cr-ddtwin {
  option subnet-mask 255.255.255.0;
  option routers 10.10.10.1;
  option domain-name "cete-ouest.i2";
  option domain-name-servers 10.10.10.1;
  option netbios-name-servers 172.26.26.26;
  option netbios-dd-server 172.26.26.26;
  option netbios-node-type 8;
  option ntp-servers 10.10.10.1;
  default-lease-time 144000;
  max-lease-time 144000;

  host w7-cp2i-02 { hardware ethernet 02:00:91:89:fb:01; fixed-address 10.10.10.102; }
  host w7-cp2i-03 { hardware ethernet 02:00:91:89:fb:03; fixed-address 10.10.10.103; }
  host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; fixed-address 10.10.10.104; }
  host w7-cp2i-9 { hardware ethernet 02:00:91:89:fb:16; fixed-address 10.10.10.106; }
  host w7-cp2i-6 { hardware ethernet 02:00:91:89:fb:19; fixed-address 10.10.10.101; }
  host w10-cp2i-106 { hardware ethernet 02:00:91:89:fb:34; fixed-address 10.10.10.100; }
  host w10-cp2i-107 { hardware ethernet 02:00:91:89:fb:37; fixed-address 10.10.10.107; }
}

# déclaration des hôtes statiques hors plage statique
host uc-cp2i-04 { hardware ethernet 02:00:91:89:fb:12; fixed-address 10.10.10.141; }
host w7-cp2i-11 { hardware ethernet 02:00:91:89:fb:14; fixed-address 10.10.10.142; }
host w7-cp2i-7 { hardware ethernet 02:00:91:89:fb:18; fixed-address 10.10.10.134; }
host w10-cp2i-105 { hardware ethernet 02:00:91:89:fb:33; fixed-address 10.10.10.105; }
host win7-pcarre { hardware ethernet 02:00:91:89:fb:47; fixed-address 10.10.10.135; }

host win7-pcarre ajouté hors group . Et hors subnet !!
Le poste ne récupère effectivement aucune info, sauf l'ip.

Distribuer des IP statiques pour cette plage (compatible EAD3 seulement) -> non

w7-pcarre 10.10.10.135 02:00:91:89:fb:47

# déclaration des hôtes des plages statiques

# déclaration des hôtes statiques hors plage statique
host uc-cp2i-04 { hardware ethernet 02:00:91:89:fb:12; fixed-address 10.10.10.141; }
host w7-cp2i-02 { hardware ethernet 02:00:91:89:fb:01; fixed-address 10.10.10.102; }
host w7-cp2i-11 { hardware ethernet 02:00:91:89:fb:14; fixed-address 10.10.10.142; }
host w7-cp2i-03 { hardware ethernet 02:00:91:89:fb:03; fixed-address 10.10.10.103; }
host w7-cp2i-10 { hardware ethernet 02:00:91:89:fb:15; fixed-address 10.10.10.104; }
host w7-cp2i-9 { hardware ethernet 02:00:91:89:fb:16; fixed-address 10.10.10.106; }
host w7-cp2i-7 { hardware ethernet 02:00:91:89:fb:18; fixed-address 10.10.10.134; }
host w7-cp2i-6 { hardware ethernet 02:00:91:89:fb:19; fixed-address 10.10.10.101; }
host w10-cp2i-105 { hardware ethernet 02:00:91:89:fb:33; fixed-address 10.10.10.105; }
host w10-cp2i-106 { hardware ethernet 02:00:91:89:fb:34; fixed-address 10.10.10.100; }
host w10-cp2i-107 { hardware ethernet 02:00:91:89:fb:37; fixed-address 10.10.10.107; }
host win7-pcarre { hardware ethernet 02:00:91:89:fb:47; fixed-address 10.10.10.135; }

# déclaration des hôtes autorisés dans les plages dynamiques

# pas de dhcp sur la zone scribe
subnet 192.168.210.0 netmask 255.255.255.0 {
}

subnet 10.10.10.0 netmask 255.255.255.0 {
  option subnet-mask 255.255.255.0;

   # plages d'ip
  pool {
     option routers 10.10.10.1;
     option domain-name "cete-ouest.i2";
     option domain-name-servers 10.10.10.1;
     option netbios-name-servers 172.26.26.26;
     option ntp-servers 10.10.10.1;
     range 10.10.10.100 10.10.10.110;
     default-lease-time 3600;
     max-lease-time     144000;

    }
}

host win7-pcarre ajouté hors group . Et hors subnet !!
Le poste ne récupère effectivement aucune info, sauf l'ip.

suppression de w7-pcarre 10.10.10.135

Le poste récupère l'ip 10.10.10.101 avec les bonnes infos du pool.

Au final, il y a plusieurs cas d'adressage statique ou les déclarations sont à mon avis mal placées dans le fichier dhcpd.conf.

Formats disponibles : Atom PDF