Outils pour utilisateurs

Outils du site


apache

Ceci est une ancienne révision du document !


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)

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