Red y SSH en Stage1 (boot - initrd) de NixOS - Parte 1

Ninguna IA ha estado involucrada en la creacion de este articulo Contexto En la siguiente guía veremos cómo configurar las interfaces de redes para poder tener conexión a internet durante la Stage1 (init ram disk o initrm) de NixOS. Más específicamente, en esta primera parte de la articulo veremos como configurar la interfaz Ethernet. Y luego nos conectaremos, de forma remota, con SSH a la Stage1. En la segunda parte del articulo veremos como lograr lo mismo usando una interfaz inalámbrica (algo que supone algunos otros desafíos). ¿Porque querer tener Red en Stage1?... bueno, esta guiá realmente es parte de un pre-requisito de un proyecto mas grande. Una implementación para lograr descifrar, de forma remota y segura, particiones cifradas con LUKS. Esta guiá forma parte de un compendio de clases/tutoriales para crear y gestionar un HomeLab usando NixOS. Esta articulo posee un video asociado donde se pueden encontrar mas detalles y el paso a paso: Red y SSH en Stage1 de NixOS - Parte 1 Guiá donde habilitamos conexión a la red y un servidor SSH en la Stage1 (init ram disk) en NixOS. odysee.com Introducción La Stage1 de NixOS es una rutina de procesos, dentro del boot, que suceden antes que el sistema operativo esté totalmente cargado. Durante esta etapa se carga el Kernel, se detectan y configuran los distintos elementos del hardware y se montan los sistemas de archivos. Todo este proceso sucede “en memoria”, o sea, usando la RAM como espacio de almacenamiento. Esto hace que sea efímero... se destruye una vez se alcanza la Stage2 (momento donde realmente los procesos, de lo que será nuestro OS, inician). Debido a que Stage1 tiene una función muy específica: "preparar el hardware y sistemas de archivos para Stage2", esta etapa carga solo el mínimo de elementos necesarios para lograr su objetivo... Stage1 es una especie de "pre-linux mínimo auxiliar y efímero". Por ello, intervenir y dotar esta etapa de funcionalidades, como conectividad a internet o un servidor SSH, puede ser no trivial. Por suerte NixOS ya posee algunas configuraciones que nos ayudaran. Este desafió es una buena oportunidad para aprender mas de los proceso de boot, NixOS y linux en general. El Plan: Parte 1 (este post) Lograr “pausar” el arranque del sistema al final de Stage1 (y antes que Stage2) para poder debugear nuestro trabajo de forma mas cómoda. Lograr tener red en Stage1 mediante una interfaz Ethernet. Implementar un servidor SSH en Stage1 para poder conectarnos desde un equipo remoto (mediante Ethernet) para poder interactuar con los procesos y sistema de archivo de initrm. Parte 2 (...el siguiente post) Instalar, si es necesario, los drivers del adaptador inalámbrico para poder que sea detectado y cargado en Stage1. Validar que en Stage1 podemos escanear redes y conectarnos a ellas de manera segura. Automatizar el proceso de conexión a WiFi en Stage1 y probar el acceso remoto usando SSH. 1) “Pausar” el arranque en Stage1 Si tu NixOS esta cifrado con LUKS la "pausa" en Stage1 ya esta activa; no debes hacer nada. El momento, durante el boot, cuando se pregunta al usuario por la clave LUKS, es exactamente la frontera entre el Stage1 y Stage2. Recordemos que LUKS es una manera de tener cifrado nuestro OS de forma completa. Es una opción que solo puede ser activada durante la instalación del OS y es muy recomendado usarla si la privacidad/seguridad son de tu interés. Por lo tanto ya estas listo con el paso 1 si estas usando LUKS. En caso que estés siguiendo esta guiá pero no estés usando LUKS, no temas, existe una forma "manual" de detener el proceso de boot entre Stage1 y Stage2. Para esto debemos usar un script que se inicie al final de Stage1 y ejecute el "emergency mode" del boot. Esto "pausara" el proceso de boot y nos permitirá, mas adelante, entrar a debugear de forma remota. Puedes añadir este script a tu /etc/nixos/hardware-configuration.conf para forzar el inicio de "emergency mode": boot.initrd.systemd = { enable = true; services.emergency-script = { enable = true; wantedBy = [ "initrd.target" ]; after = [ "sysroot.mount" ]; unitConfig = { Description = "ForceEmergency"; DefaultDependencies = false; }; serviceConfig = { Type = "oneshot"; ExecStart = "${pkgs.bash}/bin/sh -c 'systemctl isolate emergency.target'"; }; }; }; Nota: Quiero aclarar que esta guiá esta pensada para quienes usen LUKS principalmente. Por lo tanto, usar el script anterior puede implicar que debas cambiar algunas cosas mencionadas más adelante. Específicamente deberás cambiar donde uso systemd-ask-password-console.service, ya que tu sistema no tendrá este servicio. 2) Activando la interfaz Ethernet en Stage1 Lo primero que necesitamos es ident

Apr 4, 2025 - 17:55
 0
Red y SSH en Stage1 (boot - initrd) de NixOS - Parte 1

Ninguna IA ha estado involucrada en la creacion de este articulo

Contexto

En la siguiente guía veremos cómo configurar las interfaces de redes para poder tener conexión a internet durante la Stage1 (init ram disk o initrm) de NixOS. Más específicamente, en esta primera parte de la articulo veremos como configurar la interfaz Ethernet. Y luego nos conectaremos, de forma remota, con SSH a la Stage1. En la segunda parte del articulo veremos como lograr lo mismo usando una interfaz inalámbrica (algo que supone algunos otros desafíos).

¿Porque querer tener Red en Stage1?... bueno, esta guiá realmente es parte de un pre-requisito de un proyecto mas grande. Una implementación para lograr descifrar, de forma remota y segura, particiones cifradas con LUKS.

Esta guiá forma parte de un compendio de clases/tutoriales para crear y gestionar un HomeLab usando NixOS.

Esta articulo posee un video asociado donde se pueden encontrar mas detalles y el paso a paso:

Red y SSH en Stage1 de NixOS - Parte 1

Guiá donde habilitamos conexión a la red y un servidor SSH en la Stage1 (init ram disk) en NixOS.

favicon odysee.com

Introducción

La Stage1 de NixOS es una rutina de procesos, dentro del boot, que suceden antes que el sistema operativo esté totalmente cargado. Durante esta etapa se carga el Kernel, se detectan y configuran los distintos elementos del hardware y se montan los sistemas de archivos. Todo este proceso sucede “en memoria”, o sea, usando la RAM como espacio de almacenamiento. Esto hace que sea efímero... se destruye una vez se alcanza la Stage2 (momento donde realmente los procesos, de lo que será nuestro OS, inician). Debido a que Stage1 tiene una función muy específica: "preparar el hardware y sistemas de archivos para Stage2", esta etapa carga solo el mínimo de elementos necesarios para lograr su objetivo... Stage1 es una especie de "pre-linux mínimo auxiliar y efímero". Por ello, intervenir y dotar esta etapa de funcionalidades, como conectividad a internet o un servidor SSH, puede ser no trivial. Por suerte NixOS ya posee algunas configuraciones que nos ayudaran. Este desafió es una buena oportunidad para aprender mas de los proceso de boot, NixOS y linux en general.

El Plan:

  • Parte 1 (este post)
  1. Lograr “pausar” el arranque del sistema al final de Stage1 (y antes que Stage2) para poder debugear nuestro trabajo de forma mas cómoda.
  2. Lograr tener red en Stage1 mediante una interfaz Ethernet.
  3. Implementar un servidor SSH en Stage1 para poder conectarnos desde un equipo remoto (mediante Ethernet) para poder interactuar con los procesos y sistema de archivo de initrm.
  • Parte 2 (...el siguiente post)
  1. Instalar, si es necesario, los drivers del adaptador inalámbrico para poder que sea detectado y cargado en Stage1.
  2. Validar que en Stage1 podemos escanear redes y conectarnos a ellas de manera segura.
  3. Automatizar el proceso de conexión a WiFi en Stage1 y probar el acceso remoto usando SSH.

1) “Pausar” el arranque en Stage1

Si tu NixOS esta cifrado con LUKS la "pausa" en Stage1 ya esta activa; no debes hacer nada. El momento, durante el boot, cuando se pregunta al usuario por la clave LUKS, es exactamente la frontera entre el Stage1 y Stage2.

Recordemos que LUKS es una manera de tener cifrado nuestro OS de forma completa. Es una opción que solo puede ser activada durante la instalación del OS y es muy recomendado usarla si la privacidad/seguridad son de tu interés.

Por lo tanto ya estas listo con el paso 1 si estas usando LUKS.

Pausa de Stage1

En caso que estés siguiendo esta guiá pero no estés usando LUKS, no temas, existe una forma "manual" de detener el proceso de boot entre Stage1 y Stage2. Para esto debemos usar un script que se inicie al final de Stage1 y ejecute el "emergency mode" del boot. Esto "pausara" el proceso de boot y nos permitirá, mas adelante, entrar a debugear de forma remota.

Puedes añadir este script a tu /etc/nixos/hardware-configuration.conf para forzar el inicio de "emergency mode":

boot.initrd.systemd = {
  enable = true;
  services.emergency-script = {
    enable = true;
    wantedBy = [ "initrd.target" ];
    after = [ "sysroot.mount" ];
    unitConfig = { 
      Description = "ForceEmergency";
      DefaultDependencies = false; 
    };
    serviceConfig = {
      Type = "oneshot";
      ExecStart = "${pkgs.bash}/bin/sh -c 'systemctl isolate emergency.target'";
    };
  };
};

Nota: Quiero aclarar que esta guiá esta pensada para quienes usen LUKS principalmente. Por lo tanto, usar el script anterior puede implicar que debas cambiar algunas cosas mencionadas más adelante. Específicamente deberás cambiar donde uso systemd-ask-password-console.service, ya que tu sistema no tendrá este servicio.

2) Activando la interfaz Ethernet en Stage1

Lo primero que necesitamos es identificar el nombre de nuestra interfaz Ethernet. Podemos usar el comando ip link para listar las interfaces disponibles. En mi caso la interfaz Ethernet tiene por nombre “enp0s3” (usare este nombre durante la guiá a modo de ejemplo).

Ahora podemos añadir lo siguiente en nuestro /etc/nixos/hardware-configuration.nix:

boot = {
  initrd = {
    systemd = {
      enable = true;
      network = {
        enable = true;
        networks = {
          enp0s3 = {
            enable = true;
            name = "enp0s3";
            DHCP = "yes";
          };
        };
      };
    };
  };
};

Recuerda usar reemplazar el nombre de tu interfaz Ethernet como corresponda.

Nota 1: Durante Stage1 pueden ver que usaremos “systemd”. Esto quiere decir que un “systemd” (independiente al normalmente usado en Stage2) estará encargado de gestionar los procesos de arranque de init ram disk. Es importante mencionar que el uso de systemd en initrd aun es experimental en NixOS; a pesar de esto, según mi experiencia funciona de forma estable.

Nota 2: Vamos a usar DHCP para asignar IP, Gateway y DNS a nuestra interfaz Ethernet. Luego lo cambiaremos a una definición estática para facilitar el proceso de conexión por SSH.

En teoría, con esto, ya deberíamos tener red en Stage1.

En Stage1 se usará la interfaz Ethernet para iniciar una conexión a la red. Comprobar si esto está funcionando de manera correcta puede ser algo mas complejo. Una opción puede ser revisar los dispositivos conectados en las opciones de nuestro router. Otra manera podría ser usar una herramienta para analizar la red local y detectar los dispsitivios participantes.

Nosotros vamos a optar poder añadir un script a Stage1 que imprimirá en el log de boot los detalles de nuestra conectividad. Luego vamos a revisar dicho log para asegurarnos que todo este bien.

El script lo vamos a guardar en /etc/nixos/hardware-configuration.nix:

boot = {
  initrd = {
    systemd = {

     initrdBin = [ pkgs.iproute2 ];

      services = {
        CustomScript = {
          enable = true;
          wants = [ "systemd-udev-settle.service" ];
          after = [ "systemd-udev-settle.service" ];
          before = [ "systemd-ask-password-console.service" ];
          wantedBy =  [ "systemd-ask-password-console.service" ];
          unitConfig = { 
            Description = "CustomScript"; 
            DefaultDependencies = false;
          };
          serviceConfig = {
            Type = "oneshot";
            ExecStart="${pkgs.bash}/bin/sh -c 'sleep 5 && ip addr'";
          }; 
        };
      };

    };
  };
};

Nota 1: En Stage1 muchos comandos no están disponibles. Debemos usar initrdBin para especificar los paquetes que queremos incluir en Stage1. Vamos a incluir iproute2 para poder usar el comando ip en el script.

Nota 2: El script se ejecutará antes que se nos solicite la clave LUKS en Stage1 y dejará el output de "ip addr" en el log. El sleep es para dar tiempo a que la interfaz este totalmente configurada. Las opciones de wants, after, before y wantedBy nos ayudan a que el script se ejecute el la secuencia y momento preciso. Específicamente esperar systemd-udev-settle.service nos asegura que el hardware esté disponible. Y systemd-ask-password-console.service a ejecutar el script antes que se pregunte por la contraseña LUKS (momento en que Stage1 queda “pausado”).

Nota 3: En caso que experimentes con scripts de systemd puede ser algo difícil saber sus "estados" y "orden de ejecución". Aquí te dejo algunos comandos (entre muchos otros) que pueden ser de utilidad para debugear:

systemctl list-units
systemctl status
systemctl list-dependencies --all
systemctl list-dependencies --reverse

Con esto listo, ahora vamos a reiniciar el sistema… pasar por el proceso de boot… esperar unos segundos… introducir la clave LUKS… y volver a nuestro escritorio de NixOS.

Una vez en el escritorio usaremos el comando journalctl -b para ver el log de nuestro último proceso de boot.

Lo que queremos saber, es si por defecto, se ha encontrado y encendido la interfaz Ethernet ("enp0s3" en mi caso). Buscando en log del boot, deberemos encontrar el output de “ip addr”. Si todo va bien deberemos ver la interfaz Ethernet listada en dicho output. No solo eso, sino que también debería tener una IP asignada. Si esto es así, podemos seguir con el siguiente paso; configurar el servidor SSH.

Interfaces de red en el log de boot

En caso que no se encuentre la interfaz Ethernet en Stage1... tenemos un problema. Un problema de drivers. Para solucionar esto deberemos recorrer una tangente:

2.1) Buscando y cargando drivers Ethernet en Stage1 de NixOS

Si en Stage1 no vemos la interfaz Ethernet, pero en Stage2 (escritorio de toda la vida) si tenemos conexión... tenemos un indicativo que el driver relacionado no esta siendo "cargado completamente" durante Stage1.

Para solucionar esto deberemos hacer un poco de investigación. Objetivo: averiguar el nombre del driver de Ethernet que "si" esta presente en Stage2 pero que "no" esta cargado en Stage1. Para esto podemos hacer uso de un par de herramientas. Instalaremos en /etc/nixos/configuration.nix:

Cada una de estas herramientas nos ayudarán a listar y averiguar mas del hardware que use el bus PCI o USB. En mi caso, se que mi interfaz Ethernet usa el bus PCI, así que usare pciutils. Pero puede que ustedes necesiten usar usbutils si su interfaz usa USB. Una vez instaladas esta herramientas en NixOS:

Usando los comandos lspci -k o lsusb -t vamos a tratar de buscar nuestro adaptador Ethernet. Lo que estamos buscando es el nombre del “modulo”/“kernel” o “module”/“driver” relacionado al adaptador de red.

Lista de dispositivos PCI y sus modulos

Leyendo el output de lspci -k yo he podido identificar claramente que el "kernel module" usado para mi interfaz de red se llama: "e1000". Dicho driver lo debemos incluir para que sea totalmente cargado en Stage1.

Para esto, debemos añadir el nombre del driver al listado de availableKernelModules definido en /etc/nixos/hardware-configuration.nix:

boot.initrd.availableKernelModules = [ "e1000" … ];

Luego de: construir nuestra nueva generación de NixOS, reiniciar el sistema y regresar a nuestro escritorio... entraremos nuevamente al log del boot con journalctl -b. Si examinamos nuevamente el output de “ip addr”, deberíamos ver que ahora efectivamente esta listada la interfaz Ethernet (enp0s3 en mi caso).... y más aun... también deberíamos tener una IP asignada.

Si por alguna razón no funciona, seguramente el nombre de nuestro driver esta incorrecto. En este caso el mejor aliado es Google. Buscando un poco deberíamos ser capaces de encontrar cual es el driver indicado para nuestra interfaz Ethernet.

3) Configurando SSH en Stage1

Nota previa: Durante todo el proceso hasta el momento (y lo que continúa) puede que nuestra partición boot (donde se almacenan todos los cambios relacionados a Stage1) se quede sin espacio. Para liberar el caché podemos usar el comando: sudo nix-collect-garbage -d (ojo, tiene que ir con sudo para que limpie correctamente). Generalmente la partición boot es bastante pequeña, así que termina siendo habitual limpiar el cache cada unas 5 a 10 generaciones de NixOS.

Es aconsejable usar sudo nix-collect-garbage -d antes de un sudo nixos-rebuild switch y no después. Limpiar el caché borra las generaciones anteriores del OS, usando los comandos en este orden nos aseguramos de siempre mantener “la versión previa” disponible (algo que puede ser necesario en caso de “romper” el OS).

Bien, ahora que tenemos Stage1 con red, vamos a querer conectarnos por SSH para poder ejecutar comandos y debuggear directamente Stage1.

Lo primero que vamos a necesitar es generar una dupla de claves privada-pública. En nuestro equipo remoto (desde donde nos vamos a conectar a Stage1) vamos a generar la dupla de claves RSA.

En Windows podemos usar PuttyGen y en linux ssh-keygen

La clave pública generada la dejamos en nuestro NixOs en el fichero /etc/nixos/authorized_keys. Si tienes dudas sobre como debe ser el formato de las claves guardadas en authorized_keys, puedes leer esto.

Debido a un bug, al cual no quiero entrar a explicar, vamos a tener que generar una “key de host”; sin esto el servidor SSH no va a iniciar. Para esto en nuestro NixOS ejecutamos: ssh-keygen -t rsa -N "" -f /etc/nixos/host_key.

Ahora ya tenemos los archivos con las credenciales necesarias listas y guardadas. Pero debemos recordar algo. Stage1 es un "espacio aislado" y se ejecuta en la ram durante el boot. O sea, Stage1 no tiene acceso directo a estas credenciales que hemos guardado en /etc/nixos. Debemos primero indicar a NixOS que genere una "copia" de estos "secretos" desde el sistema de archivos del usuario al espacio que puede ser accedido durante intird.

Para esto podemos usar secrets en nuestro /etc/nixos/hardware-configuration.nix:

boot = {
  initrd = {
    secrets = {
      "/etc/nixos/authorized_keys" = "/etc/nixos/authorized_keys";
      "/etc/nixos/host_key" = "/etc/nixos/host_key";
    };
  };
};

Con esto estaremos copiando los ficheros de directorio /etc/nixos/ del sistema de ficheros del usuario, a un directorio exactamente con el mismo nombre /etc/nixos/... pero que se montará en el ram disk durante Stage1

Nota 1: NixOS maneja los secretos en la Stage1 de una manera en la cual no se borran al crear una nueva generación de OS. Por lo tanto, siempre que cambiemos los secretos es buena practica usar: sudo nix-collect-garbage -d para eliminar/sobre-escribir las credenciales previas.

Nota 2: Con secrets hay tener cuidado de usar comillas (“”) al referenciar los paths. Esto es importante para que las credenciales se almacenen de forma segura.

Ahora activaremos el SSH en /etc/nixos/hardware-configuration.nix:

boot = {
  initrd = {
    network = {
      ssh = {
        enable = true;
        port = 2222;
        authorizedKeyFiles = [ "/etc/nixos/authorized_keys" ];
        hostKeys = [ "/etc/nixos/host_key" ];
      };
    };
  };
};

Los archivos referenciados en authorizedKeyFiles y hostKeys seran buscados en el sistema de archivos de ram disk del Stage1. Gracias al uso de secrets estos estarán disponibles en dicho lugar.

Y listo, ya deberíamos tener configurado nuestro servidor SSH en Stage1.

Pero... aprovechando que estamos en hardware-configuration.nix podemos:

  1. Desactivar el CustomScript que usamos durante la primera etapa de este proceso... ahora que vamos a tener acceso por SSH no necesitamos mas dicho script.
  2. Desactivar el DHCP de la interfaz Ethernet y asignar manualmente los parámetros de: IP (address), Gateway y DNS. Aunque varia de router a router, puede que cada vez que estemos iniciando NixOS se este asginando una IP distinta a la interfaz Ethernet. Esto puede ser algo molesto si usamos SSH. Lo mejor es fijar dichos valores. Para lograr esto debemos desactivar DHCP en hardware-configuration.nix (segmento de networks):
...

enp0s3 = {
  enable = true;
  name = "enp0s3";
  #DHCP = "yes" #Comentamos DHCP para desactivarlo
  #Asignamos los valores manualmente
  address = [ "192.168.1.20/24" ];
  gateway = [ "192.168.1.1" ];
  dns = [ "8.8.8.8" ];
}
...

Recuerda usar el nombre de tu interfaz Ethernet. La address y gateway dependerán de tu red local. Puedes usar los comandos: ip route y ip addr para saber que IP y Gateway tienes asignada y usar dichos valores en la configuración. Para el DNS puedes usar el de Google (8.8.8.8) a prueba... 1.1.1.1 también puede ser una alternativa.

Bien! Finalmente vamos a crear una nueva generación de NixOS con todos estos cambios y reiniciar el sistema.

Si todo va bien, cuando Stage1 se detenga para pedirnos la clave LUKS, vamos a tener la posibilidad de acceder de forma remota usando SSH. Recuerda usar la IP del NixOS que acabamos de configurar y puerto (2222) correcto. También recuerda usar la llave privada correspondiente a la llave publica que usamos para configurar el servidor SSH.

El usuario de Stage1 por defecto es: root

Conexión SSH a Stage1

Nota: Recuerda que el propósito del SSH en Stage1 es meramente para debugear. Una vez tengas el Stage1 funcionando como quieras, es 100% recomendable desactivar el servidor y eliminar las credenciales asociadas.

bonus) Solucionando bug de red Stage1 -> Stage2

Puede que durante, o al finalizar esta guiá, se percataran de un extraño error. Cuando usamos network en Stage1, el NetworkManager de Stage2 se vuelve algo "tonto" y no se conecta automáticamente a las redes cuando se nos presenta el escritorio del OS. Al parece esto se debe a que determinadas configuraciones de redes son pasadas de Stage1 a Stage2 y el sistema no "refresca" correctamente la asignación de IP.

La manera mas fácil de solucionar esto es apagar y encender el NetworkManager cuando estemos en el escritorio de NixOS. Pero claramente es bastante incomodo tener que hacer esto en cada inicio.

Aquí presento un script (muy "bruto") que automáticamente realiza el proceso anterior. Para implementarlo en vamos a nuestro /etc/nixos/configuration.nix y añadimos el servicio:

systemd.services.reset-network = {
  enable = true;
  description = "Reinicia NetworkManager para evitar configuraciones duplicadas";
  wants = [ "network-manager.service" ];
  after = [ "network-manager.service" ];
  wantedBy = [ "multi-user.target" ];
  serviceConfig = {
  ExecStart = "${pkgs.bash}/bin/sh -c 'until systemctl is-active --quiet NetworkManager; do sleep 1; done && nmcli networking off && sleep 5 && nmcli networking on'";
  Type = "oneshot";
  RemainAfterExit = true;
  Environment = "PATH=${pkgs.networkmanager}/bin:${pkgs.bash}/bin:${pkgs.coreutils}/bin:${pkgs.systemd}/bin:$PATH";
  };
};

El script espera que el servicio de NetworkManager este "activo", para luego desactivarlo y volver a encenderlo. Esto limpia "sea lo que sea" que provoca el error.

También puede ser necesario agregar en /etc/nixos/hardware-configuration.nix esto:

boot.initrd.network.flushBeforeStage2 = false;

Esta declaración "originalmente" se supone que funcionaba, exactamente, para solucionar el bug que estamos comentando. Como dice el nombre: "network flush before stage2". Pero por alguna razón al usarlo en conjunto a boot.initrd.systemd no funciona. Por tanto lo mejor es dejarlo apagado para que no rompa nada.

Final primera parte

Espero que esta guiá los ayudara a obtener conexión a red durante el Stage1 de NixOS y/o a implementar un servidor SSH para poder debugear este segmento del proceso de boot.

Quiero agradecer al blog de Spencer Balogh por su guiá indispensable en comprender como funciona el networking de Stage1.

Como comente en un inicio, esta guiá nace como un pre-requisito para la implementación de un sistema de desbloquear remoto y seguro de particiones LUKS durante el proceso de boot.

En la parte 2 de esta guiá veremos como lograr obtener red durante Stage1 pero usando una interfaz inalámbrica WiFi. Esto añade desafíos relacionados a drivers, protocolos de seguridad WiFi y uso de credenciales inalámbricas.

:)