User Tools

Site Tools


centos:dnsmasq

Centos : Configuration d'un serveur de déploiemernt PXE

Présentaion

Serveur PXE - Preboot eXecution Environment - permet à un ordinateur client de démarrer, exécuter ou installer un système d'exploitation directement à partir d'une interface réseau, éliminant le besoin de graver un CD / DVD ou d'utiliser un support physique ou facilitant l'installation de Linux distributions sur votre infrastructure réseau sur plusieurs machines en même temps.

Définition du démarrage réseau PXE

Cet article explique comment installer et configurer un serveur PXE sur RHEL/CentOS 7 x64 bits avec:

  • Un serveur DNSMASQ qui fournit les services DNS, TFTP et DHCP
  • Un serveur TFTP, qui permet de télécharger des images amorçables via le réseau en utilisant le protocole TFTP (Trivial File Transfer Protocol)
  • Un paquet Syslinux qui fournit des bootloaders pour le démarrage réseau,
  • Un dépôt local contenant les paquets de l'image ISO DVD CentOS 7
  • Un serveur VSFTPD qui hébergera l'image DVD en miroir montée localement. - qui servira de référentiel d'installation miroir officiel RHEL / CentOS 7 d'où l'installateur extraira les paquets requis.

Prérequis

Il est absolument nécessaire qu'une interface réseau soit configuré avec une adresse IP statique de la même plage IP que celle du segment réseau qui fournira le servicle PXE.

Configuration de l'interface réseau en IP statique

Avant d'aller plus loin, il est important d'identifier quelle interface réseau va servir à effectuer les installations.

Activation du port forwarding

Pour activer le port forwarding (permet de laisser la machine accéder à Internet lorsqu'elle est sur le réseau filaire), cela se fait avec la commande suivante qui a été ajoutée dans le fichier /etc/rc.local afin que le paramétrage soit effectué au démarrage de la machine :

$ iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.2.0/24

Et enfin, en ajoutant l'option suivante dans le fichier /etc/sysctl.conf

net.ipv4.ip_forward=1

Étape 1: Installer et configurer le serveur DNSMASQ

DNSmasq va servir à plusieurs choses :

  • Serveur DHCP ;
  • Serveur TFTP ;
  • Serveur DNS.

Présentation

Dnsmasq est un serveur léger pour fournir les services DNS, DHCP, Bootstrap Protocol et TFTP pour un petit réseau, voire pour un poste de travail. Il permet d'offrir un service de nommage des machines du réseau interne non intégrées au service de nommage global (i.e. le service DNS d'Internet). Le service de nommage est associé au service d'adressage de telle manière que les machines dont le bail DHCP est fourni par Dnsmasq peuvent avoir automatiquement un nom DNS sur le réseau interne. Le logiciel offre un service DHCP statique ou dynamique.

Installer le paquet dnsmasq

 $ yum installer dnsmasq

Configuration de dnsmasq

Le fichier de configuration par défaut principal de DNSMASQ, est dans le répertoire /etc.

Sauvegarder ce fichier au cas avant de le modifier pour pouvoir y revenir plus tard.

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup

vi /etc/dnsmasq.conf

Configurer dnsmasq pour ne fonctionner que sur l'interface réseau concerné, ici eth0.

interface=eth0
except-interface=wlan0
bind-interfaces

Ensuite, on active la partie DHCP

dhcp-range=192.168.2.20,192.168.2.80,1h
dhcp-option=3,192.168.2.1
dhcp-boot=pxelinux.0
dhcp-authoritative
domain=toulibre.org

Puis TFTP

enable-tftp
tftp-root=/srv/tfpd
tftp-no-blocksize

Et enfin, la partie DNS

address=/security.ubuntu.com/192.168.2.1
address=/local.ubuntu.com/192.168.2.1
address=/boot.ubuntu.com/192.168.2.1

Ici, on effectue un “DNS menteur” sur la zone ubuntu.com, ce n'est pas forcément très heureux mais ça permet d'éviter d'aller sur internet pour des ressources que l'on peut servir localement. De plus, on « fabrique » deux sous-domaines qui n'existent pas chez ubuntu.com, pour local. et boot. on pouvait aussi prendre un domaine bidon comme chez.moi.

La configuration finale doit ressembler à ceci :

interface=eth0,lo
#bind-interfaces
domain=toulibre.org
# DHCP range-leases
dhcp-range=eth0,192.168.2.20,192.168.2.80,1h
# PXE
dhcp-boot=pxelinux.0,pxeserver,192.168.2.19
# Gateway
dhcp-option=3,192.168.2.1
# DNS
dhcp-option=6,92.168.1.1, 8.8.8.8
# Serveurs de noms en amont
server=8.8.4.4
# Broadcast Address
dhcp-option=28,10.0.0.255
# NTP Server
dhcp-option=42,0.0.0.0
pxe-prompt="Press F8 for menu.", 60
pxe-service=x86PC, "Install CentOS 7 from network server 192.168.1.20", pxelinux
enable-tftp
tftp-root=/var/lib/tftpboot

Les déclarations qu'il faut modifier sont les suivantes:

  • interface - Interfaces sur leqel le serveur doit écouter et fournir des services.
  • bind-interfaces - Ne pas commenter pour lier uniquement sur cette interface.
  • domain - Remplacer par le nom de domaine.
  • dhcp-range - Remplacer par la plage IP.
  • dhcp-boot - Remplacer par adresse IP d'interface.
  • dhcp-option = 3 192.168.1.1 - Remplacer l'adresse IP par passerelle réseau.
  • dhcp-option = 6,92.168.1.1 - Remplacer l'adresse IP par l'adresse IP du serveur DNS - plusieurs adresses IP DNS peuvent être définies.
  • server = 8.8.4.4 - Mettez vos adresses IP des redirecteurs DNS.
  • dhcp-option = 28,10.0.0.255 - Remplacer l'adresse IP par l'adresse de diffusion réseau - facultativement.
  • dhcp-option = 42,0.0.0.0 - Remplacer par l'adresse ip du serveur de temps de réseau - facultativement (adresse 0.0.0.0 ).
  • pxe-prompt - Laisser par défaut - signifie appuyer sur la touche F8 pour entrer dans le menu avec le temps d'attente en secondes.
  • pxe = service - Utiliser x86PC pour les architectures 32 bits / 64 bits et entrer une invite de description de menu sous guillemets. Les autres types de valeurs peuvent être: PC98, IA64EFI, Alpha, Arcx86, IntelLeanClient, IA32EFI, BCEFI, XscaleEFI et X86-64EFI.
  • enable-tftp - Active le serveur TFTP intégré.
  • tftp-root - Utilise /var/lib/tftpboot - l'emplacement de tous les fichiers de netbooting.

Étape 2: Installer le serveur TFTP

Créer les répertoires

$ mkdir -p /var/lib/tftpboot/centos7

Configurer le menu de boot PXE

En règle générale, le serveur PXE lit sa configuration à partir d'un groupe de fichiers spécifiques (fichiers GUID - d'abord, fichiers MAC - suivant, fichier default - en dernier) hébergé dans un dossier appelé pxelinux.cfg, qui doit se trouver dans le répertoire spécifié dans tftp-root du fichier de configuration principal de DNSMASQ.

Créer le répertoire requis pxelinux.cfg et y créee un fichier default :

$ mkdir /var/lib/tftpboot/pxelinux.cfg

Editer le fichier de configuration de PXE Server avec des options d'installation de distributions Linux valides.

Tous les chemins utilisés dans ce fichier doivent être relatifs au répertoire /var/lib/tftpboot.

Exemple de fichier de configuration (modifier les images d'installation - fichiers noyau et initrd), protocoles (FTP, HTTP, HTTPS, NFS - et IP pour refléter les répertoires sources et chemins d'installation réseau ) :

  
  $ cat /var/lib/tftpboot/pxelinux.cfg/default << EOF
  default menu.c32
  prompt 0
  timeout 300
  ONTIMEOUT local
  menu title ########## PXE Boot Menu ##########
  label 1
  menu label ^1) Install CentOS 7 x64 with Local Repo
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount
  label 2
  menu label ^2) Install CentOS 7 x64 with http://mirror.centos.org Repo
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img method=http://mirror.centos.org/centos/7/os/x86_64/ devfs=nomount ip=dhcp
  label 3
  menu label ^3) Install CentOS 7 x64 with Local Repo using VNC
  kernel centos7/vmlinuz
  append  initrd=centos7/initrd.img method=ftp://192.168.1.20/pub devfs=nomount inst.vnc inst.vncpassword=password
  label 4
  menu label ^4) Boot from local drive
  EOF
  • Le menu label 3 : spécifie que l'installation du client doit être effectuée à partir d'un emplacement distant via VNC (remplacer “password” par un mot de passe fort)
  • Le menu label 2 : permet d'installer sur un client headless depuis les sources d'installation d'un miroir Internet officiel CentOS 7 (ce qui nécessite une connexion Internet disponible sur le client via DHCP et NAT).

Normalement, les chemins des fichiers sont interprétés comme relatifs au répertoire racine de tftp, mais on peut utiliser la syntaxe :: (par exemple ::boot/amd64/debian/10/install.amd /vmlinuz) pour référencer la racine tftp d'une manière “absolue”. Le symbole :: permet de faire exactement cela : c'est un moyen de référencer le chemin absolu vers la racine tftp.

Étape 3:Installation des chargeurs d'ammorçages SYSLINUX

Installer SYSLINUX

Installer le paquet de démarrage Syslinx PXE (Syslinux Bootloaders) :

$ yum install syslinux

Charger les bootloaders SYSLINUX

Copier les fichiers de bootloaders PXE qui se trouvent dans /usr/lib/syslinux (kernel et initrd) dans le répertoire /var/lib/tftpboot/centos7

$ cp -r /usr/share/syslinux/* /var/lib/tftpboot

Télécharger l'image netboot fournie par centos

$ wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img
$ wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz

Étape 4: Configuration de l'entrepôt contenant les images amorçables

Configuration de nginx

On va activer nginx pour servir trois domaines (les trois que l'on usurpe à ubuntu.com).

Voici donc ce que l'on va placer dans /etc/nginx/sites-available/defaults :

server {
    listen 80 default_server;
    root /srv/apt/archive.ubuntu.com/;
    index index.html index.htm;
    server_name archive.ubuntu.com local.ubuntu.com;
    location / {
            try_files $uri $uri/ =404;
    }
}

server {
    server_name security.ubuntu.com;
    root /srv/apt/security.ubuntu.com;
    location / {
            try_files $uri $uri/ =404;
    }
}

server {
    server_name boot.ubuntu.com;
    root /srv/boot/;
    location / {
            try_files $uri $uri/ =404;
    }

}

Il ne reste plus qu'à faire des liens symboliques pour rendre les fichiers d'apt-mirror visibles par nginx.

$ mkdir -p /srv/apt/
$ ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/archive.ubuntu.com
$ ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ /srv/apt/security.ubuntu.com

Ajouter des images DVD

Monter le DVD/l'image DVD sur le système local

Pour cette étape, les fichiers CentOS, kernel et initrd sont requis. Pour obtenir ces fichiers, il faut utiliser de l'image ISO du DVD CentOS 7. Télécharger le socle CentOS DVD à l'adresse ftp://venezia.appli.dgfip/pub/socle-linux/socle2016_0.14/soclelinux-2016-0.14.iso Graver l'image, introdire le DVD dans le lecteur le DVD et monter l'image dans le chemin système /mnt en lançant la commande ci-dessous:

La raison de l'utilisation du DVD et non d'une image de CD minimale est le fait que plus tard ce contenu de DVD serait utilisé pour créer des référentiels d'installation locaux pour les sources FTP.

$ mount -o loop /dev/cdrom/mnt
$ ls /mnt

Si la machine ne possède pas de lecteur DVD, on peut également télécharger localement l'ISO CentOS 7 DVD en utilisant les utilitaires wget ou curl depuis un miroir CentOS et le monter.

$ wget ftp://venezia.appli.dgfip/pub/socle-linux/socle2016_0.14/soclelinux-2016-0.14.iso
$ mount -o loop /path/to/soclelinux-2016-0.14.iso /mnt

Copier les fichiers amorçables CentOS

Une fois le contenu du DVD rendu disponible, créer le répertoire centos7 et copier les images du noyau et d'initialisation CentOS 7 à partir de l'emplacement du DVD monté dans la structure de dossiers centos7.

$ mkdir /var/lib/tftpboot/centos7

$ cp /mnt/images/pxeboot/vmlinuz  /var/lib/tftpboot/centos7
$ cp /mnt/images/pxeboot/initrd.img  /var/lib/tftpboot/centos7

La raison de l'utilisation de cette approche est que, plus tard, on peut créer de nouveaux répertoires séparés dans le chemin /var/lib/tftpboot et ajouter d'autres distributions Linux au menu PXE sans perturber toute la structure du répertoire.

Étape 5:Création de la source d'installation de Mirror local de CentOS 7

Bien qu'on puisse utiliser divers protocoles tels que HTTP, HTTPS ou NFS, on choisi le protocole serveur vsftpd car il est très fiable et facile à installer.

L'iamge du DVD Centos a déjà été monté à l'étape précédente

Installer le serveur Vsftpd

$ yum install vsftpd

Copier les rpms sur le repos

$ cp -r /mnt/*  /var/ftp/pub/ 

Définir les autorisations sur le chemin FTP

  $ chmod -R 755 /var/ftp/pub

Démonter CentOS 7 DVD et supprimer le support physique.

$ umount /mnt
$ rm /mnt -rf

Étape 6: Démarrage des services

Démarrer et activer les démons

Maintenant que la configuration du serveur PXE est terminée, démarrer les serveurs DNSMASQ et VSFTPD, vérifier leur état et activer le démarrage automatique, en exécutant les commandes ci-dessous.

$ systemctl start dnsmasq
$ systemctl status dnsmasq
$ systemctl start vsftpd
$ systemctl status vsftpd
$ systemctl enable dnsmasq
$ systemctl enable vsftpd

Ouvrir le pare-feu et tester la source d'installation FTP

Pour obtenir une liste de tous les ports devant être ouverts sur votre pare-feu afin que les ordinateurs clients puissent atteindre et démarrer à partir du serveur PXE, exécutez la commande netstat et ajoutez les règles CentOS 7 Firewalld aux ports d'écoute dnsmasq et vsftpd.

$ netstat -tulpn
$ firewall-cmd --add-service=ftp --permanent  	## Port 21
$ firewall-cmd --add-service=dns --permanent  	## Port 53
$ firewall-cmd --add-service=dhcp --permanent  	## Port 67
$ firewall-cmd --add-port=69/udp --permanent  	## Port for TFTP
$ firewall-cmd --add-port=4011/udp --permanent      ## Port for ProxyDHCP
$ firewall-cmd --reload                             ## Apply rules

Étape 7: Configuration du kickstart

Effectuer d'abord une installation de RHEL/CentOS 7 dans un environnement virtualisé et utiliser le fichier Kickstart résultant pour les futures installations.

Créer et copier le fichier **Kiskstart** sur le serveur FTP

Copier le fichier nommé anaconda-ks.cfg dans le chemin du serveur par défaut de Vsftpd (/var/ftp/pub)

$ cp anaconda-ks.cfg /var/ftp/pub/
$ chmod 755 /var/ftp/pub/anaconda-ks.cfg

Apporter les modifications minimales suivantes.

$ vi /var/ftp/pub/anaconda-ks.cfg
  • Remplacer -url avec l'emplacement de la source d'installation réseau: Ex: -url=ftp://192.168.1.25/pub/
  • Remplacer network -bootproto par dhcp si on a configuré manuellement des interfaces réseau lors du processus d'installation.

Vérification du fichier Kickstart

Avant de tenter d'utiliser ce fichier pour les procédures d'installation, il est important de vérifier le fichier à l'aide de la commande ksvalidator incluse dans le package Pykickstart, en particulier si des personnalisations manuelles ont été effectuées.

Installer le paquet Pykickstart et vérifier le fichier Kickstart en lançant les commandes suivantes.

$ yum install pykickstart
$ ksvalidator /var/ftp/pub/anaconda-ks.cfg

La dernière vérification consiste à s'assurer que le fichier Kickstart est accessible à partir de la source d'installation FTP Local Mirror définie dans l'étape précédente.

ftp://192.168.1.25/pub/

Ajouter le menu Kikstart à la configuration du serveur PXE

Pour accéder à l'option Installation automatique de RHEL / CentOS 7 à partir du menu PXE, ajouter l'étiquette suivante à la configuration par défaut du fichier PXE.

$ nano /var/lib/tftpboot/pxelinux.cfg/default

  label 5
  menu label ^5) Install CentOS 7 x64 with Local Repo using Kickstart
  kernel vmlinuz
  append initrd=initrd.img inst.ks=ftp://192.168.1.25/pub/anaconda-ks.cfg inst.vnc inst.vncpassword=password

L'installation automatique peut être supervisée graphiquement via VNC avec mot de passe (remplacer le mot de passe VNC en conséquence) et le fichier Kickstart est localisé localement sur le serveur PXE et spécifié par le paramètre de démarrage inst.ks (protocole et emplacement sur le réseau).

Étape 8: Configurer les clients pour démarrer à partir du réseau

Les clients peuvent maintenant démarrer et installer CentOS 7 en configurant Démarrage réseau comme périphérique de démarrage principal dans le BIOS.

Une fois qu'on atteint le menu PXE, choisir le type d'installation CentOS 7, appuyer sur la touche Entrée et poursuivre la procédure d'installation de la même manière que l'installeation à partir d'un DVD.

centos/dnsmasq.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1