Architecture réseau: "best practices"

Bonjour,

Je suis entrain de finir l’installation d’un serveur pxe sur un lan (le nombre de machines n’est pas important) par contre là où se justifie mon message est que j’ai besoin d’un conseil quant aux best practices s’appliquant à ma situation et surtout la plus conforme .

Pour l’instant j’ai un serveur dhcp pfsense qui se charge de distribuer les adresses sur la plage (adresses classe b) définie. Dans le cadre de l’installation du serveur pxe je dois configurer un serveur dhcp se chargeant - en mettant les options adéquates - de gérer les appels pxe sur une plage définie.

Pourriez vous me dire ce que vous pensez serait la meilleure solution pour moi?

Je précise que pfsense est bien évidemment le gateway.

Bonjour,
Le serveur DHCP peut faire les deux fonction sans recouvrement.
Quand une machine fait une demande au DHCp, l’accès PXE et l’accès uniquement dhclient n’est pas le même dans les trames. Donc la réponse du serveur de calera en fonction de la demande.
Peut importe ton découpage de plage à partir du moment ou les réseaux sont bien définis.

Un serveur DHCP ne considère que les réseaux auquel il est directement raccordé. Si une machine devait se trouver dans une autre sous-réseau, il faut alors que le routeur intermédiaire dispose d’un relai DHCP.

i.e.: si tu as tout dans un réseau 192.168.10/24 par exemple, tu peux très bien avoir un pool/range de 192.168.1.10 à 192.168.1.20 pour le PXE et ensuite 192.168.1.20 à 192.168.1.200 pour tes machines. Le premier aura sa définition dans la partie PXE, le second uniquement dans le pool du réseau. Un réseau peut très bien avoir deux pool avec des conditions de délivrance.

l’utilité de séparer les réseau peut être de différencier des accès au niveau d’un pare-feu ou d’un équipement de sécurité comme un proxy ou un reverse proxy, ou encore un vpn, ou un accès applicatif et surement d’autres auxquels je ne pense pas dans l’immédiat.

Merci pour ta réponse extensive.
Donc selon toi avoir deux serveurs dhcp dédiés n’est pas une hérésie?

Si, c’en est une.
Deux serveurs DHCP c’est le risque d’une erreur. Le protocole DHCP est un protocole géré par le client. le serveur se contente de répondre à des requêtes UDP, et par conséquent ne sait pas ce que le client en fait, ni même s’il l’a reçu.
Dans un réseau on ne met qu’un seul serveur DHCP (sans prendre en considération des notions de failover).
Le premier DHCP qui reçoit la requête du client sera le premier à y répondre. Donc si tu un serveur avec DHCP PXE et un serveur DHCP classique, tu peux avoir le classique qui répond avant le PXE, et de fait tu as alors un problème car la requête PXE du client n’aura alors pas la bonne réponse.

ok on est d’accord.

Donc je passe à la solution envisagée: je supprime le serveur dhcp de pfsense et attribue une adresse manuellement à la passerelle et je configure le serveur dhcp sur debian/pxe server

Tu veux dire 192.168.1.0/24 ?

192.168.1.20 est dans les deux pools, c’est normal ?

Faut pas exagérer. Le serveur DHCP gère aussi l’état du bail.
Une négociation DHCP typique a la forme suivante :

  1. Le client envoie une requête « DHCP Discover » à la cantonnade.
  2. Le ou les serveurs répondent (ou pas) en envoyant une offre « DHCP Offer ».
  3. Le client choisit une offre et répond avec une requête « DHCP Request ».
  4. Le serveur valide la requête en envoyant un acquittement « DHCP ACK ».

Donc le serveur sait très que le client a demandé telle adresse, et considère qu’elle lui est attribuée pour la durée du bail que celui-ci ait reçu l’acquittement ou pas.

Tu n’avais pas écrit que pfsense était la passerelle ? Elle ne s’attribuait quand même pas une adresse dynamique avec son propre serveur DHCP ?

Si si :stuck_out_tongue:

C’est bien une adresse statique mais là je vais etre obligé de mettre une exception ds mon server dhcp

Non, pas toujours. Quand un client souhaite obtenir une adresse IP, il commence par découvrir les serveurs DHCP présents sur le réseau Ethernet et il doit alors sélectionner l’un des serveurs disponibles.

Ce n’est pas non plus exact. Un serveur DHCP peut très bien choisir de répondre ou de ne pas répondre à un client suivant, par exemple, l’adresse Ethernet du client ou si le client demande un démarrage en PXE.
Et si un client voit arriver les réponses de plusieurs serveurs, il peut sélectionner le serveur dont la réponse lui semble la plus adéquate.


AnonymousCoward

Et que dit la doxa concernant mon cas de figure?

Qu’elle ne peut rien pour toi puisqu’il faut t’adresser à la tékhnê ?


AnonymousCoward

Oui je l’avais oublié celui là :slight_smile:

Pourquoi.? tu laisse le serveur DHCP sur le pfsense, y a pas de soucis, et dans la config du DHCP tu lui indiques où se trouve le serveur PXE qui peut très bien être sur un autre serveur.

Non sur un même réseau A.B.C.D/netmask il ne peut y avoir qu’un seul serveur DHCP. C’est un risque d’en avoir deux configurés différemment. Qui plus est même avec une config identique (hors failover ou master/slave) les serveurs ne pourront savoir que l’autre a donné une adresse.
Et le client sélectionne automatiquement le premier serveur DHCP dont il reçoit la réponse. Un client ne choisit jamais celui qu’il veut sauf implémentation spéciale, mais dans ce cas elle est non conforme à la RFC.

La RFC 2131 indique :

A DHCP client must be prepared to receive multiple responses to a request for configuration parameters. Some installations may include multiple, overlapping DHCP servers to enhance reliability and increase performance.

Ou encore :

DHCPREQUEST - Client message to servers either (a) requesting offered parameters from one server and implicitly declining offers from all others

Je pense donc que tu interprète mal la RFC.


AnonymousCoward

C’est pourquoi j’avais exclu les cas de failover (qui consiste en effet à faire de l’overlapping, mais avec une config particulière). Un client ne peut pas sélectionner un serveur au début de sa requête car par défaut, il envoie un message à FF:FF:FF:FF:FF:FF. C’est après le DISCOVER/OFFER qu’il va choisir le serveur via le DHCPREQUEST: i.e. le premier qu’il reçoit. Ce qui n’empêche pas qu’il reçoive des messages de plusieurs serveur, mais ne tiendra compte que du premier.

Ce message est envoyé après le DISCOVER et le OFFER, donc après la définition du serveur qui sera pris en compte. C’est dans le DISCOVER/OFFER (où se fait le choix du serveur) que le problème se pose. A ce moment là aucun serveur n’est défini donc le client n’a pas fait de choix. C’est après l’OFFER, où, à moins d’une configuration explicite de refus d’un serveur, le client va prendre le premier qui lui aura fait une offre.
Ce choix se fait en envoyant ensuite ses requêtes uniquement au serveur en question (via le DHCPREQUEST justement). D’où le rejet implicite des autres serveur, non pas en rejetant leurs messages, mais tout simplement en ne communicant pas avec eux.
J’implémente des serveurs DHCP depuis plus de 20 ans avec au départ la RFC 1531 puis la 2131 (pas loin d’une centaine de configuration depuis, le premier implémenté dans les années 90 , et le premier incident classique auquel on fait généralement face, c’est justement celui de la présence de deux serveurs DHCP sans liens entre eux, qui foutent le bazar dans un réseau). j’en faisais même une conférence (avec DNS) dans des réunions organisées par le LUG Parinux dont je faisais parti.

le fait d’avoir deux serveurs DHCP sur un même brin réseau est d’ailleurs un moyen de compromission du brin réseau.

J’ai sous les yeux une capture réseau du protocole DHCP dont la totalité des paquets DHCPREQUEST est envoyée par le client en broadcast.
Le client DHCP communique donc avec l’ensemble des serveurs DHCP sur le réseau.

C’est en effet un problème classique mais je ne vois pas en quoi cela interdit d’avoir deux serveurs DHCP sur le même réseau. Voir ma première citation de la RFC.


AnonymousCoward

En réalité il ne communique pas avec tous. Il crie à la cantonade « est-ce qu’il y a un serveur ici? ». Ce qui n’est pas la même chose. Faute de savoir s’il existe un serveur DHCP, il envoie un broadcast pour avoir une réponse.
Et une fois obtenu une réponse il répondra à l’émetteur de cette réponse, et de fait ignorera les autres.

Ta première citation est tronquée. Tu a oublié qu’avant le DHCPREQUEST il y a un DHCPDISCOVER puis un DHCPOFFEr puis enfin un DHCPREQUEST qui n’aura pas lieu si aucun serveur n’a répondu.

Et donc, on ne fait jamais deux serveurs DHCP (et je répète, hors serveurs en redondance, failover, master/slave, etc…) car les deux serveurs ne pouvant avoir les même leases, ni peut etre même les mêmes configurations de réseau, ton client risque de ne pas avoir la bonne configuration dynamique.
par exemple, un serveur qui lui envoie une adresse en 192.168.0.0/24 alors que le réseau est sensé être du 192.168.1.0/24.
Ou encore le serveur lui envoie une adresse 192.168.1.12 que le deuxième serveur avait déjà alloué à une autre machine. Etc… ad libidum, voir ad nauseum.

J’ai écris à propos des paquets de type REQUEST et tu les confonds avec les paquets de type DISCOVER.

On ne discute pas du cas où il n’y a pas de réponse à un DISCOVER mais du cas où il y en a plusieurs.

Plus généralement, ce n’est pas parce-que le fait d’avoir deux serveurs DHCP sur un même réseau Ethernet peut être dangereux que ce n’est pas quelque-chose d’utile et qui fonctionne très bien pour certains usages.

Deux serveurs DHCP avec des « leases » différents est une configuration que l’on utilise parfois.

Tu voulais écrire « Ad libitum » ou est-ce que tu me faisais des propositions crapuleuses ?


AnonymousCoward

Ca va me compliquer la vie je crois

Le cas de deux serveur est celui où il y a architecture failover/master-slave etc… Que je te répète encore, j’ai exclu des cas précisés. Sinon donne moi ne serait ce qu’un seul usage avec deux serveurs DHCP qui ne sont pas mis en place pour du failover ou autre cas du même type.
et qui bien sur ne soit pas de l’usine à gaz ou du bricolage.

Hors failover les DHCP ont toujours des fichiers de leases différents. Les leases sont les baux établis.
Tu veux surement parler de « subnet », voir de « pool », « group » ou « range »?

Oui :slight_smile: