Ceci est une ancienne révision du document !
Table des matières
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
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
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](https://stackharbor.com/fr/base-de-connaissances/dnsmasq-small-network/)
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 : [de.scribd](https://de.scribd.com/document/226215640/How-to-Setup-a-Clonezilla-Server)
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](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)
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)
