96 lines
4.1 KiB
Markdown
96 lines
4.1 KiB
Markdown
Title: Démarrage PXE avec Openwrt, Dnsmasq et FreeNAS
|
|
Date: 2016-03-09 15:14
|
|
Category: sysadmin
|
|
Tags: réseau, TFTP, OpenWRT, pl-fr
|
|
Status: published
|
|
|
|
Ajourd'hui j'ai décidé de simplifier mon architecture réseau , je me sépare donc
|
|
de mon serveur DHCP(dhcpd) et décide d'utiliser celui de mon routeur sous
|
|
[OpenWRT][l_openwrt]. Il y a tout de même un petit couac : mon vieux serveur me
|
|
permettait de démarrer en PXE pour différentes architectures x86 : efi, efi64 et
|
|
Bios.
|
|
|
|
Si la configuration du PXE sous dhcpd est très documenté, avec
|
|
[dnsmasq][l_dnsmasq] c'est pas vraiment le cas. Je vous livre ici le résultat de
|
|
mes recherche avec un exemple qui fonctionne très bien.
|
|
|
|
### Ce que j'ai
|
|
|
|
J'ai un routeur TPLink sous OpenWRT et un serveur Freenas qui fournit des
|
|
services SMB, NFS et TFTP. FreeNAS et déjà configuré et fonctionnel puisque je
|
|
l'utilisait déjà avec mon serveur DHCP.
|
|
|
|
Le démarrage PXE est assuré par [iPXE][l_ipxe]. Le tout doit me permettre de
|
|
démarrer des machines via le réseau soit pour installer des Windows, soit cloner
|
|
/ restaurer des machines avec Clonezilla ou encore dépanner / récupérer des
|
|
données avec SysrecueCD. Las machines clientes sur lesquelles j'interviens vont
|
|
du vieux portable en Core Duo à l'ordinateur fixe en Core i7 en passant par des
|
|
Mac (bon je triche, là iPXE démarre depuis une clé USB : pas de vrai PXE
|
|
possible).
|
|
|
|
Voilà un schéma de ce que je veux :
|
|
|
|

|
|
|
|
Sur mon FreeNAS, TFTP est activé, les fichiers sont rangés comme ceci :
|
|
|
|
* ``tftp/efi``
|
|
* * ``ipxe.efi`` : le chargeur de démarrage ipxe en mode efi64
|
|
* * ``ipxe_32.efi`` : le chargeur de démarrage ipxe en mode EFI 32 bits, ce
|
|
n'est pas très utile normalement mais il arrive encore de trouver des
|
|
machines efi32 … ``tftp/bios``
|
|
* * ``ipxe.pxe`` : le chargeur de démarrage ipxe en mode Bios ``/tftp/c``
|
|
* * ``boot.ipxe`` : le fichier de configuration contenant le menu qu'ipxe
|
|
appelle lorsqu'il démarre.
|
|
|
|
### configuration du routeur
|
|
|
|
J'ai donc besoin de configurer dnsmasq sur le routeur pour lui permettre de
|
|
choisir le bon fichier de démarrage par le réseau en fonction de ma machine
|
|
cliente.
|
|
|
|
Je me connecte sont en SSH sur mon routeur, puis j'édite le fichier
|
|
``/etc/dnsmasq.conf`` comme ci dessous :
|
|
|
|
~~~
|
|
# mach arch type for proper pxe Boot
|
|
dhcp-match=bios,option:client-arch, 0
|
|
dhcp-match=efi32,option:client-arch, 6
|
|
dhcp-match=efix64,option:client-arch, 7
|
|
dhcp-match=efix64,option:client-arch, 9
|
|
|
|
#Special case : iPXE boot
|
|
dhcp-match=ipxe,option:user-class,iPXE
|
|
|
|
# Boot now!
|
|
dhcp-boot=tag:bios,bios/ipxe.pxe,srvtech,192.168.10.250
|
|
dhcp-boot=tag:efix32,efi/ipxe.efi,srvtech,192.168.10.250
|
|
dhcp-boot=tag:efix64,efi/ipxe.efi,srvtech,192.168.10.250
|
|
dhcp-boot=tag:ipxe,c/boot.ipxe,srvtech,192.168.10.250
|
|
~~~
|
|
|
|
Le principe est très simple, on colle une étiquette en fonction de
|
|
l'architecture du client avec l'option `dhcp-match`. La syntaxe est
|
|
**dhcp-match=tag:[*étiquette*],option:[*option_a_comparer*],[*valeur_a_comparer*]**.
|
|
|
|
Cette étiquette servira ensuite au dhcp d'envoyer à la machine client le bon
|
|
ordre de récupération du fichier de démarrage avec l'option ``dhcp-boot`` avec
|
|
comme syntaxe
|
|
**dhcp-boot=tag:[*étiquette*],[*fichier_de_demarrage*],[*nom_du_serveur*],[*adresse_du_serveur*]**.
|
|
|
|
Étant donné qu'iPXE vient chercher son fichier de configuration lui aussi en
|
|
mode PXE, notre serveur DCHP attribue à sa demande une étiquette spéciale afin
|
|
qu'il récupère convenablement celui-ci.
|
|
|
|
Il suffit ensuite de redémarrer le service dnsmasq avec la commande
|
|
``/etc/init.d/dnsmasq restart``.
|
|
|
|
Il suffit maintenant de tester un démarrage par le réseau mais attention, pensez
|
|
a désactiver le [Secure Boot][l_secure-boot] dans les paramétrages de l'EFI sur
|
|
vos machines clientes...
|
|
|
|
|
|
[l_openwrt]:https://openwrt.org/
|
|
[l_ipxe]:http://ipxe.org/
|
|
[l_dnsmasq]:http://www.thekelleys.org.uk/dnsmasq/doc.html
|
|
[l_secure-boot]:https://fr.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#Lancement_s.C3.A9curis.C3.A9_.28secure_boot.29
|