Conclusiones
- 4735
- 948
- Norma Sedillo
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
Requisitos y convenciones de software utilizados
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 PXEUna vez que seleccionamos AMD64 -> Debian -> Instalación gráfica
Se descargarán los archivos apropiados y debe aparecer el instalador 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