Hello,
Il y a deux sujets dans ta question, les paramètres / options dans la communication DHCP et comment appliquer certains paramètres uniquement pour des machines ciblées.
Vais commencer par causer des paramètres et options DHCP.
Si on regarde la manière dont est organisé un paquet UDP (appelé datagramme) contenant le protocole DHCP, je résumerais en disant qu’il contient quelques champs hérités du protocole BOOTP que je vais appeler « paramètres » et la liste des options.
Les paramètres n’ont pas plus d’importance que les valeurs contenues dans la liste d’options.
Les options sont une liste de TLV avec un octet pour le type et un octet pour la taille des données.
On trouve la liste des options connues par DHCPD dans la page de man de dhcp-options .
On trouve la liste des différentes options connues sur le site de l’IANA : bootp-dhcp-parameters , cette liste ayant le mérite de donner la valeur pour le champ type.
Si on ajoute à la configuration de dhcpd la ligne ci-dessous :
option pxe-architecture code 93 = unsigned integer 16;
ou la ligne présente dans ton post du 6 février :
option arch code 93 = unsigned integer 16;
cela a comme effet de dire à dhcpd que l’option de type 93 a comme nom « pxe-architecture » ou « arch » et que sa valeur est un entier non signé de 2 octets / 16 bits.
Ensuite, la condition ci-dessous :
if exists pxe-architecture and option pxe-architecture = 00:07 {
...
}
permet d’appliquer les paramètres / options contenues entre les accolades si le premier octet de cette option vaut 0x00 et le second vaut 0x07. Des valeurs que l’on peut retrouver sur le site de l’IANA : processor-architecture .
On pourrait se contenter de n’écrire que :
if option pxe-architecture = 00:07 {
...
}
C’est plus moi qui en rajoute par réflexe que autre chose.
Cette condition applique donc les réglages seulement le client DHCP précise qu’il est de type x64 UEFI.
En testant d’autres valeurs avec des « if elsif » ou un « switch », on peut indiquer d’autres serveurs et d’autres fichiers pour booter à d’autres types de machines comme des BIOS pas EFI, des machines EFI en 32 bits, des machines ARM comme des Raspberry Pi etc.
Voir la page de man dhcp-eval .
D’une manière similaire, on peut aussi savoir si le client DHCP est iPXE et donner l’URL d’un fichier de configuration / script à iPXE.
Exemple :
class "debian-netinst" {
match hardware;
if exists pxe-architecture {
default-lease-time 1;
max-lease-time 1;
if option user-class = "iPXE" {
filename "http://192.168.1.99/debian-netinst.ipxe";
}
elsif option pxe-architecture = 00:00 {
# x86 BIOS PXE
next-server 192.168.1.99;
filename "ipxe.pxe";
}
elsif option pxe-architecture = 00:07 {
# x64 UEFI PXE
next-server 192.168.1.99;
filename "ipxe.efi";
}
}
}
–
AnonymousCoward