esto es la suraguwiki el contenido, como puedes ver, deja mucho que desear para comentarios sobre los cosos aquí, puedes mandar un correo a diego arroba suragu punto net

Si eres un putísimo crack y quieres contribuir a esta wiki, pídeme una cuenta en el mismo correo de arriba

Arranque por red

Pueden ser muchos los motivos para querer arrancar por red: ordenador viejo de cojones que no tiene soporte de arranque por USB y no tienes un CD, no tienes un bootloader instalado en tu máquina y no tienes otra forma de arrancarlo o sencillamente pereza de crear un USB booteable

Para usar el arranque por red, usaremos iPXE

También necesitarás compilar iPXE por tu cuenta, o usar estas imagenes, aunque recomiendo compilarlo por tu cuenta para tener acceso a mas características como nfs y https. Como sabréis yo acostumbro a ser un majete, así que aquí teneis unas builds de iPXE en iso, undionly.kpxe y ipxe.efi con características interesantes.

En este caso estoy usando una máquina virtual en bhyve porque soy un vago, pero como la tengo bridgeada con mi red física, pillará los archivos del server dhcp local

Hay distintos métodos para iniciar iPXE, puedes arrancar una ISO de iPXE en un USB (aunque esto no tiene mucho sentido, pero bueno, podrías, sí), iniciarlo desde DHCP o sencillamente reemplazar el firmware de arranque de tu NIC por iPXE. Vamos a enfocarnos en inciarlo por DHCP y algunas palabras sobre reemplazar la ROM.

Proceso de arrancar por red

  1. Inicia la BIOS (o UEFI…)
  2. Intenta arrancar por la NIC
  3. Obtener archivo de iPXE por tftp
  4. Cargar iPXE para cargar netboot
  5. Usar netboot para cargar un OS

Configuración de servidor tftp

En los sistemas operativos que valen la pena (FreeBSD, OpenBSD y Debian) puedes instalar el paquete tftp-hba que es el demonio http. Búsquese en el manual donde tienes que poner los archivos según tu OS, en freebsd es /usr/local/tftp. Así que pongo el tar desempaquetado de arriba en esta ruta.

wget https://suragu.net/ipxe.tgz -O /usr/local/tftp
tar xvzf /usr/local/tftp/ipxe.tgz -C /usr/local/tftp

Verificamos si tenemos los archivos undionly.kpxe, ipxe.efi y ipxe.iso (aunque el .iso sobra, realmente)

Creación del servidor DHCP

Véase dhcp para información sobre como crear un server DHCP. Tenemos que agregar algo así en nuestra configuración de isc-dhcp-server (también se puede usar dnsmasq pero yo uso esto)

dhcp.conf
  next-server 192.168.1.207;
 
  if exists user-class and option user-class = "iPXE" {
      filename "http://192.168.1.207/boot.ipxe";
  } elsif option client-architecture = 00:00 {
      filename "undionly.kpxe";
  } else {
      filename "ipxe.efi";
  }

next-server sirve para indicarle al PXE de la NIC donde está el servidor tftp de donde sacará iPXE. Luego después de cargar iPXE cargará el archivo localizado en http://192.168.1.207/boot.ipxe (que en mi caso, es esto)

boot.ipxe
#!ipxe
chain http://192.168.1.207/${mac:hexhyp}.txt || chain --autofree http://192.168.1.207/menu.ipxe

Que lo que hace es ver si puede cargar un archivo por http llamado como la dirección MAC del cliente separado por guiones (lo cual es útil cuando quieres que una máquina cargue una cosa específica) y sino, cargar el menu.ipxe que he creado (código al final)

Esta configuración hará que, cuando entre en el booteo por NIC y pille una IP por dhcp, pillará el archivo “undionly.kpxe” si es un sistema BIOS o “ipxe.efi” y lo cargará. Esto es lo que necesitamos.

Uso básico de iPXE

Pues puedes usar el comando

dhcp

para obtener una IP dentro de iPXE, el comando mas importante consideraría yo que son “sanboot” y “boot”. sanboot te permite arrancar desde un dispositivo SAN (como un target iSCSI, o un archivo ISO, nómbralo tu vaya) y chain te permite cargar un script remoto

Aquí podemos ver a iPXE iniciando desde UEFI en este caso

Tras obtener una IP con el comando dhcp, podemos cargar netboot usando el comando

chain --autofree http://boot.netboot.xyz

Con esto, nos cargaría netboot

Cosas raras que son posibles con iPXE

Cambiar la ROM de tu NIC por iPXE

Esto me recuerda a mis tiempos de corebooteador. Esto consiste en cambiar el firmware de PXE que trae por defecto la tarjeta de red. Hacer esto es demasiado texto que consiste en compilar iPXE para tu tarjeta de red (las de los servidores por algún motivo suelen estar soportadas, también las de intel, pero justo la que tengo ahora no lol) y bootear en FreeDOS. cosas que honestamente me dan perezote de explicar

Mas información aquí (no es muy dificil, realmente, aunque ahora que lo pienso, tendría que haber puesto la tarjeta de red en otro ordenador que no tardase la vida en iniciar para flashearlo, pero ya que)

Esto sirve para ahorrarte el paso de tftp en el servidor DHCP, pues no necesitas sacar iPXE de ningún lado, porque lo tienes en la ROM de la NIC, ahorrandote así unos 20 segundos por inicio

Código de el menu.ipxe

La verdad, no funciona la mayoria de cosas, así que usalo como base, si algún dia consigo algo que funcione bien con esto, se actualizará:

menu.ipxe
#!ipxe
 
# Some menu defaults
set menu-timeout 5000
set submenu-timeout ${menu-timeout}
isset ${menu-default} || set menu-default exit
 
# Figure out if client is 64-bit capable
cpuid --ext 29 && set arch x64 || set arch x86
cpuid --ext 29 && set archl amd64 || set archl i386
 
###################### MAIN MENU ####################################
 
:start
menu iPXE boot menu for ${initiator-iqn}
item --gap --             ------------------------- Sistemas operativos ------------------------------
item --key f freedos      Iniciar FreeDOS 
item --key o openbsd	  Boot OpenBSD installer
item --key f freebsd	  Boot mfsbsd (freebsd installer)
item --key l menu-live    Live environments...
item --gap --             ------------------------- Herramientas ----------------------------
item --key p sysr         Iniciar SystemrescueCD
item --key r netboot	  Iniciar Netboot
item --key u ubuntu	  Iniciar Ubuntu Live (sirve mas de lo que pensarias)
item --gap --             ------------------------- Opciones avanzadas -------------------------------
item --key c config       Configure settings
item shell                shell de iPXE
item reboot               Reboot computer
item
item --key x exit         Exit iPXE and continue BIOS boot
choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel
set menu-timeout 0
goto ${selected}
 
:cancel
echo You cancelled the menu, dropping you to a shell
 
 
 
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
 
:failed
echo Booting failed, dropping to shell
goto shell
 
:reboot
reboot
 
:freedos
sanboot http://192.168.1.207/bootdos.img
 
:freebsd
sanboot http://192.168.1.207/mfsbsd.img
 
:openbsd
sanboot http://192.168.1.207/install76.iso
 
:sysr
chain http://192.168.1.207/sysr.ipxe
 
:netboot
chain http://boot.netboot.xyz
 
:ubuntu
 
set mirror http://releases.ubuntu.com
set base_dir ubuntu
set codename jammy
set version_number 22.04
set os_arch amd64
set mirrorcfg mirror/suite=${ubuntu_version}
set dir http://releases.ubuntu.com/${version_number}/dists/${version}/main/installer-${arch}/current/images/netboot
set ubuntu_iso_url 
set install_params autoinstall ip=dhcp ds=nocloud-net;s=http://my.autoinstall.com/ url=${ubuntu_iso_url}
 
kernel ${dir}/linux ${install_params} ${mirrorcfg} -- quiet initrd=initrd.gz
initrd ${dir}/initrd.gz
boot
 
:exit
exit

QR Code
QR Code red:arranque_por_red (generated for current page)