Instalación e Configuración dun Servidor PXE: Diferenzas entre revisións

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura
 
(Non se amosan 65 revisións do historial feitas polo mesmo usuario.)
Liña 18: Liña 18:
*Servidor TFTP
*Servidor TFTP


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



==Proceso de arranque do Servidor PXE en Detalle==
==Proceso de arranque do Servidor PXE en Detalle==
Liña 27: Liña 27:
# O Servidor TFTP responde e envía o filename o cliente.
# O Servidor TFTP responde e envía o filename o cliente.
=Configuracións de Rede Iniciais=
=Configuracións de Rede Iniciais=
*Empregaremos Virtualbox para simular ambos equipos.
*Empregaremos <b>Virtualbox</b> para simular ambos equipos.
[[File:redepxe.png|center|thumb|500px]]
*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á
{| class="wikitable"
!Conexión de área local
!Conexión de área local2
|-
| Celda 1,<tr> Fila 2 || Celda 2, Fila 2
| Celda 1, Fila 2 || Celda 2, Fila 2
|}


*O Servidor terá instalado un sistema <b>Debian Jessie</b> actualizado
*O Servidor terá dúas tarxetas de rede, A <b>configuración da rede do servidor será</b>


<TABLE ALIGN="RIGHT" BORDER CELLSPACING="0" CELLPADDING="0">
<TABLE ALIGN="RIGHT" BORDER CELLSPACING="0" CELLPADDING="0">
Liña 46: Liña 40:
<TR ALIGN="LEFT">
<TR ALIGN="LEFT">
<TD>
<TD>
*Está conectada a rede NAT
*Está conectada a rede <B>NAT</B>
*<B>IP:</B> 10.0.2.15
*<B>IP:</B> 10.0.2.15
*<B>Netmask:</B>255.255.255.0
*<B>Netmask:</B>255.255.255.0
Liña 52: Liña 46:
</TD>
</TD>
<TD>
<TD>
*Está conectada a rede interna (intnet)
*Está conectada a rede interna (<B>intnet</B>)
*<B>IP:</B> 172.20.4.100
*<B>IP:</B> 172.20.4.100
*<B>Netmask:</B>255.255.0.0
*<B>Netmask:</B>255.255.0.0
</TD>
</TD>
</TABLE>
</TABLE>

*A rede interna intnet, <b>non proporciona DHCP</b>.
*Se arrancamos unha 2º MV conectada a intnet co SystemRescueCd e lle asignamos unha ip compatible
<source lang='bash'>
ifconfig enp0s3 172.20.4.1 netmask 255.255.0.0
</source>
*Veremos que ten rede co servidor
<source lang='bash'>
ping 172.20.4.100
</source>
==Acceso dende o equipo real á Máquina Virtual con NAT==
Empregamos <b>VirtualBox</b> 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 (<b>port forwarding</b>).
Redireccionaremos o porto TCP/2222 da máquina real o porto TCP/22 (SSH) da máquina virtual.

<TABLE ALIGN="RIGHT" BORDER CELLSPACING="0" CELLPADDING="0">
<TR ALIGN="CENTER">
<TD>[[File:Port_forwarding1.png|center]]</TD>
<TD>[[File:Port_forwarding2.png|center]]</TD>
</TR>
<TR ALIGN="CENTER">
<TD>

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

Na máquina real comprobamos que temos o porto aberto

<source lang='bash'>
root@debianRojas:/home/rojas# netstat -nap | grep 2222
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 9967/VirtualBox
</source>

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
<source lang='bash'>
apt-get install ssh
</source>
E permitir o acceso ssh do root
<source lang='bash'>
/etc/ssh/sshd_config
PermitRootLogin yes
</source>
Conectámonos dende o equipo real
<source lang='bash'>
ssh -p 2222 root@127.0.0.1
</source>

=Instalación do Servidor PXE=
==Instalamos un servidor dhcp==
*Instalamos o paquete necesario
<source lang='bash'>
apt-get install isc-dhcp-server
</source>
*Modificamos os arquivos de configuración correspondentes
<source lang='bash'>
/etc/default/isc-dhcp-server
INTERFACES=”eth1”
</source>
<source lang='bash'>
/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”;

}
</source>
*Iniciamos o Servicio DHCP

<source lang='bash'>
/etc/init.d/isc-dhcp-server restart
</source>
*Arrancamos o cliente co SRCD e colle a IP 172.20.2.10

==Instalando o servidor tftp==
<source lang='bash'>
apt-get install tfptd-hpa
</source>
*O seu arquivo de configuración é
<source lang='bash'>
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
</source>
*Iniciamos o servidor
<source lang='bash'>
/etc/init.d/tftpd-hpa start
</source>
*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
<source lang='bash'>
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
</source>

<b>Nota:</b> Nestes momentos hai un bug no netboot da rama testing, así que teremos que descargar a versión stable.
<source lang='bash'>
wget http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/netboot.tar.gz
</source>


*Aparecen as seguines carpetas e arquivos
<source lang='bash'>
debian-installer ldlinux.c32 pxelinux.0 pxelinux.cfg version.info
</source>
*O seu significado é o seguinte:
**<b>debian-installer</b>: Contén o núcleo do sistema
**<b>pxelinux.0</b>: É o cargador de arranque a través da rede, forma parte do proxecto syslinux
**<b>pxelinux.cfg/default</b>: É 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
<TABLE ALIGN="RIGHT" BORDER CELLSPACING="0" CELLPADDING="0">
<TR ALIGN="CENTER">
<TD>[[File:comprobamos1.png|center|thumb|500px]]</TD>
<TD>[[File:comprobamos2.png|center|thumb|500px]]</TD>
</TR>
<TR ALIGN="CENTER">
<TD>

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

*Comeza o proceso de instalación de Debian correctamente
*<b>Problema</b>: Non temos acceso a Internet.
*<b>Solución</b>: 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
<source lang='bash'>
net.ipv4.ip_forward=1
</source>
*Creamos un script coa nosa configuración personalizada
<source lang='bash'>
/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
</source>
*Dámoslle permiso de execución
<source lang='bash'>
chmod +x /etc/iptables-script.sh
</source>
*Facemos que se execute o inicio
<source lang='bash'>
vi /etc/rc.local

#Cargamos a configuración de iptables
/etc/iptables-script.sh
</source>

*Modificamos a configuración do servidor DHCP
<source lang='bash'>
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)
…..
}
</source>

=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 <b>/srv/tftp</b> como sigue:
*Creamos unha carpeta boot onde teremos unha carpeta por cada sistema arrancable.
*Creamos dentro de boot a carpeta <b>strecht64</b> (A nosa distribución debian). Movemos todo o contido da instalación de Debian a /srv/tftp/boot/stretch64.
*Para poder arrancar pola rede, <b>necesitamos algúns arquivos de inicio</b>, que forman parte do paqute <b>syslinux</b>
**Poderíamos descargalos de [https://www.kernel.org/pub/linux/utils/boot/syslinux/ aquí] e descomprimir os que necesitásemos
**En vez diso, <b>imos a reempregar os que xa veñen coa instalación por rede do Debian</b> que temos descargado.
*Creamos unha carpeta para os arquivos necesarios para o arranque
<source lang='bash'>
mkdir /srv/tftp/libs
</source>
*Copiamos os seguintes arquivos
<source lang='bash'>
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
</source>
*Creamos un arquivo baleiro para o menú
<source lang='bash'>
touch pxelinux.cfg/default
</source>
*A estructura de arquivos quedaría como sigue
<source lang='bash'>
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
</source>

Editamos o arquivo pxelinux.cfg/default e creamos un menú para o noso debian
<source lang='bash'>
#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
</source>

[[File:Debian_boot1.png|center|thumb|500px]]

===Pasándolle parámetros o instalador Debian===

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

<source lang='bash'>
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
</source>

==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 <b>instalar un servidor NFS</b> para compartilo na rede.

===Instalación dun servidor NFS===
*Instalamos o paquete necesario
<source lang='bash'>
apt-get install nfs-kernel-server
</source>
*No arquivo de configuración compartimos unha carpeta como só lectura
<source lang='bash'>
/etc/exports
/srv/nfs/srcd 172.20.0.0/255.255.0.0(ro,sync)
</source>
*Reiniciamos o servicio
<source lang='bash'>
/etc/init.d/ssh restart
</source>

===Preparación dos arquivos do SRCD===

*Primeiro creamos a carpeta onde se almacenará o arranque do SRCD.
<source lang='bash'>
mkdir /srv/tftp/boot/srcd
</source>
*Descargamos unha iso do SRCD e montámola na máquina virtual.
<source lang='bash'>
mount /dev/sr0 /media/cdrom
</source>
*Copiamos os arquivos necesarios para o arranque á carpeta /srv/tftp/boot/srcd
<source lang='bash'>
cp /media/cdrom/isolinux/initram.igz /srv/tftp/boot/srcd
cp /media/cdrom/isolinux/rescue* /srv/tftp/boot/srcd
</source>

*Copiamos o resto de arquivos necesarios a /srv/nfs/srcd
<source lang='bash'>
cp /media/cdrom/sysrcd.dat /srv/nfs/srcd
cp /media/cdrom/sysrcd.md5 /srv/nfs/srcd
</source>


===Modificamos o arquivo de configuración===
Modificamos o menú de arranque pxelinux.cfg/default

<source lang='bash'>
######################
# 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
</source>


<TABLE ALIGN="CENTER" BORDER CELLSPACING="0" CELLPADDING="0">
<TR ALIGN="CENTER">
<TD>[[File:multiboot1.png|center|thumb|500px]]</TD>
<TD>[[File:multiboot2.png|center|thumb|500px]]</TD>
</TR>
<TR ALIGN="CENTER">
<TD>
Menú Principal
</TD>
<TD>
Menú Live-CD
</TD>
</TABLE>

===Melloras visuais no arquivo de configuración===
Introducimos as seguintes modificacións:
*<b>Cambiamos a imaxe de fondo</b>
<source lang='bash'>
MENU BACKGROUND libs/splash.png.1
</source>

Obtivémola de [[https://www.plop.at/images/ploplinux/splash.png aquí]] , pero vale calquera imaxe 640x480

*<b>Teclas aceleradoras:</b>
<source lang='bash'>
MENU COLOR HOTKEY 1;36;44 #fc0000 #00000000
MENU LABEL ^Debian Stretch 64
</source>

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

*<b>Mensaxe de axuda o seleccionar a opción</b>
<source lang='bash'>
TEXT HELP
Instala Debian Stretch 64 bits.
ENDTEXT
</source>


[[File:MultibootCores1.png|center|thumb|500px]]

===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.

<source lang='bash'>
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
</source>

*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

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

===Engadindo unha contrasinal a unha opción de arrque===

*Xeramos unha passwd encriptada con
<source lang='bash'>
# PASSWD Encriptada generada con
# openssl passwd -1 -salt sXiKzkus mypassword
</source>

*Engadimos a contrasinal o menú de arranque
<source lang='bash'>
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
</source>

==Engadindo ISO's de utilidades==
===Engadindo un identificador de Hardware (<b>HDT</b> 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
<source lang='bash'>
mkdir -p /srv/tftp/iso/hdt
</source>
*Descargamos a iso
<source lang='bash'>
cd /srv/tftp/iso/hdt
wget http://hdt-project.org/raw-attachment/wiki/hdt-0.5.0/hdt-0.5.2.iso
</source>
*Engadimos as entradas correspondentes o noso menú
<source lang='bash'>
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
</source>


[[File:hdt.png|center|thumb|500px]]

===Engadindo un Antivirus (<b>AVG</b>)===
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
<source lang='bash'>
mkdir /srv/tftp/iso/avg
</source>
*Descargamos a iso
<source lang='bash'>
cd /srv/tftp/iso/avg
wget http://download.avg.com/filedir/inst/avg_arl_cdi_all_120_150814a10442.iso
</source>
*Renomeamos a avg.iso
*Engadimos as entradas correspondentes o noso menú
<source lang='bash'>
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
</source>

<b>Nota:</b> 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 <b>Freedos</b>===
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
<source lang='bash'>
mkdir /srv/tftp/boot/freedos
</source>
*Descargamos a imaxe
<source lang='bash'>
cd /srv/tftp/boot/freedos
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img
</source>
*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.
<source lang='bash'>
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
</source>
*Engadimos a opción para o arranque no menú na categoría LIVE-CD
<source lang='bash'>
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
</source>
*Se quixésemos modificar a imaxe de Freedos para engadirlle os arquivos necesarios para flashear a bios:
Montamos a imaxe do disco
<source lang='bash'>
mount -o loop fdboot.IMG /mnt
</source>
*Copiamos na carpeta /mnt os arquivos necesarios
*Desmontamos e listo

Revisión actual feita o 12 de agosto de 2016 ás 20:27

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