Ceci est une ancienne révision du document !
Table des matières
Serveur iPXE + Clonezilla sur Debian 13 et Apache avec 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](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)
Architecture réseau cible
- - 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](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)
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 apache2 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](https://khimananda.com/blog/pxe-boot-for-automated-os-installs)
1.2. Désactiver le DHCP du routeur sur le réseau de clonage (si nécessaire)
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` selon votre environnement (DHCP ou IP statique). Exemple avec `/etc/network/interfaces` ou NetworkManager.
Exemple avec interfaces (statique) :
auto eno1 iface eno1 inet static address 203.0.113.10 netmask 255.255.255.0 gateway 203.0.113.1 dns-nameservers 1.1.1.1 8.8.8.8
Exemple avec DHCP :
auto eno1 iface eno1 inet dhcp
2.2. Interface de clonage (enp2s0)
Attribuez une IP statique sur le réseau de clonage :
auto enp2s0 iface enp2s0 inet static address 192.168.100.1 netmask 255.255.255.0 # Pas de gateway ici : la gateway par défaut reste sur eno1
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` :
ip route show # La ligne "default via ..." doit pointer vers la gateway de eno1
Si nécessaire, ajustez les métriques pour prioriser `eno1` : [reddit](https://www.reddit.com/r/debian/comments/1qu1jox/using_2_nics_with_2_networks/)
# Dans /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)
