Conclusiones

Conclusiones

PXE (entorno de ejecución de preboteo) es un entorno de cliente cliente que hace posible iniciar e instalar sistemas operativos sin la necesidad de medios físicos. La idea central es bastante simple: en una etapa muy temprana, un cliente obtiene una dirección IP de un servidor DHCP y descarga los archivos necesarios para realizar el proceso de arranque a través del TFTP Protocolo (FTP trivial). En este tutorial usaremos el dnsmasq Aplicación: se puede usar como un servidor DHCP primario o en proxy dhcp modo si existe otro servidor DHCP en la red; También proporciona el servicio TFTP utilizado para transferir archivos.

En este tutorial aprenderás:

  • Cómo configurar pxelinux y crear un menú de arranque
  • Cómo extraer archivos de un ISO y configurar la estructura de archivo apropiada
  • Cómo configurar DNSMASQ como un servidor DHCP estándar o proxy
  • Cómo configurar el servidor TFTP incrustado en DNSMASQ
  • Cómo permitir el tráfico a través de los puertos necesarios utilizando UFW
Raspberry Pi como servidor de arranque PXE

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Raspberry Pi OS (anteriormente conocido como Raspbian)
Software Dnsmasq, Pxelinux, Syslinux-Efi
Otro Permisos de raíz
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación de paquetes

Lo primero que debemos hacer es instalar algunos paquetes esenciales:

  • dnsmasq
  • pxelinux
  • Syslinux-Efi

DNSMASQ proporciona tanto el DHCP como el TFTP servicios; pxelinux es un miembro de gotador de arranque del syslinux familia, y está específicamente diseñado para el entorno PXE; El paquete Syslinux-Efi_ contiene bibliotecas necesarias para admitir EFI clientela. Para instalar los paquetes en el sistema operativo Raspberry Pi, podemos ejecutar:

$ sudo apt-get update && sudo apt-get install dnsmasq pxelinux syslinux-efi 

Estructura de archivo

Una vez que se instalan los paquetes necesarios, podemos continuar y configurar la estructura del archivo. En aras de este tutorial, la raíz de toda la configuración será la /mnt/data/netboot directorio, que también se utilizará como el TFTP root (definido dentro del archivo de configuración DNSMASQ); Todos los archivos necesarios se almacenarán dentro de él.

Archivos y módulos syslinux

Queremos poder apoyar el arranque de los clientes en Biografía y EFI modo, por lo tanto, lo primero que debemos hacer es crear dos directorios que llevan el nombre de esas arquitecturas en el interior /mnt/data/netboot:

$ mkdir/mnt/data/netboot/bios, efi64 


Cada arquitectura necesita algunas bibliotecas de Syslinux específicas para funcionar. Los copiamos en los directorios apropiados:

$ cp \/usr/lib/syslinux/modules/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/lib/syslinux/modules/efi64/ldlinux.E64 \/usr/lib/syslinux/modules/efi64/vesamenu, libcom32, libutil.C32 \/usr/lib/syslinux.EFI/EFI64/SYSLINUX.Efi \/mnt/data/netboot/efi64 

Archivos de distribución

En este punto, necesitamos crear el directorio que aloje las distribuciones que queremos que pongan a disposición en nuestro menú de arranque. Vamos a llamarlo bota:

$ mkdir/mnt/data/netboot/boot 

En este tutorial, solo como ejemplo, trabajaremos con una imagen de Debian NetInstall. Para conveniencia, supongo que un ISO previamente verificado (eche un vistazo a nuestro artículo sobre la verificación de la integridad y la firma de una imagen de distribución con GPG si desea saber cómo verificar la integridad y la firma de una imagen de distribución) en el sistema de archivos RPI en el /mnt/data/isos directorio.

Creamos el camino apropiado en el interior /mnt/data/netboot/boot, Directorios de nombres después de la arquitectura, el nombre y la versión del sistema que queremos proporcionar en nuestro menú (en este caso AMD64 - Debian 10):

$ mkdir -p/mnt/data/netboot/boot/amd64/Debian/10 

Esta elección de ruta es arbitraria, así que no dude en crear la suya propia. En este punto debemos montar el ISO de distribución y copiar los archivos en el directorio de destino. Para montar el ISO que corremos:

$ sudo monte -o loop -t iso9660/mnt/data/isos/Debian -10.4.0-amd64 netinst.ISO /Medios 

Una vez que se monta el ISO, sus archivos serán accesibles en /medios de comunicación. Me gusta usar rsync Para copiarlos:

$ sudo rsync -av/media//mnt/data/netboot/boot/amd64/Debian/10 

Una vez que se copian los archivos, podemos desmontar el ISO:

$ sudo Umount /Media 

En el siguiente paso veremos cómo crear un menú de arranque utilizando la sintaxis de Syslinux.

Creando el menú de arranque

Ahora que tenemos los archivos de distribución en su lugar, podemos crear el menú de arranque. dentro de nuestro raíz tftp, (/mnt/data/netboot En nuestro caso), creamos el pxelinux.CFG directorio:

$ mkdir/mnt/data/netboot/pxelinux.CFG 

Dentro de pxelinux.CFG directorio creamos un archivo llamado por defecto y pegar la siguiente configuración dentro de él:

Título del menú PXE Boot Menú Vesamenu predeterminado.Etiqueta C32 Etiqueta del menú local Boot desde la unidad Localboot Localboot 0xffff Menú Comenzando AMD64 Título del menú AMD64 Beginle el menú Debian Título Título de la etiqueta de Debian Installgui Menú Etiqueta ^Instalación gráfica Kernel :: Boot/AMD64/Debian/10/Instalar.amd/vmlinuz append vga = 788 initrd = :: boot/amd64/Debian/10/install.AMD/GTK/INITRD.Gz --- Etiqueta tranquila Instalar etiqueta Menú ^Instalar núcleos :: boot/amd64/Debian/10/install.amd/vmlinuz append vga = 788 initrd = :: boot/amd64/Debian/10/install.AMD/initrd.GZ --- Final de menú de menú tranquilo Menú 

La configuración anterior generará un menú anidado construido después de la ruta de directorio que creamos dentro del bota directorio. De nuevo, el de arriba es solo un ejemplo. Puede crear y estructurar el menú como desee; Todo lo que necesita hacer es usar la sintaxis apropiada, como se explica en la página dedicada de Wiki Syslinux.

El menú contiene una entrada para permitir que el usuario arrance desde el disco duro local, un submenú con el AMD64 etiqueta y dos entradas para la distribución de Debian, installgui y instalar. El primero inicia el instalador de distribución en modo gráfico, el segundo en un modo textual que parece usar ncurses bibliotecas.

¿Cómo podemos saber los parámetros exactos para usar en el NÚCLEO y ADJUNTAR líneas? Podemos echar un vistazo a la configuración del menú que existe dentro del contenido de distribución que extraemos del ISO. En nuestro caso, por ejemplo, /mnt/data/netboot/boot/amd64/Debian/10/isolinux/menú.CFG. Desafortunadamente, no todas las distribuciones usan la misma sintaxis, por lo tanto, debemos prestar atención y adaptar la configuración según sea necesario.

Una cosa que tuvimos que adaptar de la configuración original es la ruta del vmlinuz y initrd.GZ archivos. Recuerde que estamos accediendo a esos archivos a través de TFTP!

Normalmente, la ruta de los archivos se interpreta como relativo al directorio raíz TFTP, pero en la configuración anterior, como puede observar, utilizamos el :: sintaxis (por ejemplo escribimos :: Boot/AMD64/Debian/10/Instalar.amd/vmlinuz Para hacer referencia a la imagen del núcleo). Por qué hicimos esto?

Desde que creamos dos directorios que mantienen las bibliotecas que brindan soporte para biografía y EFI64 modo y queremos usar la misma configuración de menú para ambos, necesitamos vincular el pxelinux.CFG directorio en ambos, por lo tanto, necesitamos hacer referencia al TFTP raíz de una manera "absoluta". El :: El símbolo nos permite hacer exactamente esto: es una forma de hacer referencia a la ruta absoluta a la raíz TFTP.

Supongo que nuestro directorio de trabajo actual es /mnt/data/netboot, Para vincular la configuración del menú en los directorios mencionados anteriormente, podemos emitir el siguiente comando:

$ ln -rs pxelinux.CFG Bios && Ln -rs Pxelinux.CFG EFI64 


Aquí usamos el -riñonal opción del LN ordenar para crear relativo enlaces simbólicos. En este punto, nuestro árbol de directorio debería verse así:

/mnt/data/netboot ├── bios │ ├── ldlinux.C32 │ ├── Libcom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.0 │ ├── Pxelinux.CFG ->… /pxelinux.CFG │ └── Vesamenu.C32 ├── Boot │ └── AMD64 │ └── Debian │ └── 10 ├── Efi64 │ ├── Ldlinux.E64 │ ├── LibCom32.C32 │ ├── Libutil.C32 │ ├── Pxelinux.CFG ->… /pxelinux.CFG │ ├── Syslinux.Efi │ └── Vesamenu.C32 └── Pxelinux.CFG └── Valor predeterminado 

Ahora podemos configurar DNSMASQ.

Configurar dnsmasq

El archivo de configuración de DNSMASQ es /etc/dnsmasq.confusión. Se comentan algunos de los parámetros que se pueden establecer dentro de él; Se puede encontrar más información sobre ellos consultando el dnsmasq manual. Solo consideraremos los necesarios para nuestra configuración.

Desactivar la funcionalidad DNS

Lo primero que queremos hacer es deshabilitar el servicio DNS integrado en DNSMASQ: solo necesitamos las funcionalidades DHCP y TFTP ofrecidas por la aplicación. Para alcanzar nuestro objetivo podemos usar el puerto Opción: se utiliza para determinar qué puerto debe usarse para DNS; establecer su valor en 0 deshabilita el servicio. Podemos agregar la instrucción al final del archivo de configuración.

puerto = 0 

Especifique la interfaz de red para las solicitudes DHCP

Lo segundo que queremos hacer es especificar la interfaz de red que se utilizará para escuchar las solicitudes DHCP. En nuestro caso, dicha interfaz es eth0, Entonces escribimos:

interfaz = eth0 

Si no queremos usar una interfaz específica, podemos especificar una dirección IP, utilizando el directorio de escucha opción en su lugar.

Especificando el rango IP/modo proxy

Este paso de configuración es muy importante y cambia según la configuración de nuestra red.

Si el servicio DHCP proporcionado por DNSMASQ es el único En la red, en este paso simplemente debemos configurar el rango de direcciones IP que se asignarán a los clientes, y opcionalmente un tiempo de arrendamiento Por ejemplo:

DHCP-range = 192.168.0.100.192.168.0.200,12h 

En la línea anterior, el rango de las direcciones IP disponibles se define separando los límites inferiores y superiores por una coma. En este caso definimos un rango que va desde 192.168.0.100 a 192.168.200; También establecemos un tiempo de arrendamiento de 12h.

El segundo caso es probablemente el más común en una configuración estándar/doméstica, donde generalmente el servicio DHCP es proporcionado por un enrutador. Si este es el caso, DNSMASQ debe establecerse para ejecutarse en modo proxy para evitar conflictos. En esos casos, podemos escribir:

DHCP-range = 192.168.0.0, proxy 

Entramos dos elementos separados por una coma: el primero es el dirección de la subred (192.168.0.0), el segundo es la palabra clave "proxy".

Habilitar el servidor TFTP

En este punto necesitamos habilitar el dnsmasq servidor TFTP integrado: lo usaremos para servir los archivos necesarios para que los clientes inicien. Todo lo que tenemos que hacer para lograr esta tarea es agregar la siguiente línea al archivo de configuración:

habilitar-tftp 

También debemos establecer el directorio que debe usarse como el raíz tftp. Este directorio, como ya discutimos, alojará los archivos compartidos. En nuestro caso, este directorio es /mnt/data/netboot (El predeterminado es /var/ftpd)

tftp-root =/mnt/data/netboot 

Establezca el archivo de arranque basado en la arquitectura del cliente

El pxelinux Bootloader puede funcionar tanto en modo EFI como en BIOS, por lo que tenemos que encontrar una manera de servir el archivo apropiado dependiendo del modo utilizado por el cliente. La pregunta es cómo el cliente comunica dicha información?

DHCP utiliza una serie de opciones para el intercambio de información: opción 93 (Cliente-Arch) se utiliza para pasar información sobre la arquitectura del cliente. La siguiente tabla muestra la opción Numérica y los valores de cadena y las arquitecturas a las que hacen referencia:

Valor de la opción Valor de cadena Arquitectura
0 x86pc Intel x86pc
1 PC98 NEC/PC98
2 Ia64_efi Efi italium
3 Alfa Dec alfa
4 Arc_x86 Arco x86
5 Intel_lean_client Cliente Intel Lean
6 IA32_EFI EFI IA32
7 Bc_efi EFI BC
8 Xscale_efi EFI XScale
9 X86-64_EFI EFI X86-64

Para especificar qué archivo debe proporcionarse para el modo apropiado utilizado por el cliente, podemos usar el servicio PXE opción. Para x86pc Podemos ingresar a la siguiente línea:

pxe-service = x86pc, "Pxelinux (BIOS)", BIOS/PXELINUX 


Proporcionamos tres valores separados por una coma a la opción: el primero es el tipo de sistema de cliente (x86pc), el segundo es el texto del menú y el tercero es el archivo que el cliente descargará para realizar el arranque. La ruta del archivo es en relación con la raíz TFTP. En este caso se encuentra dentro del biografía directorio que creamos antes y se llama pxelinux.0: El nombre debe informarse sin el .0 Extensión, como puede ver arriba.

Para el EFI X86-64 Modo, en su lugar, agregamos:

pxe-service = x86-64_efi, "Pxelinux (EFI)", EFI64/Syslinux.EFI 

Registro de configuración

Otra cosa que es útil para habilitar es dnsmasq Registro, para realizar un seguimiento de la actividad DHCP y TFTP. Para lograr esta tarea, agregamos el quirúrgicas instrucción a nuestra configuración y configure el archivo que debe usarse para almacenar los mensajes con el facilidad de registro instrucción:

Log-Queries Log-Facility =/var/log/dnsmasq.registro 

Guardar la configuración y el reinicio del servicio

En este punto, nuestra configuración debería verse así:

puerto = 0 interfaz = eth0 dhcp-range = 192.168.0.0, proxy enable-tftp tftp-root =/mnt/data/netboot pxe-service = x86pc, "pxelinux (bios)", bios/pxelinux pxe-service = x86-64_efi "," Pxelinux (EFI) ", EFI64/syslinux.EFI Log-Qualeries Log-Facility =/var/log/dnsmasq.registro 

Podemos guardar los cambios que hicimos en el /etc/dnsmasq.confusión archivo y finalmente reiniciar el dnsmasq servicio:

$ sudo systemctl reiniciar dnsmasq 

Configuración de firewall

Para que nuestra configuración funcione correctamente, también debemos permitir el tráfico entrante a través de nuestro firewall a través de algunos puertos específicos. En este tutorial asumiré el uso del UFW Interfaz. Los puertos que debemos permitir el tráfico entrante son:

  • 67/UDP
  • 69/UDP
  • 4011/UDP

Para permitir el tráfico, podemos ejecutar el siguiente comando:

$ sudo UFW Permitir 67/UDP $ sudo UFW Permitir 69/UDP $ sudo UFW Permitir 4011/UDP 

Arranque

En este punto, si la máquina del cliente está conectada a la red a través de Ethernet y la opción de arranque PXE se elige como "fuente" de arranque (asegúrese de que la funcionalidad esté habilitada!), deberíamos poder ver el menú de arranque PXE:

El menú de arranque PXE

Una vez que seleccionamos AMD64 -> Debian -> Instalación gráfica Se descargarán los archivos apropiados y debe aparecer el instalador de Debian:

Instalador gráfico de Debian

Ahora es posible continuar con la instalación.

Conclusiones

En este tutorial vimos cómo realizar los pasos necesarios para girar un Raspberry Pi en un servidor de arranque PXE: vimos cómo instalar y configurar DNSMASQ y el gestor de arranque Pxelinux; También aprendimos a crear un menú Syslinux y la estructura de archivo apropiada; Finalmente, vimos qué puertos abrir para que la configuración funcione. Dudas? Preguntas? No dude en comentar y pedir ayuda!

Tutoriales de Linux relacionados:

  • Cómo conectarse a un servidor FTP usando Python
  • Configurar servidor FTP en Linux
  • Lista e instalación de clientes FTP en Ubuntu 22.04 Linux ..
  • Lista e instalación de clientes FTP en Ubuntu 20.04 Linux ..
  • Cómo configurar el servidor FTP/SFTP y el cliente en Almalinux
  • Openlitespeed como proxy inverso
  • Tutorial de configuración proxy de calamar en Linux
  • Cómo ejecutar el sistema operativo Raspberry Pi en una máquina virtual con ..
  • Cosas para instalar en Ubuntu 20.04
  • Instale el proxy de Tor en Ubuntu 20.04 Linux