Serveur PXE

Bonjour,

Je viens de terminer l’installation de mon serveur pxe mais bien sûr ca ne marche pas le boot process reste bloqué sur:

iPXE (PCI E2:00.0) starting execution...ok
iPXE initialising devices...ok



iPXE 1.0.0+ -- Open Source Network Boot Firmware -- http://ipxe.org
Features: DNS TFTP HTTP PXE PXEXT Menu

net0: 08:00:27:71:16:3c using 82540em on 0PCI00:03.0 (open)
  [Link:down, TX:0 TXE:0 RX:0 RXE:0]
  [Link status: Down (http://ipxe.org/38086101)]
Waiting for link-up on net0... ok
DHCP (net0 08:00:27:71:16:3c)...... ok
net0: 172.16.16.10/255.255.255.0 gw 172.16.16.1
Next server: 172.16.16.150
Filename: syslinux.efi
tftp://172.16.16.150/syslinux.efi... ok

Par contre un truc me saute aux yeux syslinux.efi n’est pas sur la racine dans ma config mais ds un répertoire /tftpboot.
Avez vous une idée de comment corriger ce fait sans tout casser

Merci

Il faut vérifier la configuration de ton serveur tftp. Il y a normalement un paramètre serveur root directory qui permet de spécifier le répertoire racine. genre:

service tftp
{
protocol    	= udp
port        	= 69
socket_type 	= dgram
wait        	= yes
user        	= nobody
server      	= /usr/sbin/in.tftpd
server_args 	= /tftpboot
disable     	= no
}

Ah j’y pense ça utilise xinetd, donc coté sécurité, ce n’est pas terrible.

Ca me dit rien
Par contre j’ai configuré /etc/default/tftpd-hpa

Je me demande s’il y a pas un souci du à pfsense ou du au fait que je fais ca sous vbox

Ps: mon serveur dhcp debian fonctionne bien

Petite question supplémentaire: pensez vous que le fait que j’ai omis:

###PXE###
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16;

option space ipxe;
option ipxe-encap-opts code 175 = encapsulate ipxe;
option ipxe.priority code 1 = signed integer 8;
option ipxe.keep-san code 8 = unsigned integer 8;
option ipxe.skip-san-boot code 9 = unsigned integer 8;
option ipxe.syslogs code 85 = string;
option ipxe.cert code 91 = string;
option ipxe.privkey code 92 = string;
option ipxe.crosscert code 93 = string;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
option ipxe.bus-id code 177 = string;
option ipxe.san-filename code 188 = string;
option ipxe.bios-drive code 189 = unsigned integer 8;
option ipxe.username code 190 = string;
option ipxe.password code 191 = string;
option ipxe.reverse-username code 192 = string;
option ipxe.reverse-password code 193 = string;
option ipxe.version code 235 = string;
option iscsi-initiator-iqn code 203 = string;
# Feature indicators
option ipxe.pxeext code 16 = unsigned integer 8;
option ipxe.iscsi code 17 = unsigned integer 8;
option ipxe.aoe code 18 = unsigned integer 8;
option ipxe.http code 19 = unsigned integer 8;
option ipxe.https code 20 = unsigned integer 8;
option ipxe.tftp code 21 = unsigned integer 8;
option ipxe.ftp code 22 = unsigned integer 8;
option ipxe.dns code 23 = unsigned integer 8;
option ipxe.bzimage code 24 = unsigned integer 8;
option ipxe.multiboot code 25 = unsigned integer 8;
option ipxe.slam code 26 = unsigned integer 8;
option ipxe.srp code 27 = unsigned integer 8;
option ipxe.nbi code 32 = unsigned integer 8;
option ipxe.pxe code 33 = unsigned integer 8;
option ipxe.elf code 34 = unsigned integer 8;
option ipxe.comboot code 35 = unsigned integer 8;
option ipxe.efi code 36 = unsigned integer 8;
option ipxe.fcoe code 37 = unsigned integer 8;
option ipxe.vlan code 38 = unsigned integer 8;
option ipxe.menu code 39 = unsigned integer 8;
option ipxe.sdi code 40 = unsigned integer 8;
option ipxe.nfs code 41 = unsigned integer 8;

…dans mon dhcpd.conf soit un élément supplémentaire à mon échec?

Sur la capture ecran je vois link down et puis « ok » j’ai bien configuré toutes les interfaces pourtant

Oui c’est normal, au départ le lien est down, puis ensuite le lien est mis up puis il reçoit les paramètres DHCP.

Désolé de remonter ce sujet mais je souhaiterais bien faire fonctionner ce bouzin…je sens que ce n’est pas grand chose mais…voilà quoi… :crazy_face:

Quelqu’un aurait il une piste?

ps:

En fait j’ai corrigé le probleme de l’interface up en changeant le type d’interface sur l’hyperviseur

Salut,
qu’est-ce qui ne fonctionne pas?

je ne depasse pas l’ecran vu plus haut

Dans la configuration DHCP concernant le PXE, il me semble qu’une option permet de préciser le fichier et son emplacement dans le tftp. Sinon il te faut mettre le fichier à la racine du tftp (essaye déjà pour voir si ça marche).

Bonjour,

Est-ce que tu pourrais nous copier/coller la configuration du serveur DHCP ?

Je me demande si tu n’essaies pas d’utiliser iPXE en mode BIOS pour charger Syslinux en mode EFI. Ces deux modes étant incompatibles.

Sinon, je suis un peu surpris qu’il s’agisse de Syslinux et non pas Pxelinux. Même s’il s’agit du même projet, c’est souvent ce dernier qui est utilisé pour un démarrage en réseau.
Voir https://en.wikipedia.org/wiki/SYSLINUX

Eventuellement, est-ce que tu peux nous dire quelle distribution Linux est-ce que tu tentes de démarrer en réseau ?


AnonymousCoward

Voilà effectivement il y a une dissonance entre bios et efi
Capture d’écran du 2021-03-04 13-31-37

en plus syslinux.efi est dans /tftpboot et non ds /

Bon je suis désespéré j’ai refait l’installation sur une machine uefi mais j’ai le meme souci

Capture d’écran du 2021-03-10 15-14-22

Pardon, c’est debian (netinst)

Bonjour,

Une proposition facile :

  • Sur ta machine qui fait serveur TFTP, tu récupères le fichier netboot.xyz.efi disponible sur la page https://netboot.xyz/downloads/ et tu le mets dans /srv/tftp/ .
  • Tu configures le fichier dhcpd.conf de ton serveur DHCP avec les éléments ci-dessous
#
option pxe-architecture code 93 = unsigned integer 16;

#
class "netboot.xyz-efi" {
        match hardware;
        # utile uniquement si l'on force une adresse MAC dans cette classe

        if exists pxe-architecture and option pxe-architecture = 00:07 {
                default-lease-time 1;
                max-lease-time 1;

                # x64 UEFI PXE
                next-server 192.168.0.63;
                filename "netboot.xyz.efi";
        }
}
subclass "netboot.xyz-efi" 1:00:11:22:33:44:55;
# pour forcer l'appareil d'adresse MAC 00:11:22:33:44:55 dans cette classe

#
subnet 192.168.0.0 netmask 255.255.255.0
{
        range 192.168.0.10 192.168.0.20;
        option routers 192.168.0.254;
        option domain-name-servers 192.168.0.254;

        #add "netboot.xyz-efi";
        # applique la classe netboot.xyz-efi aux machines du subnet
}

netboot.xyz est un système basé sur iPXE pour démarrer plein de distributions différentes dont l’installateur de Debian.
Je suis certain qu’il marche et on pourra faire quelque-chose de plus direct un peu plus tard, si tu arrives déjà à faire fonctionner netboot.xyz .

Avec l’environnement de virtualisation Proxmox VE, je n’ai l’affichage de iPXE en tout premier que lorsque je démarre en réseau une machine avec un BIOS non EFI.
Il est possible que VirtualBox fonctionne de manière différente mais il faudrait éventuellement que tu vérifies si ta VM est bien configurée pour booter avec un firmware EFI.


AnonymousCoward

J’ai vu ton message et j’ai plusieurs questions:

Est ce que cela correspond à un client ciblé pour une remote install?

A quoi cela correspond t’il?

Est ce que cela correspond à, par exemple, un parc dell sur lequel je veux destiner le remote install?

Merci

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

1 J'aime

Une question, ce tuto est il fonctionnel?

Bon problème clos, je suis passé par clonezilla server…rapide et seamless

Je préfère utiliser iPXE par rapport à PXElinux. Notamment car je dispose d’un PC portable Lenovo qui provoque chez PXElinux un dysfonctionnement jamais résolu ( lien ).

Etapes :

  1. Paramétrer un serveur DHCP de la manière décrite juste au-dessus, en demandant à appliquer la classe pour l’adresse MAC de la machine ( à faire précéder de « 1: » ) :
subclass "debian-netinst" 1:00:11:22:33:44:55;
  1. Installer le serveur TFTP tftpd-hpa et modifier la dernière ligne du fichier /etc/default/tftpd-hpa de la sorte :
TFTP_OPTIONS="--secure --verbose"

Cela permet d’avoir des traces dans /var/log/daemon.log .
Puis relancer le serveur TFTP avec une commande telle que sudo systemctl restart tftpd-hpa .

  1. Copier les fichiers de iPXE pour un démarrage en mode BIOS et en mode EFI là où le service TFTP sert les fichiers. Depuis les fichiers du package iPXE installé, ou en compilant manuellement iPXE :
sudo cp -a /usr/lib/ipxe/{ipxe.pxe,ipxe.efi} /srv/tftp/
  1. Installer un serveur web / HTTP. J’utilise mini-httpd mais Apache, Nginx ou tout autre serveur fait tout aussi bien l’affaire.
    Pour mini-httpd, il faut ensuite modifier les fichiers :
    /etc/mini-httpd.conf :
# On which host mini_httpd should bind?
host=192.168.1.99

# Which charset to use?
charset=utf-8

/etc/default/mini-httpd :

START=1

Puis le relancer avec systemctl.

  1. Préparer les fichiers à servir en http.
    Ici, j’ajoute un fichier « preseed.cfg » pour que l’installateur démarre tout seul et attende que je continue l’installation via ssh. Cependant, cela n’a rien d’obligatoire.
    debian-netinst.ipxe :
#!ipxe

set mirror http://ftp.fr.debian.org
set base_path ${mirror}/debian/dists/buster/main/installer-amd64/current/images/netboot/debian-installer/amd64

kernel ${base_path}/linux
initrd ${base_path}/initrd.gz
initrd http://192.168.1.99/preseed.cpio
imgargs linux initrd=initrd.gz initrd=preseed.cpio --- net.ifnames=0
boot

Puis la génération du fichier preseed.gpio avec :

echo preseed.cfg | cpio -H newc -o > preseed.cpio

( exemple de fichier preseed.cfg dont disposer au préalable )

Et on les flanque dans le répertoire où ils seront servis :

sudo cp -a debian-netinst.ipxe preseed.cpio /var/www/html/

Et hop ! Le démarrage fonctionne avec une machine en EFI ainsi qu’avec une machine en BIOS.


AnonymousCoward

1 J'aime