233 lines
11 KiB
Markdown
233 lines
11 KiB
Markdown
# 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](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:
|
|
|
|
```bat
|
|
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
|
|
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:
|
|
|
|
```powershell
|
|
.\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:
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```bat
|
|
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
|
|
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](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:
|
|
|
|
```bash
|
|
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](linux-client-enrollment.md).
|
|
|
|
## Crear y publicar un release
|
|
|
|
Desde el repositorio y con el SDK fijado en `global.json`:
|
|
|
|
```powershell
|
|
.\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:
|
|
|
|
```powershell
|
|
.\scripts\New-SguBootstrapPackages.ps1 `
|
|
-Version 0.1.1 `
|
|
-ServerContentPath C:\Preparacion\Packages
|
|
```
|
|
|
|
`SHA256SUMS-VERSION.txt` permite comprobar los cuatro ZIP antes de usarlos.
|