Outils pour utilisateurs

Outils du site


apache

Ceci est une ancienne révision du document !


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. 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). 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). 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 : 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). 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

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 : 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`.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)

apache.1788290526.txt.gz · Dernière modification : de rene