Outils pour utilisateurs

Outils du site


apache

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
apache [2026/09/01 20:23] – [3. Configuration de dnsmasq pour PXE (BIOS + UEFI)] reneapache [2026/09/02 16:41] (Version actuelle) – supprimée rene
Ligne 1: Ligne 1:
-====== Serveur iPXE + Clonezilla sur Debian 13 avec Apache pour deux cartes réseau ====== 
  
- 
-Servant les images Clonezilla via Apache, avec support BIOS et UEFI sur IPv4, et accès Internet pour les postes clonés. [[https://khimananda.com/blog/pxe-boot-for-automated-os-installs|khimananda]] 
- 
-===== Pourquoi un serveur iPXE - Clonezilla au Centre des Abeilles ===== 
- 
- 
-L'opération de solidarité numérique débutée en 2009 par le Centre des Abeilles avec l'aide technique de Linux Quimper se traduit aujourd'hui par le don d'une vingtaine d'ordinateurs par semaine. Configurer ces ordinateurs avec Clonezilla peut se faire avec une ou plusieurs clés usb Clonezilla. Ces manipulations deviennent fastidieuses surtout lorsqu'il faut mettre à jour ces différentes clés. Un serveur DRBL - Clonezilla est d'une utilisation complexe puisqu'il faut intervenir aussi bien sur le serveur que sur le poste client pour le déploiement des systèmes sur les postes clients. Par contre un serveur iPxe couplé à Clonezilla à l'avantage de laisser à chaque poste client le choix de l'image système à cloner, par exemple Debian BIOS ou UEFI sans intervenir sur le serveur lui-même. 
- 
-=====Architecture réseau cible ===== 
- 
-  ip a 
- 
-  * **eno1** : interface vers Internet (DHCP ou IP statique fournie par votre FAI/routeur). Cette interface ne doit **pas** servir de DHCP/PXE aux clients de clonage. 
-  * **enp2s0** : interface vers le réseau local de clonage (ex. `192.168.100.1/24`). C’est sur ce réseau que dnsmasq servira DHCP + TFTP + proxyDHCP pour le PXE. 
-  * **Apache** : sert les fichiers Clonezilla (kernel, initrd, squashfs) en HTTP. 
-  * **iPXE** : chargeur intermédiaire qui permet de booter Clonezilla via HTTP (plus rapide et fiable que TFTP pour les gros fichiers). [[https://khimananda.com/blog/pxe-boot-for-automated-os-installs|khimananda]] 
- 
- 
- 
-====1. Préparation du système ==== 
- 
- 
-===  1.1. Installer les paquets nécessaires === 
- 
- 
-  sudo apt update 
-  sudo apt install -y dnsmasq tftpd-hpa syslinux-common grub-efi-amd64-signed shim-signed ipxe 
- 
-  * dnsmasq : DHCP + DNS + TFTP + proxyDHCP. 
-  * tftpd-hpa : serveur TFTP (optionnel si vous utilisez uniquement iPXE via HTTP, mais utile pour les premiers chargeurs). 
-  * syslinux-common : fournit pxelinux.0, undionly.kpxe, etc. 
-  * grub-efi-amd64-signed + shim-signed : pour le boot UEFI sécurisé. 
-  * apache2 : serveur HTTP pour Clonezilla. 
-  * ipxe : chargeurs iPXE (undionly.kpxe, ipxe.efi). [[https://khimananda.com/blog/pxe-boot-for-automated-os-installs|khimananda]] 
- 
-===  1.2. Désactiver le DHCP du routeur sur le réseau de clonage (pas concerné) === 
- 
-Si votre routeur/switch gère déjà le DHCP sur le réseau 192.168.100.0/24, soit vous le désactivez, soit vous configurez dnsmasq en **proxyDHCP** (recommandé pour coexister avec un DHCP existant). [stackharbor](https://stackharbor.com/fr/base-de-connaissances/dnsmasq-small-network/) 
-====2. Configuration des interfaces réseau ==== 
- 
- 
-===  2.1. Interface externe **eno1** === 
- 
- 
-Configurez ''eno1'' (DHCP).  
- 
-  sudo nano /etc/network/interfaces 
- 
-  auto eno1 
-  iface eno1 inet dhcp 
-   
- 
-===  2.2. Interface de clonage ''enp2s0'' === 
- 
- 
-Attribuez une IP statique sur le réseau de clonage : 
- 
-  sudo nano /etc/network/interfaces 
- 
-Pas de gateway ici : la gateway par défaut reste sur eno1 
- 
-  auto enp2s0 
-  iface enp2s0 inet static 
-    address 192.168.100.1 
-    netmask 255.255.255.0 
- 
-Redémarrez le réseau : 
- 
-  sudo systemctl restart networking 
-  # ou 
-  sudo nmcli connection up <nom-connexion> 
- 
- 
-Vérifiez que la route par défaut passe bien par **eno1** : 
- 
-La ligne "default via ..." doit pointer vers la gateway de eno1 
- 
-  ip route show 
-comme ci-dessous 
-  default via 192.168.1.254 dev eno1 proto dhcp src 192.168.1.168 metric 1003  
-  192.168.1.0/24 dev eno1 proto dhcp scope link src 192.168.1.168 metric 1003  
-  192.168.100.0/24 dev enp2s0 proto kernel scope link src 192.168.100.1 linkdown  
- 
- 
- 
-Si nécessaire, ajustez les métriques pour prioriser **eno1** : [[https://www.reddit.com/r/debian/comments/1qu1jox/using_2_nics_with_2_networks/|reddit]] 
- 
-Dans 
-   
-  sudo nano /etc/network/interfaces 
- 
-ajoutez : 
- 
-  iface eno1 inet dhcp 
-    metric 100 
-   
-  iface enp2s0 inet static 
-    address 192.168.100.1 
-    netmask 255.255.255.0 
-    metric 200 
- 
- 
-====3. Configuration de dnsmasq pour PXE (BIOS + UEFI) ==== 
- 
- 
-===  3.1. Créer un fichier de configuration dédié === 
- 
- 
-  sudo nano /etc/dnsmasq.d/pxe-clonezilla.conf 
- 
-**Contenu (exemple pour un réseau `192.168.100.0/24`) :** 
- 
-  # Interface dédiée au réseau de clonage 
-  interface=enp2s0 
-  bind-interfaces 
-   
-  # Désactiver le DNS si inutile (optionnel) 
-  # no-resolv 
-   
-  # DHCP sur le réseau de clonage 
-  dhcp-range=enp2s0,192.168.100.100,192.168.100.200,12h 
-  dhcp-option=enp2s0,3,192.168.100.1      # passerelle (le serveur lui-même) 
-  dhcp-option=enp2s0,6,192.168.100.1      # DNS (le serveur, qui forward vers Internet) 
-  dhcp-option=enp2s0,15,clonezilla.local  # domaine local 
-   
-  # Activer TFTP 
-  enable-tftp 
-  tftp-root=/srv/tftp 
-   
-  # Détection architecture client (BIOS vs UEFI) 
-  dhcp-match=set:bios,option:client-arch,0      # BIOS/PCAT 
-  dhcp-match=set:efi64,option:client-arch,7     # UEFI x86_64 
-  dhcp-match=set:efi32,option:client-arch,6     # UEFI x86 (rare) 
-   
-  # Boot BIOS : iPXE undionly.kpxe 
-  dhcp-boot=tag:bios,undionly.kpxe 
-   
-  # Boot UEFI x64 : iPXE ipxe.efi (ou shim + grub si Secure Boot) 
-  dhcp-boot=tag:efi64,ipxe.efi 
-   
-  # Optionnel : proxyDHCP si un autre serveur DHCP existe déjà 
-  # dhcp-range=enp2s0,proxy 
- 
-> **Remarque** : Si vous utilisez un DHCP existant sur ce réseau, remplacez la section `dhcp-range` par `dhcp-range=enp2s0,proxy` et assurez-vous que votre DHCP principal ne définit **pas** les options 66/67 (next-server/filename). [[https://stackharbor.com/fr/base-de-connaissances/dnsmasq-small-network/|stackharbor]] 
- 
-===  3.2. Copier les chargeurs de boot dans `/srv/tftp` === 
- 
-  sudo mkdir -p /srv/tftp 
- 
-# iPXE pour BIOS 
-  sudo cp /usr/lib/ipxe/undionly.kpxe /srv/tftp/ 
- 
-# iPXE pour UEFI x64 
-  sudo cp /usr/lib/ipxe/ipxe.efi /srv/tftp/ 
- 
-# **Optionnel** : pour Secure Boot, utilisez shim + grub 
-  sudo cp /usr/lib/shim/shimx64.efi.signed /srv/tftp/bootx64.efi 
-  sudo cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi /srv/tftp/grubx64.efi 
- 
- 3.3. Redémarrer dnsmasq 
- 
-J'ai été obligé de redémarrer le serveur pour ne plus avoir d'erreur avec la commandes ci-dessous 
- 
-  sudo systemctl restart dnsmasq 
-  sudo systemctl enable dnsmasq 
- 
-Vérifiez les logs : 
- 
- 
-   sudo journalctl -u dnsmasq -f 
- 
- 
-====4. Configuration d’Apache pour servir Clonezilla ==== 
- 
- 
-===  4.1. Télécharger Clonezilla Live === 
- 
- 
-Récupérez l’ISO Clonezilla Live stable depuis le site officiel : [[https://clonezilla.org/downloads.php|Clonezilla]] 
- 
- 
-  cd /tmp 
-  wget https://clonezilla.org/downloads/download.php?dist=debian&select=stable&version=20240801-noble&iso=clonezilla-live-20240801-noble-amd64.iso -O clonezilla-live.iso 
- 
-> Remplacez l’URL par la dernière version disponible. 
- 
-===  4.2. Extraire les fichiers nécessaires === 
- 
- 
- 
-  sudo mkdir -p /var/www/html/clonezilla 
-  sudo mount -o loop clonezilla-live.iso /mnt 
-  sudo cp -r /mnt/live /var/www/html/clonezilla/ 
-  sudo umount /mnt 
- 
-Les fichiers importants sont dans  
-  /var/www/html/clonezilla/live/  
- 
-  * **vmlinuz** (ou linux) 
-  * **initrd.img** (ou initrd.gz) 
-  * **filesystem.squashfs** 
- 
-===  4.3. Activer le module headers d’Apache (optionnel, pour les grands fichiers) === 
- 
- 
- 
-  sudo a2enmod headers 
-  sudo systemctl restart apache2 
- 
-Vérifiez l’accès HTTP : 
- 
- 
-  curl -I http://192.168.100.1/clonezilla/live/vmlinuz 
- 
- 
-====5. Configuration du menu iPXE ==== 
- 
- 
-====  5.1. Créer le fichier `menu.ipxe` ==== 
- 
- 
- 
-  sudo nano /var/www/html/clonezilla/menu.ipxe 
- 
-**Contenu :** 
- 
-  #!ipxe 
-   
-  # Menu principal 
-  menu Clonezilla Server 
-  item --gap -- ------------------------- 
-  item clonezilla_live   Clonezilla Live (sauvegarde/restauration) 
-  item local             Boot local 
-  choose --timeout 5000 selected || set selected clonezilla_live 
-  goto ${selected} 
-   
-  :clonezilla_live 
-  echo Chargement de Clonezilla Live... 
-  kernel http://192.168.100.1/clonezilla/live/vmlinuz \ 
-    boot=live \ 
-    union=overlay \ 
-    config \ 
-    components \ 
-    quiet \ 
-    noswap \ 
-    edd=on \ 
-    nomodeset \ 
-    locales=fr_FR.UTF-8 \ 
-    keyboard-layouts=fr \ 
-    ocs_live_run="ocs-live-general" \ 
-    ocs_live_extra_param="" \ 
-    ocs_live_batch="no" \ 
-    ocs_lang="fr_FR.UTF-8" \ 
-    vga=788 \ 
-    ip=dhcp \ 
-    live-media-path=/clonezilla/live/ \ 
-    initrd=initrd.img 
-  initrd http://192.168.100.1/clonezilla/live/initrd.img 
-  boot 
-   
-  :local 
-  echo Boot local... 
-  sanboot --no-describe || chain hd0 || chain fd0 || chain cdrom 
- 
-> **Important** : Ajustez `live-media-path` si nécessaire. Clonezilla Live peut aussi être configuré pour monter le squashfs via HTTP avec `live-media=HTTP`.[[https://khimananda.com/blog/pxe-boot-for-automated-os-installs|khimananda]]  
- 
-====  5.2. Faire pointer iPXE vers ce menu ==== 
- 
- 
-Les chargeurs `undionly.kpxe` et `ipxe.efi` doivent charger `menu.ipxe` via HTTP. Pour cela, créez un fichier de configuration iPXE dans `/srv/tftp` : 
- 
-**Pour BIOS (`undionly.kpxe`) :** 
- 
- 
-  sudo nano /srv/tftp/pxelinux.cfg/default 
- 
-Mais avec iPXE, il est plus simple d’utiliser un script `.ipxe` chargé directement. Une approche courante est de modifier le comportement de dnsmasq pour qu’il serve un fichier `.ipxe` via TFTP, qui lui-même charge le menu HTTP. 
- 
-**Alternative simple** : créer `/srv/tftp/boot.ipxe` : 
- 
- 
-  sudo nano /srv/tftp/boot.ipxe 
- 
-  #!ipxe 
-  chain http://192.168.100.1/clonezilla/menu.ipxe 
- 
-Puis modifier dnsmasq pour servir ce fichier : 
- 
- 
-# Dans  
-  /etc/dnsmasq.d/pxe-clonezilla.conf 
- 
-  dhcp-boot=tag:bios,boot.ipxe 
-  dhcp-boot=tag:efi64,boot.ipxe 
- 
-Et redémarrer dnsmasq. 
- 
- 
-=====6. Activer le routage et le NAT pour l’accès Internet des clients ===== 
- 
- 
-Pour que les postes clonés puissent accéder à Internet via `eno1` : 
- 
-====  6.1. Activer l’IP forwarding ==== 
- 
-  sudo nano /etc/sysctl.conf 
- 
-Ajoutez ou décommentez : 
- 
-  net.ipv4.ip_forward=1 
- 
-Appliquez : 
- 
- 
-  sudo sysctl -p 
- 
-====  6.2. Configurer iptables/nftables pour le NAT ==== 
- 
- 
-**Avec iptables :** 
- 
- 
-  sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE 
-  sudo iptables -A FORWARD -i enp2s0 -o eno1 -j ACCEPT 
-  sudo iptables -A FORWARD -i eno1 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
- 
-**Pour rendre persistant (Debian 13 utilise nftables par défaut, mais iptables-legacy fonctionne) :** 
- 
- 
-  sudo apt install -y iptables-persistent 
-  sudo netfilter-persistent save 
- 
-Ou avec nftables : 
- 
- 
-  sudo nano /etc/nftables.conf 
- 
-  table ip nat { 
-    chain postrouting { 
-        type nat hook postrouting priority 100; 
-        oifname "eno1" masquerade 
-    } 
-  } 
-   
-  table ip filter { 
-    chain forward { 
-        type filter hook forward priority 0; 
-        iifname "enp2s0" oifname "eno1" accept 
-        iifname "eno1" oifname "enp2s0" ct state related,established accept 
-    } 
-  } 
- 
- 
-  sudo systemctl restart nftables 
- 
- 
-=====7. Tests et validation ===== 
- 
- 
-====  7.1. Vérifier le DHCP ==== 
- 
- 
-Sur un client, lancez : 
- 
- 
-  sudo dhclient -v enp2s0 
-  ip addr show enp2s0 
-  cat /etc/resolv.conf 
- 
-Le client doit obtenir une IP dans `192.168.100.100-200`, avec `192.168.100.1` comme gateway et DNS. 
- 
-====  7.2. Tester le PXE ==== 
- 
- 
-  * Démarrez un poste client en PXE (BIOS ou UEFI). 
-  * Il doit charger iPXE, puis afficher le menu Clonezilla. 
-  * Sélectionnez Clonezilla Live et vérifiez que le kernel/initrd se chargent via HTTP. 
- 
-====  7.3. Vérifier l’accès Internet depuis un client cloné ==== 
- 
- 
-Une fois Clonezilla démarré, ouvrez un terminal et testez : 
- 
- 
-  ping -c 3 8.8.8.8 
-  ping -c 3 debian.org 
- 
- 
-====8. Notes et optimisations ==== 
- 
- 
-  * **Secure Boot** : Si vos clients ont Secure Boot activé, utilisez `shimx64.efi` + `grubx64.efi` signés, puis chainload vers iPXE ou directement vers le kernel Clonezilla. [ipxe](https://ipxe.org/secboot) 
-  * **Performance** : Servir Clonezilla via HTTP (iPXE) est nettement plus rapide que TFTP pour les gros fichiers. [khimananda](https://khimananda.com/blog/pxe-boot-for-automated-os-installs) 
-  * **Sécurité** : Restreignez l’accès Apache au réseau de clonage si nécessaire avec `<Directory>` dans `/etc/apache2/sites-available/000-default.conf`. 
-  * **Logs** : Surveillez `/var/log/syslog` ou `journalctl -u dnsmasq` pour déboguer les problèmes de PXE. 
- 
- 
-## Résumé des fichiers clés 
- 
-| Fichier               | Chemin                                              | Rôle | 
-| Configuration dnsmasq | `/etc/dnsmasq.d/pxe-clonezilla.conf`                | DHCP + TFTP + PXE | 
-| Chargeur BIOS         | `/srv/tftp/undionly.kpxe`                           | iPXE pour BIOS | 
-| Chargeur UEFI          | `/srv/tftp/ipxe.efi`                               | iPXE pour UEFI | 
-| Script iPXE           | `/srv/tftp/boot.ipxe`                               | Chainload vers menu HTTP | 
-| Menu iPXE             | `/var/www/html/clonezilla/menu.ipxe`                | Menu de boot Clonezilla | 
-| Kernel Clonezilla     | `/var/www/html/clonezilla/live/vmlinuz`             | Noyau Clonezilla | 
-| Initrd Clonezilla     | `/var/www/html/clonezilla/live/initrd.img`          | RAM disk Clonezilla | 
-| Squashfs              | `/var/www/html/clonezilla/live/filesystem.squashfs` | Système Clonezilla | 
- 
-Cette configuration est robuste, supporte BIOS et UEFI, et permet aux postes clonés d’accéder à Internet via le NAT du serveur. [khimananda](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)