Files

13 KiB

Enrolamiento obligatorio de clientes SGU

Para Windows 10 y Windows 11 se usa un solo paquete:

  • sgu-windows-client-bootstrap-VERSION.zip (x64, Pro, Enterprise o Education).

Extraer el ZIP y hacer doble clic en Start-SguClientEnrollment.cmd. Aceptar UAC, introducir la IP del controlador y la cuenta del dominio con su contraseña. También se puede indicar el servidor desde consola:

Start-SguClientEnrollment.cmd 192.168.50.10

Este comando realiza el intercambio de certificados descrito abajo sin mover una clave privada y luego ejecuta la transacción proveedor-primero. Las instrucciones completas están en bootstrap-recovery.md.

El único dato de red necesario es la IPv4 del controlador. El bootstrap prueba WinRM desde las direcciones de las interfaces conectadas, incluyendo túneles VPN, empezando por la ruta elegida por Windows. Si ésta falla, prueba las demás rutas disponibles. Cliente y servidor pueden estar en subredes distintas. Si la red todavía está inicializando, reintenta el descubrimiento durante 20 segundos antes de informar el último diagnóstico. Conserva DHCP, direcciones y puertas de enlace. Sólo si Windows elige otra interfaz agrega una ruta persistente /32 hacia ese servidor por la interfaz comprobada; no modifica la ruta de Internet. Ante cualquier error conserva la ventana y escribe el diagnóstico en C:\ProgramData\SGU\Bootstrap\Client\latest-error.log.

El dominio DNS, NetBIOS y contenedor de equipos se descubren en la sesión autenticada. Usa OU=Laboratorio si existe en la raíz del dominio y, en caso contrario, el contenedor de equipos configurado en AD. Los parámetros -DomainName, -DomainNetbios y -ComputerOuDn permiten validarlos o elegirlos explícitamente. Para otra cuenta, editar el usuario sugerido como DOMINIO\usuario o usuario@dominio. No se guardan contraseñas.

Si la IPv4 proporcionada es pública, el mismo flujo configura automáticamente la conectividad directa. Después de autenticar WinRM, el servidor crea o reutiliza un certificado DoH, publica DNS cifrado en TCP 443 y devuelve únicamente su certificado público. El cliente lo confía, registra el servidor DoH, agrega la regla NRPT y fija localmente los nombres del DC, dominio, broker y RustDesk a esa IP. A continuación comprueba el registro SRV de AD y continúa con la unión. El operador sigue introduciendo solamente IP del DC, usuario y contraseña.

El servidor o firewall perimetral debe autorizar previamente el segmento público del laboratorio. En el bootstrap del servidor se hace con -PublicEnrollmentNetworks 200.13.89.0/24; en Azure, con -PublicEnrollmentSourceAddressPrefixes 200.13.89.0/24. La lista vacía no abre puertos. Este modo requiere Windows 11 o una versión de Windows 10 que exponga los cmdlets DNS-over-HTTPS; en equipos anteriores funciona si la red ya permite DNS tradicional hacia el DC.

El DNS se configura mediante una regla NRPT para el dominio descubierto, conservando los servidores DNS de los adaptadores y la resolución de Internet. Las políticas DNS/VPN corporativas deben permitir resolver ese dominio. El servidor necesita el bootstrap SGU (AD/DNS, WinRM, Auth Broker y RustDesk): este paquete no es un enrolador genérico de Microsoft Entra ID ni instala SGU en un directorio ajeno automáticamente. Se comprueban TCP 53, 88, 135, 389, 445, 5985 y 8443; la unión también requiere DNS/Kerberos por UDP y RPC dinámico según la configuración de AD. Estas pruebas no sustituyen la unión real.

Una VPN de cualquier proveedor ya conectada utiliza el mismo lanzador. Para instalar la VPN Azure IKEv2 se incluyen Start-SguAzureClientEnrollment.cmd e Install-SguAzureP2sClient.ps1 en el mismo ZIP para ambos Windows; la primera instalación requiere perfil y certificados. La conectividad antes del inicio de sesión depende de la VPN y sus políticas, no se puede deducir de la IP del DC.

Una interfaz con sólo APIPA (169.254.x.x), sin DHCP o sin ruta necesita que el administrador configure la red o conecte la VPN. El bootstrap no inventa una IP libre ni una puerta de enlace. Para una LAN estática se mantienen los parámetros avanzados -ClientIPv4Address, -ClientPrefixLength y -NetworkInterfaceAlias; la IP y la interfaz deben indicarse juntas.

El manifiesto usa CompatibilityProfile: Auto. No hay restricciones de VPN por Windows 10/11; los nombres antiguos de perfil se aceptan como parámetros obsoletos. Se valida x64, edición con unión a AD y Windows 10 desde 1607 o Windows 11 (el runtime incluido es .NET 10; usar una edición/build compatible con su ciclo de soporte). Credential Provider, mTLS, cuenta alumno, RustDesk, monitorización y autorreparación conservan la misma implementación.

El flujo administrado instala y valida el Credential Provider antes de ejecutar Add-Computer. La pertenencia al dominio es el último cambio; si falta el runtime, un certificado, el registro COM, la directiva predeterminada o la salud mTLS del broker, el script rechaza la unión.

Una cuenta administrativa todavía puede modificar Windows fuera de este flujo. Por eso el enrolamiento también instala la tarea SGU-CredentialProvider-EnrollmentGuard, ejecutada como SYSTEM al iniciar y diariamente. La tarea conserva un paquete local protegido, repara el registro o los binarios y vuelve a habilitar RDP/WinRM en equipos unidos al dominio. No guarda contraseñas.

1. Preparar el nuevo Windows Enterprise

En la VM nueva, antes de unirla al dominio:

  1. copiar artifacts\credential-provider y todos los scripts de scripts;
  2. copiar el instalador offline más reciente de .NET 10 x64;
  3. crear el certificado cliente no exportable:
powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File .\New-LabCertificate.ps1 `
  -Role CredentialProviderClient

Copiar únicamente el .cer público al broker y registrarlo:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File .\Register-SguClientCertificate.ps1 `
  -CertificatePath C:\SGUDeploy\new-client.cer

Exportar únicamente el certificado público actual del broker e importarlo en el cliente con Import-LabPeerCertificate.ps1. Nunca copiar claves privadas.

2. Instalar, comprobar y unir en una sola operación

Ejecutar como administrador local dentro de la VM nueva. La credencial del dominio se solicita de forma segura si no se proporciona como objeto PSCredential:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
  -File .\Enroll-SguDomainClient.ps1 `
  -PublishPath C:\SGUDeploy\credential-provider `
  -BrokerEndpoint https://sgu-auth.lci.lasalle.mx:8443/v1/authenticate `
  -ClientCertificateThumbprint CLIENT_CERT_THUMBPRINT `
  -ServerCertificateThumbprint SERVER_CERT_THUMBPRINT `
  -DotNetRuntimeInstallerPath C:\SGUDeploy\dotnet-runtime-10-win-x64.exe `
  -ComputerOuDn 'OU=Laboratorio,DC=lci,DC=lasalle,DC=mx' `
  -NewComputerName LAB-W11-001

Orden de la transacción:

  1. instala .NET y los binarios versionados;
  2. registra COM, configura SGU como proveedor predeterminado y oculta el último usuario que cerró sesión;
  3. crea o actualiza la cuenta local estándar alumno con la contraseña inicial ingenieria sólo al crearla; si ya existe conserva su contraseña, la habilita y garantiza que no pertenezca a Administradores;
  4. instala el guard de autorreparación;
  5. exige health mTLS del broker y ejecuta las comprobaciones locales;
  6. configura DNS del dominio;
  7. sólo entonces ejecuta Add-Computer en OU=Laboratorio y reinicia;
  8. al arrancar, el guard habilita RDP, NLA y WinRM y comprueba el estado final.

La directiva de Windows Assign a default credential provider selecciona SGU por defecto. El instalador también habilita Interactive logon: Don't display last signed-in y deshabilita Enumerate local users on domain-joined computers. De este modo un usuario SGU desaparece después de cerrar sesión y permanece el mosaico genérico Other user. No se instala ningún filtro: el proveedor de contraseña de Microsoft permanece disponible para cuentas creadas manualmente y recuperación.

La GPO existente Deploy VSCodium debe estar vinculada una vez a OU=Laboratorio (configuración de equipo) y a OU=Usuarios-SGU (configuración de usuario: fondo institucional). El parámetro ComputerOuDn coloca los equipos nuevos directamente en Laboratorio; VSCodium se instala en el siguiente arranque síncrono y el fondo se aplica al siguiente inicio de sesión del usuario SGU.

En el controlador de dominio, aplicar una vez la directiva de usuario al árbol completo Usuarios-SGU y la directiva de equipo a Laboratorio:

.\Set-SguDomainUserPolicies.ps1
.\Set-SguDomainComputerPolicies.ps1

El script crea y vincula de forma idempotente el GPO SGU - User session restrictions y configura DisableLockWorkstation=1 para Administrativos, Alumnos y Docentes; también deshabilita el protector de pantalla. El segundo crea SGU - Windows client experience y, antes del primer inicio de sesión de dominio, suprime la experiencia de privacidad, las notificaciones y controles de telemetría, la animación Hi / Preparing Windows, y el acceso a ubicación. Además fija en Nunca el apagado de pantalla, suspensión, hibernación y suspensión híbrida, conectado a corriente o batería. El guard de enrolamiento vuelve a aplicar powercfg /hibernate off y los tiempos en cero al inicio y diariamente.

Esa GPO también ejecuta el generador local del fondo de bienvenida y aplica el fondo azul base a la pantalla de bloqueo. El fondo individual se crea al abrir la sesión con el nombre del usuario y location/OU del equipo; véase welcome-wallpaper.md.

HideEULAPage no forma parte de esta GPO: es una opción de archivo Unattend para la fase OOBE y Microsoft la reserva para pruebas de OEM/System Builder. La GPO usa las alternativas soportadas DisablePrivacyExperience=1 y EnableFirstLogonAnimation=0, que son las que afectan a cada cuenta de dominio nueva.

3. Verificación y reparación

.\Test-SguClientEnrollment.ps1 `
  -RequireDomainJoined `
  -RequireRemoteAccess `
  -RequireBrokerHealth `
  -Enforce

Get-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard
Start-ScheduledTask -TaskName SGU-CredentialProvider-EnrollmentGuard

Un resultado válido exige simultáneamente binario y registro COM, configuración, certificados, .NET 10, proveedor SGU predeterminado, último usuario oculto, enumeración local deshabilitada, cuenta local estándar alumno habilitada y fuera del grupo Administradores, y proveedor de contraseña de Microsoft preservado. El guard recrea o corrige esa cuenta de forma idempotente. El script de reparación se encuentra en C:\ProgramData\SGU\Enrollment con ACL exclusiva para SYSTEM y administradores.

4. Experiencia de LogonUI

El proveedor usa un mosaico genérico dedicado, no una credencial asociada al SID anónimo de Other user. Windows muestra la imagen institucional y la etiqueta La Salle · Acceso SGU; el encabezado Acceso institucional SGU se publica como CPFT_LARGE_TEXT solamente en el mosaico seleccionado. LogonUI elige la familia, el peso y el tamaño final y no expone opciones de tipografía a un Credential Provider.

La configuración soportada garantiza que SGU queda seleccionado por defecto y que no se conserva el último usuario. El orden vertical exacto de mosaicos lo decide LogonUI y no tiene una directiva pública. Por seguridad no se filtra ni se elimina Other user: Microsoft recomienda conservar al menos un proveedor del sistema como ruta de recuperación.

Referencias de Microsoft: