Files

11 KiB

Recuperación desde cero y alta en una sola ejecución

Los releases entregan cuatro ZIP independientes. Cada uno contiene sus binarios, scripts, instalador offline requerido y un manifiesto SHA-256 interno. No contienen contraseñas, claves privadas ni certificados reutilizables.

Importante: reconstruir un bosque con el mismo nombre DNS no restaura el bosque anterior. Cambia el SID del dominio. Los equipos unidos al bosque viejo deberán borrarse/reinstalarse o salir de aquel dominio y unirse al nuevo. Para conservar cuentas, SID, contraseñas y relaciones de confianza se necesita una copia de estado del sistema de Active Directory y un procedimiento de recuperación de bosque, no este bootstrap.

Windows Server nuevo

Compatible con Windows Server con Windows PowerShell 5.1. El servidor necesita una interfaz privada para el dominio y, para autenticar contra SGU, salida HTTPS por esa u otra interfaz.

Cuando el servidor vive en Azure, no se configura la IP dentro del sistema operativo. La NIC reserva la IP privada y se usa el modo PlatformManaged; el procedimiento completo, con VPN Gateway opcional o enrolamiento público directo, está en azure-vpn-deployment.md.

  1. Descargar y extraer sgu-server-bootstrap-VERSION.zip.
  2. Abrir el directorio extraído.
  3. Ejecutar, indicando la IP fija que tendrá el controlador:
Start-SguServerBootstrap.cmd 192.168.50.10

El iniciador solicita elevación UAC. El script pide una contraseña de Directory Services Restore Mode sin guardarla, instala AD DS/DNS/GPMC, crea el bosque y reinicia una vez. Un trabajo local bajo SYSTEM continúa automáticamente un minuto después del arranque; no hace falta ejecutar un segundo comando.

Cuando hay más de una interfaz candidata, o se necesita gateway/prefijo/forwarders explícitos, usar Windows PowerShell elevado:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File .\Initialize-SguDomainController.ps1 `
  -ServerIPv4Address 192.168.50.10 `
  -PrefixLength 24 `
  -NetworkInterfaceAlias 'Ethernet' `
  -DnsForwarders 172.21.80.1,1.1.1.1

El proceso crea o configura de forma idempotente:

  • bosque y DNS lci.lasalle.mx / LCI;
  • registro sgu-auth.lci.lasalle.mx apuntando a la IP proporcionada;
  • OU=Laboratorio, OU=Usuarios-SGU y sus OU Docentes, Alumnos y Administrativos;
  • grupo de seguridad SG-Laboratorio-Usuarios-RDP;
  • GPO de experiencia del equipo y restricciones de sesión SGU;
  • certificado de servidor no exportable y broker mTLS en TCP 8443;
  • recurso \\SERVIDOR\Packages, con lectura para Domain Computers;
  • RDP con NLA, WinRM/PowerShell Remoting y reglas administrativas limitadas a la subred privada indicada, incluso si Windows tarda en reconocer el perfil Domain después de la promoción;
  • servidor RustDesk OSS autoalojado (hbbs y hbbr) y su cliente administrado en el propio DC, con puertos de administración limitados a la subred privada;
  • pantalla, suspensión e hibernación en Nunca.

En un servidor con dos NIC, el bootstrap desactiva el registro DNS de la NIC de Internet y obliga al servicio DNS a escuchar y publicar únicamente la IP fija privada. También vuelve a iniciar brevemente esa NIC privada si Windows Server 2025 todavía la clasifica como Public al terminar la promoción. La salida HTTPS continúa por la NIC que tenga el gateway predeterminado.

Para permitir clientes que llegan directamente desde un segmento público, use -PublicEnrollmentNetworks al preparar el servidor. El parámetro valida y normaliza cada CIDR y limita a esos orígenes los puertos de AD, DoH, WinRM, broker y RustDesk:

.\Initialize-SguDomainController.ps1 `
  -ServerIPv4Address 10.77.0.4 `
  -NetworkConfigurationMode PlatformManaged `
  -PublicEnrollmentNetworks 200.13.89.0/24

El broker arranca con una lista de clientes vacía. Eso no abre el servicio: mTLS rechaza todos los certificados hasta que el primer cliente registra el suyo. Los archivos opcionales colocados en payload\server-content\Packages al crear el release se copian al recurso compartido. El paquete siempre incluye welcome-wallpaper: fondo azul, fuentes Indivisa y generador de respaldo para reparación o actualización de clientes. La GPO de equipos inicia la copia local del generador en cada sesión; ya no se impone un único fondo estático por usuario.

Estado y diagnóstico:

Get-Content C:\ProgramData\SGU\Bootstrap\Server\bootstrap.log
Get-Content C:\ProgramData\SGU\Bootstrap\Server\bootstrap-complete.json
Get-ScheduledTask SGU-Complete-Domain-Controller-Bootstrap -ErrorAction SilentlyContinue

La tarea programada se elimina únicamente cuando todas las verificaciones finales concluyen. Si algo externo falla, corregirlo y volver a ejecutar el mismo script; las operaciones terminadas se reutilizan.

Windows 10/11 nuevo

Se admiten Pro, Enterprise y Education. Windows Home no puede unirse a Active Directory local ni actuar como host RDP; el bootstrap lo detecta antes de cambiar el equipo y explica que se debe actualizar la edición.

  1. Descargar y extraer sgu-windows-client-bootstrap-VERSION.zip, común para Windows 10 y Windows 11 x64 Pro, Enterprise o Education.
  2. Ejecutar con la IP fija actual del controlador de dominio:
Start-SguClientEnrollment.cmd 192.168.50.10

También puede hacerse doble clic y escribir la IP del controlador. El cliente conserva sus IP/DHCP y prueba WinRM por las interfaces con rutas disponibles, incluyendo VPN y redes enrutadas. No requiere compartir subred con el servidor. Si una NIC sólo tiene APIPA, necesita DHCP o una IP asignada por el administrador; el bootstrap no inventa direcciones. Si falla, la ventana permanece abierta y el error queda en C:\ProgramData\SGU\Bootstrap\Client\latest-error.log.

El manifiesto usa Auto y ambos Windows ejecutan el mismo código. Azure P2S está incluido para ambos; otras VPN ya conectadas usan el lanzador habitual.

También puede proporcionarse directamente la IP pública del DC. Tras autenticar WinRM, el bootstrap configura DoH y resolución dividida, valida el SRV de AD y continúa sin pedir la IP del cliente. El segmento de salida del laboratorio debe estar en la lista PublicEnrollmentNetworks del servidor y en el NSG/firewall perimetral; por ejemplo, 200.13.89.0/24 cubre las salidas .1 a .254.

Después de UAC, se solicita interactivamente la credencial autorizada para unir equipos. La contraseña existe sólo en memoria. El bootstrap:

  1. selecciona una interfaz con conectividad comprobada al servidor;
  2. abre una sesión WinRM autenticada con el DC, descubre el dominio y configura DNS mediante NRPT sólo para ese dominio; cuando la IP es pública, además configura y valida automáticamente DoH, conservando el DNS de Internet;
  3. crea en el cliente un certificado mTLS RSA-3072 no exportable y envía sólo su parte pública al broker;
  4. recupera por esa sesión autenticada el certificado público del broker;
  5. instala el runtime .NET 10 offline y el Credential Provider;
  6. valida binarios, registro COM, certificados y salud del broker;
  7. instala el guardián de reparación al arranque;
  8. sólo entonces ejecuta Add-Computer en OU=Laboratorio si existe, o en el contenedor de equipos predeterminado del dominio, y reinicia;
  9. al arrancar, activa RDP/NLA, WinRM y las reglas Domain, y vuelve a validar el enrolamiento.
  10. instala RustDesk desde el MSI oficial comprobado, lo apunta al servidor rustdesk.lci.lasalle.mx y registra el ID del dispositivo en el inventario protegido del DC.

Cuando la IP del DC es pública, el paso 2 crea o reutiliza DoH en el servidor, recupera su certificado público, configura el cliente y valida el registro SRV antes de continuar. El mismo doble clic funciona en LAN, una VPN ya conectada o Internet directo; el operador sólo proporciona IP del DC y credenciales.

Para elegir adaptador o nombre del equipo explícitamente:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File .\Invoke-SguClientBootstrap.ps1 `
  -DomainControllerIPv4Address 192.168.50.10 `
  -ClientIPv4Address 192.168.50.11 `
  -ClientPrefixLength 24 `
  -NetworkInterfaceAlias 'Ethernet' `
  -NewComputerName 'LCI-101'

La IP del argumento es siempre la IP fija actual del servidor, no una IP que queda compilada en el Credential Provider. El proveedor usa después el nombre DNS sgu-auth.lci.lasalle.mx, que el bootstrap del servidor actualiza.

La administración gráfica autoalojada se documenta en rustdesk-operations.md. Durante la primera instalación el servidor y los clientes necesitan salida HTTPS para obtener los instaladores RustDesk verificados; el tráfico de soporte posterior permanece dentro de la subred privada del laboratorio.

Un administrador del dominio todavía puede ignorar deliberadamente este flujo y ejecutar Add-Computer a mano; ninguna GPO puede impedir a un administrador del bosque modificar el dominio. Para la operación soportada, el script aplica una transacción proveedor-primero y se niega a unir un equipo que no haya pasado las validaciones.

Cliente Linux nuevo

El ZIP sgu-linux-client-bootstrap-VERSION.zip usa el mecanismo nativo de Linux: realmd, Kerberos, SSSD, NSS y PAM. No distribuye ni instala el Credential Provider de Windows.

En una VM con Internet por Default Switch y una NIC privada conectada a Laboratorio AD, ejecutar como administrador:

sudo bash ./Enroll-SguLinuxDomainClient.sh \
  --domain-controller 192.168.50.10 \
  --domain-interface eth0 \
  --domain-address 192.168.50.12/24 \
  --enable-ssh

La contraseña de la cuenta autorizada para la unión se solicita de forma interactiva por realmd; no se incluye en la línea de comandos. El script configura DNS de AD en la NIC privada, preserva la ruta de Internet, crea la cuenta de equipo en OU=Laboratorio, habilita creación de directorio personal mediante PAM y valida la cuenta de equipo con adcli testjoin. La documentación de operación completa está en linux-client-enrollment.md.

Crear y publicar un release

Desde el repositorio y con el SDK fijado en global.json:

.\scripts\New-SguBootstrapPackages.ps1 -Version 0.1.1
.\scripts\Publish-GiteaRelease.ps1 -Version 0.1.1

El segundo comando usa GITEA_TOKEN sólo en memoria o, si no está definido, solicita la credencial existente a Git Credential Manager. No coloca el token en la línea de comandos. Para empaquetar recursos institucionales adicionales:

.\scripts\New-SguBootstrapPackages.ps1 `
  -Version 0.1.1 `
  -ServerContentPath C:\Preparacion\Packages

SHA256SUMS-VERSION.txt permite comprobar los cuatro ZIP antes de usarlos.