Outils pour utilisateurs

Outils du site


ipxe

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ipxe [2026/08/24 05:28] – [1.1 Interfaces réseau] reneipxe [2026/08/24 06:37] (Version actuelle) – [4. Création du script iPXE] rene
Ligne 22: Ligne 22:
 ==== 1.2 Configuration de l'interface interne ==== ==== 1.2 Configuration de l'interface interne ====
  
-Créer/éditer la configuration réseau. Sur Debian 13, selon votre gestionnaire de réseau : +Créer/éditer la configuration réseau avec (ifupdown classique) :
-Avec /etc/network/interfaces (ifupdown classique) :sudo tee -a /etc/network/interfaces << 'EOF'+
  
-auto ens1 +''/etc/network/interfaces'' 
-iface ens1 inet static+ 
 +  sudo tee -a /etc/network/interfaces << 'EOF' 
 + 
 +  auto ens1 
 +  iface ens1 inet static
     address 192.168.100.1/24     address 192.168.100.1/24
     gateway 192.168.100.1     gateway 192.168.100.1
     dns-nameservers 8.8.8.8 1.1.1.1     dns-nameservers 8.8.8.8 1.1.1.1
-EOFPuis activer :sudo ifup ens1+  EOF 
 + 
 +Puis activer : 
 +  sudo ifup ens1 
 ⚠️ Ne définissez pas de passerelle par défaut sur ens1 si ens0 fournit déjà la route par défaut. Retirez la ligne gateway ci-dessus dans ce cas. ⚠️ Ne définissez pas de passerelle par défaut sur ens1 si ens0 fournit déjà la route par défaut. Retirez la ligne gateway ci-dessus dans ce cas.
  
  
-2. Installation des paquetssudo apt update +===== 2. Installation des paquets =====
-sudo apt install -y nginx dnsmasq ipxe-qemu pxelinux syslinux-common \ +
-    wget rsync unzip nftablesVérifiez que les fichiers iPXE nécessaires sont disponibles :# Pour BIOS legacy +
-ls /usr/lib/ipxe/undionly.kpxe+
  
-# Pour UEFI +  sudo apt update 
-ls /usr/lib/ipxe/ipxe.efi +  sudo apt install -y nginx dnsmasq ipxe-qemu pxelinux syslinux-common \ 
-ls /usr/lib/ipxe/ipxe-snponly.efiSi les chemins diffèrent, cherchez-les :dpkg -L ipxe-qemu | grep -E '\.(efi|kpxe)$' +    wget rsync unzip nftables 
-find /usr -name 'undionly.kpxe' -o -name 'ipxe*.efi' 2>/dev/null +     
-3. Préparation des fichiers Clonezilla +Vérifiez que les fichiers iPXE nécessaires sont disponibles : 
-3.1 Téléchargement de Clonezilla Livesudo mkdir -p /srv/www/clonezilla +  # Pour BIOS legacy 
-cd /tmp +  ls /usr/lib/ipxe/undionly.kpxe 
-wget https://free.nchc.org.tw/clonezilla-live/stable/clonezilla-live-3.2.2-10-amd64.zip +   
-# Vérifiez toujours la dernière version stable sur https://clonezilla.org/downloads.php +  # Pour UEFI 
-sudo unzip clonezilla-live-3.2.2-10-amd64.zip -d /tmp/cz +  ls /usr/lib/ipxe/ipxe.efi 
-⚠️ Vérifiez l'URL de téléchargement sur le site officiel de Clonezilla pour obtenir la dernière version stable.+  ls /usr/lib/ipxe/ipxe-snponly.efi
  
-3.2 Extraction des fichiers de démarrage +Si les chemins diffèrent, cherchez-les : 
-Clonezilla Live utilise une architecture classique de live-boot : noyau Linux, initramfs, et filesystem.squashfs.sudo mkdir -p /srv/www/clonezilla/live +  dpkg -L ipxe-qemu | grep -E '\.(efi|kpxe)$' 
-sudo mkdir -p /srv/tftp/boot+  find /usr -name 'undionly.kpxe' -o -name 'ipxe*.efi' 2>/dev/null 
 + 
 + 
 + 
 +===== 3. Préparation des fichiers Clonezilla ===== 
 + 
 +==== 3.1 Téléchargement de Clonezilla Live ==== 
 + 
 + 
 +  sudo mkdir -p /srv/www/clonezilla 
 +  cd /tmp 
 +  wget https://free.nchc.org.tw/clonezilla-live/stable/clonezilla-live-X.X.X-XX-amd64.zip 
 +  # Vérifiez toujours la dernière version stable sur https://clonezilla.org/downloads.php 
 +  sudo unzip clonezilla-live-X.X.X-XX-amd64.zip -d /tmp/cz 
 +  
 +⚠️ Vérifiez l'URL de téléchargement sur le site officiel de [[https://clonezilla.org/downloads.php|Clonezilla]] pour obtenir la dernière version stable. 
 + 
 +==== 3.2 Extraction des fichiers de démarrage ==== 
 + 
 +Clonezilla Live utilise une architecture classique de live-boot : noyau Linux, initramfs, et filesystem.squashfs. 
 + 
 +  sudo mkdir -p /srv/www/clonezilla/live 
 +  sudo mkdir -p /srv/tftp/boot
  
 # Copier les fichiers du système de fichiers live (squashfs + vmlinuz + initrd) # Copier les fichiers du système de fichiers live (squashfs + vmlinuz + initrd)
-sudo cp /tmp/cz/live/vmlinuz /srv/www/clonezilla/live/ +  sudo cp /tmp/cz/live/vmlinuz /srv/www/clonezilla/live/ 
-sudo cp /tmp/cz/live/initrd.img /srv/www/clonezilla/live/ +  sudo cp /tmp/cz/live/initrd.img /srv/www/clonezilla/live/ 
-sudo cp /tmp/cz/live/filesystem.squashfs /srv/www/clonezilla/live/+  sudo cp /tmp/cz/live/filesystem.squashfs /srv/www/clonezilla/live/
  
 # Copier aussi les fichiers pour TFTP (si besoin de PXELINUX en fallback) # Copier aussi les fichiers pour TFTP (si besoin de PXELINUX en fallback)
-sudo cp /tmp/cz/live/vmlinuz /srv/tftp/boot/ +  sudo cp /tmp/cz/live/vmlinuz /srv/tftp/boot/ 
-sudo cp /tmp/cz/live/initrd.img /srv/tftp/boot/Vérifiez les noms exacts des fichiers dans l'archive :ls -la /tmp/cz/live/3.3 Arborescence cible/srv/www/clonezilla/ +  sudo cp /tmp/cz/live/initrd.img /srv/tftp/boot/ 
-├── live/ +   
-│   ├── vmlinuz +Vérifiez les noms exacts des fichiers dans l'archive :
-│   ├── initrd.img +
-│   └── filesystem.squashfs +
-└── boot.ipxe              ← script iPXE personnalisé+
  
-/srv/tftp/ +  ls -la /tmp/cz/live/3.
-├── undionly.kpxe          ← iPXE pour BIOS +
-├── ipxe-snponly.efi       ← iPXE pour UEFI +
-└── boot.ipxeCopier les firmwares iPXE vers le répertoire TFTP :sudo cp /usr/lib/ipxe/undionly.kpxe /srv/tftp/ +
-sudo cp /usr/lib/ipxe/ipxe-snponly.efi /srv/tftp/ +
-4. Création du script iPXE +
-Le script iPXE est le cœur de la chaîne de boot. Il télécharge le noyau et l'initramfs de Clonezilla depuis Nginx en HTTP, puis démarre Clonezilla avec les bons paramètres.sudo tee /srv/www/clonezilla/boot.ipxe << 'IPXEEOF' +
-#!ipxe+
  
-echo ============================================ +Arborescence cible 
-echo   Clonezilla Live via iPXE + 
-echo   Server: 192.168.100.1 +  /srv/www/clonezilla/ 
-echo ============================================ +  ├── live/ 
-echo+  │   ├── vmlinuz 
 +  │   ├── initrd.img 
 +  │   └── filesystem.squashfs 
 +  └── boot.ipxe              ← script iPXE personnalisé 
 +   
 +  /srv/tftp/ 
 +  ├── undionly.kpxe          ← iPXE pour BIOS 
 +  ├── ipxe-snponly.efi       ← iPXE pour UEFI 
 +  └── boot.ipxe 
 + 
 +Copier les firmwares iPXE vers le répertoire TFTP : 
 + 
 +  sudo cp /usr/lib/ipxe/undionly.kpxe /srv/tftp/ 
 +  sudo cp /usr/lib/ipxe/ipxe-snponly.efi /srv/tftp/ 
 + 
 +===== 4. Création du script iPXE ===== 
 + 
 +Le script iPXE est le cœur de la chaîne de boot. Il télécharge le noyau et l'initramfs de Clonezilla depuis Nginx en HTTP, puis démarre Clonezilla avec les bons paramètres. 
 + 
 +  sudo tee /srv/www/clonezilla/boot.ipxe << 'IPXEEOF' 
 +  #!ipxe 
 +   
 +  echo ============================================ 
 +  echo   Clonezilla Live via iPXE 
 +  echo   Server: 192.168.100.1 
 +  echo ============================================ 
 +  echo 
 +   
 +  set server_ip 192.168.100.1 
 +  set http_base http://${server_ip}/clonezilla/live 
 +   
 +  kernel ${http_base}/vmlinuz boot=live username=user union=overlay config components quiet ocs_prerun="dhclient" ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts=fr locales=fr_FR.UTF-8 ip=dhcp nosplash vga=791 
 +  initrd ${http_base}/initrd.img 
 +  boot 
 +  IPXEEOF 
 + 
 +Explication des paramètres du noyau 
 + 
 +  Paramètre                          Rôle 
 +  boot=live                          Active le mode live-boot de Debian/Clonezilla 
 +  username=user                      Utilisateur de la session live 
 +  union=overlay                      Système de fichiers en overlay 
 +  config components quiet            Charge les composants de config, mode silencieux 
 +  ocs_prerun="dhclient"              Démarre un client DHCP avant Clonezilla (pour avoir le réseau dans CZ) 
 +  ocs_live_run="ocs-live-general"    Lance le menu Clonezilla interactif 
 +  keyboard-layouts=fr                Disposition clavier français (adaptez si besoin) 
 +  locales=fr_FR.UTF-8                Locale française 
 +  ip=dhcp                            Configuration IP via DHCP au boot 
 +  vga=791                            Résolution 1024×768 (adaptez selon vos écrans) 
 + 
 + 
 +Copier le script également en TFTP (au cas où) : 
 + 
 +  sudo cp /srv/www/clonezilla/boot.ipxe /srv/tftp/boot.ipxe
  
-set server_ip 192.168.100.1 
-set http_base http://${server_ip}/clonezilla/live 
  
-kernel ${http_base}/vmlinuz boot=live username=user union=overlay config components quiet ocs_prerun="dhclient" ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts=fr locales=fr_FR.UTF-8 ip=dhcp nosplash vga=791 
-initrd ${http_base}/initrd.img 
-boot 
-IPXEEOFExplication des paramètres du noyau 
-ParamètreRôleboot=liveActive le mode live-boot de Debian/Clonezillausername=userUtilisateur de la session liveunion=overlaySystème de fichiers en overlayconfig components quietCharge les composants de config, mode silencieuxocs_prerun="dhclient"Démarre un client DHCP avant Clonezilla (pour avoir le réseau dans CZ)ocs_live_run="ocs-live-general"Lance le menu Clonezilla interactifkeyboard-layouts=frDisposition clavier français (adaptez si besoin)locales=fr_FR.UTF-8Locale françaiseip=dhcpConfiguration IP via DHCP au bootvga=791Résolution 1024×768 (adaptez selon vos écrans) 
-Copier le script également en TFTP (au cas où) :sudo cp /srv/www/clonezilla/boot.ipxe /srv/tftp/boot.ipxe 
 💡 Si vous souhaitez automatiser le clonage sans menu interactif, remplacez ocs_live_run par exemple : 💡 Si vous souhaitez automatiser le clonage sans menu interactif, remplacez ocs_live_run par exemple :
 ocs_live_run="ocs-sr -g auto -e1 auto -e2 -c -r -j2 restoredisk IMAGE_NAME sda" ocs_live_run="ocs-sr -g auto -e1 auto -e2 -c -r -j2 restoredisk IMAGE_NAME sda"
Ligne 99: Ligne 160:
  
  
-5. Configuration de dnsmasq (DHCP + TFTP + Proxy-DNS)+===== 5. Configuration de dnsmasq (DHCP + TFTP + Proxy-DNS) ===== 
 dnsmasq gère à la fois le DHCP, le TFTP et la redirection vers iPXE en fonction du type de client (BIOS ou UEFI). dnsmasq gère à la fois le DHCP, le TFTP et la redirection vers iPXE en fonction du type de client (BIOS ou UEFI).
-5.1 Fichier de configuration principalsudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig 2>/dev/null+ 
 +==== 5.1 Fichier de configuration principal ==== 
 + 
 + 
 +sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig 2>/dev/null
  
 sudo tee /etc/dnsmasq.conf << 'DNSMASQEOF' sudo tee /etc/dnsmasq.conf << 'DNSMASQEOF'
Ligne 154: Ligne 220:
 sudo systemctl status dnsmasqVérifiez que le DHCP et le TFTP écoutent :ss -ulnp | grep -E '67|69' sudo systemctl status dnsmasqVérifiez que le DHCP et le TFTP écoutent :ss -ulnp | grep -E '67|69'
 ss -tlnp | grep -E '53' ss -tlnp | grep -E '53'
-6. Configuration de Nginx + 
-6.1 Création du bloc serveursudo tee /etc/nginx/sites-available/clonezilla << 'NGINXEOF'+ 
 +===== 6. Configuration de Nginx ===== 
 + 
 + 
 +==== 6.1 Création du bloc serveur ==== 
 + 
 + 
 +sudo tee /etc/nginx/sites-available/clonezilla << 'NGINXEOF'
 server { server {
     listen 80;     listen 80;
Ligne 204: Ligne 277:
 curl -I http://192.168.100.1/clonezilla/live/vmlinuzVous devez voir 200 OK et le contenu du script/de la liste. curl -I http://192.168.100.1/clonezilla/live/vmlinuzVous devez voir 200 OK et le contenu du script/de la liste.
  
-7. Configuration du routage et du NAT+===== 7. Configuration du routage et du NAT ===== 
 + 
 Pour que les postes clients puissent accéder à Internet (notamment pour que Clonezilla puisse télécharger des mises à jour, ou que les machines clonées aient un accès réseau après le clone), il faut activer le routage IPv4 et le NAT entre ens1 (lan) et ens0 (wan). Pour que les postes clients puissent accéder à Internet (notamment pour que Clonezilla puisse télécharger des mises à jour, ou que les machines clonées aient un accès réseau après le clone), il faut activer le routage IPv4 et le NAT entre ens1 (lan) et ens0 (wan).
-7.1 Activation du forwarding IPv4sudo tee -a /etc/sysctl.d/99-clonezilla-routing.conf << 'EOF'+ 
 +==== 7.1 Activation du forwarding IPv4 ==== 
 + 
 + 
 +sudo tee -a /etc/sysctl.d/99-clonezilla-routing.conf << 'EOF'
 net.ipv4.ip_forward = 1 net.ipv4.ip_forward = 1
 EOF EOF
Ligne 251: Ligne 330:
  
  
-8. Chaîne de boot détaillée+===== 8. Chaîne de boot détaillée ===== 
 + 
 + 
 Voici le flux complet de démarrage d'un poste client :(sequence omitted — described below)Étape 1 — Demande DHCP : Voici le flux complet de démarrage d'un poste client :(sequence omitted — described below)Étape 1 — Demande DHCP :
 Le poste client (BIOS ou UEFI) émet une requête DHCP Discover sur ens1. dnsmasq répond avec une IP dans la plage 192.168.100.100-200 et indique le fichier de boot correspondant à l'architecture détectée : Le poste client (BIOS ou UEFI) émet une requête DHCP Discover sur ens1. dnsmasq répond avec une IP dans la plage 192.168.100.100-200 et indique le fichier de boot correspondant à l'architecture détectée :
Ligne 269: Ligne 351:
 Configurer dnsmasq pour envoyer l'option option:bootfile-name avec l'URL HTTP directement. Mais iPXE doit d'abord être chargé, puis demander une deuxième IP. Voici comment : Configurer dnsmasq pour envoyer l'option option:bootfile-name avec l'URL HTTP directement. Mais iPXE doit d'abord être chargé, puis demander une deuxième IP. Voici comment :
  
-8.1 Configuration dnsmasq avec double DHCP (chain loading iPXE)+==== 8.1 Configuration dnsmasq avec double DHCP (chain loading iPXE) ==== 
 + 
 Modifiez la section de boot dans /etc/dnsmasq.conf :sudo tee -a /etc/dnsmasq.conf << 'DNSMASQAPPEND' Modifiez la section de boot dans /etc/dnsmasq.conf :sudo tee -a /etc/dnsmasq.conf << 'DNSMASQAPPEND'
  
Ligne 293: Ligne 377:
 Le noyau démarre, monte le filesystem.squashfs, et Clonezilla s'exécute avec les paramètres spécifiés. Le noyau démarre, monte le filesystem.squashfs, et Clonezilla s'exécute avec les paramètres spécifiés.
  
-9. Vérifications et dépannage +===== 9. Vérifications et dépannage ===== 
-9.1 Journal dnsmasqsudo tail -f /var/log/dnsmasq.logVous devriez voir les étapes DHCP, la détection de l'architecture (BIOS/UEFI), et l'envoi du bon fichier de boot. + 
-9.2 Journal Nginxsudo tail -f /var/log/nginx/access.logVous devriez voir les requêtes GET pour /clonezilla/boot.ipxe, /clonezilla/live/vmlinuz, /clonezilla/live/initrd.img. + 
-9.3 Tests manuels+==== 9.1 Journal dnsmasq ==== 
 + 
 + 
 +sudo tail -f /var/log/dnsmasq.logVous devriez voir les étapes DHCP, la détection de l'architecture (BIOS/UEFI), et l'envoi du bon fichier de boot. 
 + 
 +==== 9.2 Journal Nginx ==== 
 + 
 + 
 +sudo tail -f /var/log/nginx/access.logVous devriez voir les requêtes GET pour /clonezilla/boot.ipxe, /clonezilla/live/vmlinuz, /clonezilla/live/initrd.img. 
 + 
 +==== 9.3 Tests manuels ==== 
 + 
 Depuis une machine du réseau de clonage :# Tester le DHCP Depuis une machine du réseau de clonage :# Tester le DHCP
 sudo dhclient -d -v ens1 sudo dhclient -d -v ens1
Ligne 310: Ligne 406:
 SymptômeCause probableSolutionLe client n'obtient pas d'IP DHCPdnsmasq n'écoute pas sur ens1Vérifier interface=ens1 et bind-interfacesPas de transfert TFTPMauvais tftp-root ou permissionschmod -R 755 /srv/tftp et vérifier les noms de fichiersiPXE charge mais ne trouve pas boot.ipxednsmasq ne fait pas le chaînage HTTPVérifier la configuration dhcp-userclass et les dhcp-bootNginx retourne 403Restriction allow/denyVérifier que le client est bien dans 192.168.100.0/24filesystem.squashfs introuvableMauvais nom de fichierVérifier ls /tmp/cz/live/ et adapterBoot UEFI échoueMauvais firmware EFIEssayer ipxe.efi au lieu de ipxe-snponly.efi selon le firmware de la carte réseauPas d'accès Internet après clonageNAT inactifsysctl net.ipv4.ip_forward doit renvoyer 1, vérifier nft list rulesetLes performances de clonage sont lentesRoutage via NATNormal si tout passe par le serveur ; Clonezilla utilise le réseau local SymptômeCause probableSolutionLe client n'obtient pas d'IP DHCPdnsmasq n'écoute pas sur ens1Vérifier interface=ens1 et bind-interfacesPas de transfert TFTPMauvais tftp-root ou permissionschmod -R 755 /srv/tftp et vérifier les noms de fichiersiPXE charge mais ne trouve pas boot.ipxednsmasq ne fait pas le chaînage HTTPVérifier la configuration dhcp-userclass et les dhcp-bootNginx retourne 403Restriction allow/denyVérifier que le client est bien dans 192.168.100.0/24filesystem.squashfs introuvableMauvais nom de fichierVérifier ls /tmp/cz/live/ et adapterBoot UEFI échoueMauvais firmware EFIEssayer ipxe.efi au lieu de ipxe-snponly.efi selon le firmware de la carte réseauPas d'accès Internet après clonageNAT inactifsysctl net.ipv4.ip_forward doit renvoyer 1, vérifier nft list rulesetLes performances de clonage sont lentesRoutage via NATNormal si tout passe par le serveur ; Clonezilla utilise le réseau local
  
-10. Récapitulatif du flux réseauFlux réseau completinfoClient (BIOS/UEFI) → DHCP sur ens1 → dnsmasq fournit IP + firmware iPXE via TFTP → iPXE recharge DHCP (user-class iPXE) → dnsmasq répond avec URL HTTP http://192.168.100.1/clonezilla/boot.ipxe → Nginx sert boot.ipxe, vmlinuz, initrd.img, filesystem.squashfs → Clonezilla démarre → NAT via ens0 permet l'accès Internet aux machines clonées.Points critiqueswarning1) Le chaînage double-DHCP (user-class iPXE) est essentiel pour router du firmware PXE vers le script HTTP. 2) L'option client-arch 7/9 identifie UEFI, 0 identifie BIOS. 3) nftables doit masquerader ens0 et forwarder ens1→ens0. 4) Le filesystem.squashfs doit être accessible en HTTP pour que Clonezilla fonctionne. +===== 10. Récapitulatif du flux réseau ===== 
-11. Sécurité et bonnes pratiques+ 
 + 
 +Flux réseau completinfoClient (BIOS/UEFI) → DHCP sur ens1 → dnsmasq fournit IP + firmware iPXE via TFTP → iPXE recharge DHCP (user-class iPXE) → dnsmasq répond avec URL HTTP http://192.168.100.1/clonezilla/boot.ipxe → Nginx sert boot.ipxe, vmlinuz, initrd.img, filesystem.squashfs → Clonezilla démarre → NAT via ens0 permet l'accès Internet aux machines clonées.Points critiqueswarning1) Le chaînage double-DHCP (user-class iPXE) est essentiel pour router du firmware PXE vers le script HTTP. 2) L'option client-arch 7/9 identifie UEFI, 0 identifie BIOS. 3) nftables doit masquerader ens0 et forwarder ens1→ens0. 4) Le filesystem.squashfs doit être accessible en HTTP pour que Clonezilla fonctionne. 
 + 
 +===== 11. Sécurité et bonnes pratiques ===== 
  
 Restreindre Nginx au réseau 192.168.100.0/24 uniquement (déjà fait via allow/deny) Restreindre Nginx au réseau 192.168.100.0/24 uniquement (déjà fait via allow/deny)
Ligne 321: Ligne 422:
  
 Cette configuration vous donne un serveur de clonage autonome, capable de démarrer aussi bien les machines BIOS qu'UEFI via iPXE en IPv4, tout en permettant l'accès Internet aux machines clonées grâce au NAT. Le principal avantage d'iPXE est la vitesse de transfert (HTTP au lieu de TFTP) et la flexibilité du scripting de boot. Cette configuration vous donne un serveur de clonage autonome, capable de démarrer aussi bien les machines BIOS qu'UEFI via iPXE en IPv4, tout en permettant l'accès Internet aux machines clonées grâce au NAT. Le principal avantage d'iPXE est la vitesse de transfert (HTTP au lieu de TFTP) et la flexibilité du scripting de boot.
 +
 +
ipxe.1787549295.txt.gz · Dernière modification : de rene