Instalación e Configuración dun Servidor PXE

De Wiki do Ciclo ASIR do IES de Rodeira

Índice

Introducción

Un Servidor PXE (Preboot eXecution Environment), permite a un equipo cliente arrancar un SO a travé da rede. Isto pode ser útil nos seguintes casos:

  • O equipo cliente non ten unidade de CD e queremos arrancar dende un CD-Live.
  • O equipo cliente non ten disco duro e queremos que colla o SO dende a rede
  • Ter diferentes utilidades, como memtest ou antivirus, preparadas para ser executadas sobre un equipo independentemente do que teña instalado.

Funcionamento

  1. No equipo cliente escollemos arrancar por PXE
  2. O Cliente PXE busca un servidor DHCP na rede
  3. Unha vez localizado, o servidor asignalle á máquina cliente unha IP, netmask, gw
  4. Mediante o protocolo TFTP o servidor envía á máquina cliente o SO
  5. O cliente co que lle manda o servidor é capaz de arrancar un minisistema na RAM.

Para instalar un Servidor PXE precisamos instalar:

  • Servidor DHCP
  • Servidor TFTP

Nota: O servidor DHCP e o Servidor TFTP non teñen porque estar na mesma máquina

Proceso de arranque do Servidor PXE en Detalle

Pxe1.png
  1. O cliente envía por broadcast unha menaxe DHCPDISCOVER
  2. O Servidor DHCP responde coa IP, next-server, filename
  3. O Cliente solicita unha petición TFTP a next-server solicitando filename.
  4. O Servidor TFTP responde e envía o filename o cliente.

Configuracións de Rede Iniciais

  • Empregaremos Virtualbox para simular ambos equipos.
Redepxe.png
  • O Servidor terá instalado un sistema Debian Jessie actualizado
  • O Servidor terá dúas tarxetas de rede, A configuración da rede do servidor será
Conexión de Área Local 1 Conexión de Área Local 2
  • Está conectada a rede NAT
  • IP: 10.0.2.15
  • Netmask:255.255.255.0
  • GW:10.0.2.2
  • Está conectada a rede interna (intnet)
  • IP: 172.20.4.100
  • Netmask:255.255.0.0
  • A rede interna intnet, non proporciona DHCP.
  • Se arrancamos unha 2º MV conectada a intnet co SystemRescueCd e lle asignamos unha ip compatible
ifconfig enp0s3 172.20.4.1 netmask 255.255.0.0
  • Veremos que ten rede co servidor
ping 172.20.4.100

Acceso dende o equipo real á Máquina Virtual con NAT

Empregamos VirtualBox para simular a nosa rede. A 1º tarxeta de rede do Servidor PXE está configurada por NAT, polo que non podemos comunicar o equipo real coa MV.

Para facelo podemos empregar redireccionamento de portos (port forwarding). Redireccionaremos o porto TCP/2222 da máquina real o porto TCP/22 (SSH) da máquina virtual.

Port forwarding1.png
Port forwarding2.png

Como deixamos host IP baleiro, calquera máquina que se conecte o porto 2222 da nosa máquina comunicarase coa MV

Na máquina real comprobamos que temos o porto aberto

root@debianRojas:/home/rojas# netstat -nap | grep 2222 
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      9967/VirtualBox

Para que a configuración sexa efectiva é preciso apagar a máquina e o virtualbox. Logo reiniciamos a máquina.

Na nosa máquina temos que instalar un servidor ssh

apt-get install ssh

E permitir o acceso ssh do root

/etc/ssh/sshd_config 
PermitRootLogin yes

Conectámonos dende o equipo real

ssh -p 2222 root@127.0.0.1

Instalación do Servidor PXE

Instalamos un servidor dhcp

  • Instalamos o paquete necesario
apt-get install isc-dhcp-server
  • Modificamos os arquivos de configuración correspondentes
/etc/default/isc-dhcp-server
INTERFACES=”eth1”
/etc/dhcp/dhcpd.conf
###############################################################
# Comentamos as seguintes liñas para que non espere un timeout
###############################################################
#option domain-name "example.org"; 
#option domain-name-servers ns1.example.org, ns2.example.org;
 
###############################################################
# Descomentamos a seguinte liña
###############################################################
 
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;    
 
###############################################################
# Definimos un rango de direccións a asignar entre 10 e 20.
###############################################################
 
subnet 172.20.0.0 netmask 255.255.0.0 {
 
        range 172.20.2.10 172.20.2.20;
 
         ############################################
	 # Necesario para configurar o Servidor PXE
         ############################################
 
	 next-server 172.20.4.100;
	 filename “pxelinux.0”;
 
        }
  • Iniciamos o Servicio DHCP
 
	/etc/init.d/isc-dhcp-server restart
  • Arrancamos o cliente co SRCD e colle a IP 172.20.2.10

Instalando o servidor tftp

 
apt-get install tfptd-hpa
  • O seu arquivo de configuración é
 
# /etc/default/tftpd-hpa
 
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
  • Iniciamos o servidor
 
/etc/init.d/tftpd-hpa start
  • Os directorio onde serviremos as imaxes de arranque é /srv/tfp
  • Descargamos a imaxe de instalación de Debian strecth 64 bits para arrancar pola rede
 
cd /srv/tftp
wget http://ftp.nl.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/netboot.tar.gz
tar xzf netboot.tar.gz

Nota: Nestes momentos hai un bug no netboot da rama testing, así que teremos que descargar a versión stable.

 
wget http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz


  • Aparecen as seguines carpetas e arquivos
 
debian-installer  ldlinux.c32  pxelinux.0  pxelinux.cfg  version.info
  • O seu significado é o seguinte:
    • debian-installer: Contén o núcleo do sistema
    • pxelinux.0: É o cargador de arranque a través da rede, forma parte do proxecto syslinux
    • pxelinux.cfg/default: É o arquivo de configuración de pxelinux, onde lle indica que kernel arrancar. Posteriormente empregaremos este arquivo para crear menús.

Comprobamos

  • Iniciamos a máquina cliente coa súa tarxeta configurada na rede interna e arrancamos
Comprobamos1.png
Comprobamos2.png

Como deixamos host IP baleiro, calquera máquina que se conecte o porto 2222 da nosa máquina comunicarase coa MV

  • Comeza o proceso de instalación de Debian correctamente
  • Problema: Non temos acceso a Internet.
  • Solución: Temos que facer que o servidor PXE enrute a eth1 a eth0 para que así a rede interna teña acceso a Internet.

Configurar Enrutamento no Servidor PXE

  • En /etc/sysctl.conf descomentamos
net.ipv4.ip_forward=1
  • Creamos un script coa nosa configuración personalizada
/etc/iptables-script.sh
#Configuración para enmascarar os paquetes recibidos da rede interna
iptables -t nat -A POSTROUTING -s 172.20.0.0/16 -o eth0 -j MASQUERADE
  • Dámoslle permiso de execución
chmod +x /etc/iptables-script.sh
  • Facemos que se execute o inicio
vi /etc/rc.local
 
#Cargamos a configuración de iptables
/etc/iptables-script.sh
  • Modificamos a configuración do servidor DHCP
option domain-name-servers 8.8.8.8; # DNS
subnet 172.20.0.0 netmask 255.255.0.0 {
  range 172.20.2.10 172.20.2.20;
  option routers 172.20.4.100; #Porta de enlace (Ten que ser o servidor PXE)
 …..
}

Creando unha configuración Mulitidistro

Agora xa temos un servidor PXE funcional que nos permite arrancar por rede a instalación de Debian, pero queremos que nos apareza un menú que nos permitar arrancar a nosa máquina con varias imaxes a través da rede.

Reconfiguracion do instalador de Debian

Para elo imos a deixar o noso /srv/tftp como sigue:

  • Creamos unha carpeta boot onde teremos unha carpeta por cada sistema arrancable.
  • Creamos dentro de boot a carpeta strecht64 (A nosa distribución debian). Movemos todo o contido da instalación de Debian a /srv/tftp/boot/stretch64.
  • Para poder arrancar pola rede, necesitamos algúns arquivos de inicio, que forman parte do paqute syslinux
    • Poderíamos descargalos de aquí e descomprimir os que necesitásemos
    • En vez diso, imos a reempregar os que xa veñen coa instalación por rede do Debian que temos descargado.
  • Creamos unha carpeta para os arquivos necesarios para o arranque
mkdir /srv/tftp/libs
  • Copiamos os seguintes arquivos
cp strecht64/debian-installer/amd64/pxelinux.0 /srv/tftp
cd strecht64/debian-installer/amd64/boot-screens/
cp libcom32.c32 /srv/tftp/libs
cp libutil.c32 /srv/tftp/libs
cp vesamenu.c32 /srv/tftp/libs
cp splash.png /srv/tftp/libs
cp ldlinux.c32 /srv/tftp
  • Creamos un arquivo baleiro para o menú
touch pxelinux.cfg/default
  • A estructura de arquivos quedaría como sigue
usuario@debian:/srv/tftp# tree 
.
├── boot
│   └── stretch64
│      └── debian-installer
│          └── amd64
│               │   ├── boot-screens
│               └── grub
├── libs
│   ├── libcom32.c32
│   ├── libutil.c32
│   ├── vesamenu.c32
│   └── splash.png
├── ldlinux.c32
├── pxelinux.0
└── pxelinux.cfg
    └── default

Editamos o arquivo pxelinux.cfg/default e creamos un menú para o noso debian

#Ruta onde se almacenan as librerias necesarias para o arranque
path ../libs
#Menu de arranque grafico
default libs/vesamenu.c32
prompt 0
timeout 300
 
#imaxe de fondo 640x480 pixels
MENU BACKGROUND libs/splash.png
MENU TITLE Benvido a PXE
 
LABEL Debian Stretch 64
    MENU LABEL Debian Stretch 64
      KERNEL boot/stretch64/debian-installer/amd64/linux
      APPEND initrd=boot/stretch64/debian-installer/amd64/initrd.gz
Debian boot1.png

Pasándolle parámetros o instalador Debian

De este xeito xa non teremos que escoller o idioma de instalación

LABEL Debian Stretch 64
        MENU LABEL Debian Stretch 64
        KERNEL boot/stretch64/debian-installer/amd64/linux
        APPEND initrd=boot/stretch64/debian-installer/amd64/initrd.gz locale=gl_ES.UTF-8 keymap=es language=es country=ES supported-locales=es_ES.UTF-8

Engadindo o System Rescue CD

Queremos ter un menú multinivel coas seguintes opcións

  • Instaladores
    • Debian Stretch 64
  • Live-CD
    • System Rescue CD

O SRCD non é tan sinxelo de configurar como a imaxe netboot de Debian. Nese caso, todo o que necesitaba para arrancar era o núcleo, pero o SRCD necesita durante o seu arranque acceder o arquivo sysrcd.dat. Por iso será necesario instalar un servidor NFS para compartilo na rede.

Instalación dun servidor NFS

  • Instalamos o paquete necesario
apt-get install nfs-kernel-server
  • No arquivo de configuración compartimos unha carpeta como só lectura
/etc/exports
/srv/nfs/srcd   172.20.0.0/255.255.0.0(ro,sync)
  • Reiniciamos o servicio
/etc/init.d/ssh restart

Preparación dos arquivos do SRCD

  • Primeiro creamos a carpeta onde se almacenará o arranque do SRCD.
mkdir /srv/tftp/boot/srcd
  • Descargamos unha iso do SRCD e montámola na máquina virtual.
mount /dev/sr0 /media/cdrom
  • Copiamos os arquivos necesarios para o arranque á carpeta /srv/tftp/boot/srcd
cp /media/cdrom/isolinux/initram.igz /srv/tftp/boot/srcd
cp /media/cdrom/isolinux/rescue* /srv/tftp/boot/srcd
  • Copiamos o resto de arquivos necesarios a /srv/nfs/srcd
cp /media/cdrom/sysrcd.dat /srv/nfs/srcd
cp /media/cdrom/sysrcd.md5 /srv/nfs/srcd


Modificamos o arquivo de configuración

Modificamos o menú de arranque pxelinux.cfg/default

######################
# Opcións Xerais
######################
 
#Ruta onde se almacenan as librerias necesarias para o arranque
path ../libs
#Menu de arranque grafico
default libs/vesamenu.c32 
prompt 0
timeout 300
 
#imaxe de fondo 640x480 pixels
MENU BACKGROUND libs/splash.png.1
MENU COLOR HOTKEY      1;36;44    #fc0000 #00000000 
MENU TITLE Benvido a PXE
 
#####################
# Definición do menú
#####################
MENU BEGIN INSTALADORES
 MENU TITLE INSTALADORES
  LABEL Debian Stretch 64
 	MENU LABEL ^Debian Stretch 64
        KERNEL boot/stretch64/debian-installer/amd64/linux
	APPEND initrd=boot/stretch64/debian-installer/amd64/initrd.gz locale=gl_ES.UTF-8 keymap=es language=es country=ES supported-locales=es_ES.UTF-8
   	TEXT HELP
  		Instala Debian Stretch 64 bits.
   	ENDTEXT
 
   LABEL volver
 	MENU LABEL ^Volver
 	MENU EXIT
 
        TEXT HELP
  		Volta o menu principal.
   	ENDTEXT
MENU END
 
MENU BEGIN LIVE-CD
 MENU TITLE LIVE-CD
    LABEL SystemRescueCD
	 MENU LABEL ^System Rescue Cd 64
	 KERNEL boot/srcd/rescue64 setkmap=es
	 APPEND initrd=boot/srcd/initram.igz netboot=nfs://172.20.4.100:/srv/nfs/srcd
         TEXT HELP
		Inicia o System Rescue CD con idioma castelan.
         ENDTEXT
 
    LABEL volver
 	MENU LABEL ^Volver
 	MENU EXIT
 
        TEXT HELP
  		Volta o menu principal.
   	ENDTEXT
 
 
   MENU END


Multiboot1.png
Multiboot2.png

Menú Principal

Menú Live-CD

Melloras visuais no arquivo de configuración

Introducimos as seguintes modificacións:

  • Cambiamos a imaxe de fondo
MENU BACKGROUND libs/splash.png.1

Obtivémola de [aquí] , pero vale calquera imaxe 640x480

  • Teclas aceleradoras:
 MENU COLOR HOTKEY      1;36;44    #fc0000 #00000000 
 MENU LABEL ^Debian Stretch 64

Definimos a cor vermella.O premer D xa se selecciona esta opción

  • Mensaxe de axuda o seleccionar a opción
TEXT HELP
         Instala Debian Stretch 64 bits.
ENDTEXT


MultibootCores1.png

Personalizando o SRCD con scripts de arranque

Isto pode ser moi importante xa que nos pode permitir definir os nosos propios scripts de clonación e restauración.

LABEL SystemRescueCDAuto
        MENU LABEL ^System Rescue Cd 64 Automatico
        KERNEL boot/srcd/rescue64 setkmap=es
        APPEND initrd=boot/srcd/initram.igz netboot=nfs://172.20.0.100:/srv/nfs/srcd  ar_source=nfs://172.20.0.100:/srv/nfs/srcd ar_nowait
  • ar_source: Indica a ruta do arquivo autorun
  • ar_nowait: Inidica  que non espere

Hai que poñer un arquivo autorun en /srv/nfs/srcd Podemos definir alias en base a scripts que teñamos definidos no noso servidor

#!/bin/bash
dhclient eth0
mount -t nfs -o nolock gandalf:/NFS/images /mnt/backup
alias clonar=’/mnt/scripts/restaurarWindows.sh’
echo Funciona
exit 0

Engadindo unha contrasinal a unha opción de arrque

  • Xeramos unha passwd encriptada con
# PASSWD Encriptada generada con
# openssl passwd -1 -salt sXiKzkus mypassword
  • Engadimos a contrasinal o menú de arranque
LABEL SystemRescueCDAuto
        MENU LABEL ^System Rescue Cd 64 Automatico
        MENU PASSWD $1$sXiKzkus$XHG5rLQlceWdGB3gL0C8e.
        KERNEL boot/srcd/rescue64 setkmap=es
        APPEND initrd=boot/srcd/initram.igz netboot=nfs://172.20.0.100:/srv/nfs/srcd  ar_source=nfs://172.20.0.100:/srv/nfs/srcd ar_nowait

Engadindo ISO's de utilidades

Engadindo un identificador de Hardware (HDT Hardware Deteccion Tool)

  • Imos a engadir unha categoría Utilidades o noso menú dende a que arrancaremos varias ferramentas en formato .iso.
  • HDT analiza o noso equipo e identifica o seu harware
  • Creamos a carpeta para almacenar a iso do HDT
mkdir -p /srv/tftp/iso/hdt
  • Descargamos a iso
cd /srv/tftp/iso/hdt
wget http://hdt-project.org/raw-attachment/wiki/hdt-0.5.0/hdt-0.5.2.iso
  • Engadimos as entradas correspondentes o noso menú
MENU BEGIN UTILIDADES
 MENU TITLE UTILIDADES
    LABEL Detector de Hardware
        MENU LABEL ^Detector de Hardware
        LINUX libs/memdisk
        INITRD iso/hdt/hdt-0.5.2.iso
        APPEND iso
        TEXT HELP
                Información sobre o hardware do Sistema.
        ENDTEXT
 
    LABEL volver
        MENU LABEL ^Volver
        MENU EXIT
        TEXT HELP
                Volta o menu principal.
        ENDTEXT
 
   MENU END


Hdt.png

Engadindo un Antivirus (AVG)

Neste caso queremos arrancar unha iso dun antivirus que nos permita escanear o noso equipo. O antivirus escollido é AVG Rescue CD. Pode conectarse a Internet para actualizar a súa base de virus

  • Creamos a carpeta para almacenar a iso do AVG
mkdir /srv/tftp/iso/avg
  • Descargamos a iso
cd /srv/tftp/iso/avg
wget http://download.avg.com/filedir/inst/avg_arl_cdi_all_120_150814a10442.iso
  • Renomeamos a avg.iso
  • Engadimos as entradas correspondentes o noso menú
 LABEL AVG
        MENU LABEL ^Antivirus AVG
        LINUX libs/memdisk
        INITRD boot/avg/avg.iso
        APPEND iso
        TEXT HELP
                Escanea o Sistema en procura de Virus.
        ENDTEXT

Nota: Para que a iso arranque, o equipo cliente necesita un mínimo de 1,5 GiB de RAM

Engadindo imaxes de disquetes

Engadindo entrada para Freedos

Freedos é un clónico libre de MS-DOS. Queremos ter a posibilidade de arracar Freedos remotamente, isto podería ser útil para actualizar a BIOS dun equipo vello que necesitase facelo a través dun disquete.

  • Creamos a carpeta onde almacenaremos a imaxe
mkdir /srv/tftp/boot/freedos
  • Descargamos a imaxe
cd /srv/tftp/boot/freedos
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img
  • Necesitamos un compoñente de syslinux chamado memdisk que permítenos crear discos na RAM. Así que descargamos o paquete syslinux, descomprimímolo e copiamos só o necesario.
cd /tmp
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.zip
unzip syslinux-6.03.zip 
cp bios/memdisk/memdisk /srv/tftp/libs
  • Engadimos a opción para o arranque no menú na categoría LIVE-CD
vi /srv/tftp/pxelinux.cfg/default
		LABEL Freedos
		MENU LABEL ^Freedos
		KERNEL libs/memdisk
		APPEND initrd=boot/freedos/fdboot.img
	      TEXT HELP
 	  		Inicia o S.O. FreeDos
   	ENDTEXT
  • Se quixésemos modificar a imaxe de Freedos para engadirlle os arquivos necesarios para flashear a bios:

Montamos a imaxe do disco

mount -o loop fdboot.IMG /mnt
  • Copiamos na carpeta /mnt os arquivos necesarios
  • Desmontamos e listo