Instalación e Configuración dun Servidor PXE
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
- No equipo cliente escollemos arrancar por PXE
- O Cliente PXE busca un servidor DHCP na rede
- Unha vez localizado, o servidor asignalle á máquina cliente unha IP, netmask, gw
- Mediante o protocolo TFTP o servidor envía á máquina cliente o SO
- 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
- O cliente envía por broadcast unha menaxe DHCPDISCOVER
- O Servidor DHCP responde coa IP, next-server, filename
- O Cliente solicita unha petición TFTP a next-server solicitando filename.
- O Servidor TFTP responde e envía o filename o cliente.
Configuracións de Rede Iniciais
- Empregaremos Virtualbox para simular ambos equipos.
- 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 |
|
|
- 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.
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
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
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
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
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
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