Prepare Azure P2S domain deployment

This commit is contained in:
2026-09-08 15:32:07 -06:00
parent 991fc70600
commit a24c25a3fb
18 changed files with 1288 additions and 28 deletions
+179
View File
@@ -0,0 +1,179 @@
# Active Directory SGU en Azure con VPN Point-to-Site
Esta variante conserva Active Directory en una VM Windows Server 2025 con IP
pública de Azure, pero **no publica Active Directory en Internet**. La IP pública
sirve para el ciclo de vida y, opcionalmente, RDP desde un único CIDR
administrativo. DNS, Kerberos, LDAP, SMB, RPC, WinRM, Auth Broker, monitoreo y
RustDesk viajan por Azure VPN Gateway Point-to-Site (P2S).
La plantilla crea:
- VNet `10.77.0.0/16`, subnet del DC `10.77.0.0/24` y `GatewaySubnet`;
- Windows Server 2025 con IP privada estática `10.77.0.4` reservada en la NIC;
- IP pública Standard para la VM, protegida por NSG;
- VPN Gateway `VpnGw1` con IKEv2/SSTP y autenticación por certificados;
- pool P2S `172.30.0.0/24`, autorizado en los firewalls SGU;
- DNS de la NIC del servidor apuntando a `10.77.0.4`.
Los prefijos son parámetros. Deben ser RFC1918 y no deben solaparse con las
redes usadas por Hyper-V, el `Default Switch`, Wi-Fi o Ethernet locales.
## 1. Crear la autoridad P2S y el certificado de administración
En la estación administrativa donde está el repositorio:
```powershell
$p2s = .\scripts\New-SguAzureP2sCertificates.ps1 `
-ClientName 'AdminWorkstation'
```
Se pide una contraseña para proteger el PFX. La clave privada de la autoridad
raíz permanece no exportable en `Cert:\CurrentUser\My`; Azure recibe solamente
el `.cer` público. El PFX es una credencial de acceso a la VNet: se debe copiar
únicamente a la VM correspondiente y eliminarse de ubicaciones compartidas
después de importarlo.
## 2. Desplegar Azure
Requisitos: Azure CLI, una sesión iniciada con `az login`, permisos para crear
red, gateway, IP pública y VM, y una suscripción seleccionable.
```powershell
$azure = .\scripts\Deploy-SguAzureInfrastructure.ps1 `
-SubscriptionId '00000000-0000-0000-0000-000000000000' `
-ResourceGroupName 'rg-sgu-lab' `
-Location 'centralus' `
-AdministratorUsername 'azureadmin' `
-P2sRootCertificatePath $p2s.RootCertificatePath
```
La contraseña local de la VM se solicita como `SecureString`, se coloca sólo en
un archivo temporal con ACL exclusiva para el usuario actual y se elimina al
terminar. No aparece en los argumentos de Azure CLI ni queda guardada en el
repositorio.
Por omisión ningún puerto administrativo de la VM se abre desde Internet. Para
habilitar temporalmente RDP durante el bootstrap, indique exclusivamente su IP
pública actual:
```powershell
-AdministratorSourceAddressPrefix '203.0.113.10/32'
```
No utilice `0.0.0.0/0`. El despliegue de un VPN Gateway suele tardar bastante
más que la VM; el comando espera hasta que Azure entregue un resultado final.
## 3. Descargar P2S y entrar por la IP privada
Cuando el gateway esté `Succeeded`:
```powershell
$vpn = .\scripts\Get-SguAzureP2sPackage.ps1 `
-SubscriptionId '00000000-0000-0000-0000-000000000000' `
-ResourceGroupName 'rg-sgu-lab' `
-VpnGatewayName $azure.VpnGatewayName
.\scripts\Install-SguAzureP2sClient.ps1 `
-VpnProfilePackagePath $vpn.PackagePath `
-ClientCertificatePfxPath $p2s.ClientCertificatePath `
-ClientRootCertificatePath $p2s.RootCertificatePath `
-Connect
```
Con el túnel conectado, use RDP contra `10.77.0.4` y habilite la redirección de
una unidad local para copiar `sgu-server-bootstrap-VERSION.zip` a la VM. La NIC
ya apunta a su futura dirección DNS propia, por lo que la resolución pública no
está disponible hasta que el bootstrap instale DNS y sus reenviadores. Así no es
necesario abrir 3389 en la IP pública. La opción
`AdministratorSourceAddressPrefix` queda como ruta de recuperación temporal,
no como el camino normal.
## 4. Ejecutar el bootstrap dentro de Windows Server
Descargue y extraiga `sgu-server-bootstrap-VERSION.zip` dentro de la VM. La IP
que recibe el bootstrap es la **privada** de la NIC, nunca la pública:
```bat
Start-SguAzureServerBootstrap.cmd 10.77.0.4 172.30.0.0/24
```
El modo `PlatformManaged` comprueba que Azure ya asignó `10.77.0.4/24`, pero no
deshabilita DHCP, no reemplaza la ruta predeterminada y no reinicia el adaptador.
El DNS de AD publica únicamente la dirección privada. `168.63.129.16` se usa
como reenviador DNS de la plataforma Azure.
Después del reinicio de promoción, verificar:
```powershell
Get-Content C:\ProgramData\SGU\Bootstrap\Server\bootstrap-complete.json
Resolve-DnsName _ldap._tcp.dc._msdcs.lci.lasalle.mx -Type SRV -Server 10.77.0.4
```
El JSON debe indicar `NetworkConfigurationMode = PlatformManaged`, el pool P2S
en `TrustedClientNetworks` y ambos prefijos en `AllowedRemoteAddresses`.
## 5. Emitir un certificado y enrolar cada VM Hyper-V
En la estación administrativa, emita una credencial distinta por equipo:
```powershell
$w11 = .\scripts\New-SguAzureP2sCertificates.ps1 -ClientName 'Windows11'
```
Copie a la VM Windows 11 de Hyper-V:
- `sgu-client-bootstrap-VERSION.zip` extraído;
- `$vpn.PackagePath`;
- `$w11.ClientCertificatePath`;
- `sgu-azure-p2s-root.cer`.
Desde la carpeta extraída del bootstrap de cliente, instale P2S y enrole:
```bat
Start-SguAzureClientEnrollment.cmd 10.77.0.4 C:\SGU\sgu-azure-vpn-client.zip C:\SGU\sgu-azure-p2s-Windows11.pfx C:\SGU\sgu-azure-p2s-root.cer
```
En una sola ejecución el comando:
1. importa el certificado de cliente en `LocalMachine\My` sin dejar la
contraseña en disco;
2. instala un perfil IKEv2 de todos los usuarios llamado `SGU Azure P2S`;
3. agrega la ruta `10.77.0.0/16` y una regla NRPT que envía sólo
`.lci.lasalle.mx` al DNS `10.77.0.4`;
4. conecta P2S con certificado de máquina;
5. registra mTLS, instala SGU/RustDesk y une el equipo al dominio;
6. reinicia Windows.
Si la red local bloquea IKEv2 (UDP 500/4500), el paquete de Azure también
incluye un perfil SSTP sobre TCP 443, pero ese fallback todavía requiere
instalación manual con el instalador oficial incluido en `WindowsAmd64`.
Windows 11 Pro admite unión a AD y VPN nativa, pero Microsoft no licencia el
**Always On VPN device tunnel** para Pro. Por ello el perfil se instala para
todos los usuarios y se puede seleccionar desde el control de red de la
pantalla de inicio de sesión; antes del primer logon de una cuenta de dominio,
conecte `SGU Azure P2S` allí. Enterprise/Education pueden recibir posteriormente
un device tunnel Always On, pero eso no es requisito del enrolamiento SGU.
Validación dentro del cliente, con la VPN conectada:
```powershell
Get-VpnConnection -Name 'SGU Azure P2S' -AllUserConnection
Get-DnsClientNrptRule | Where-Object DisplayName -like 'SGU Azure P2S*'
Test-NetConnection 10.77.0.4 -Port 5985
Resolve-DnsName _ldap._tcp.dc._msdcs.lci.lasalle.mx -Type SRV
nltest.exe /dsgetdc:lci.lasalle.mx
```
## Seguridad y referencias
No agregue reglas NSG públicas para 53, 88, 135, 389, 445, 464, 636, 3268,
3269 ni RPC dinámico. El conjunto de puertos necesario para una unión de dominio
es precisamente la razón de encapsularlo en P2S.
- [Azure VPN Gateway P2S con certificados](https://learn.microsoft.com/en-us/azure/vpn-gateway/point-to-site-certificate-gateway)
- [Cliente P2S nativo de Windows](https://learn.microsoft.com/en-us/azure/vpn-gateway/point-to-site-vpn-client-certificate)
- [Instalación de certificados P2S](https://learn.microsoft.com/en-us/azure/vpn-gateway/point-to-site-how-to-vpn-client-install-azure-cert)
- [Puertos necesarios para unir un dominio](https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/active-directory-domain-join-troubleshooting-guidance)
- [Requisitos de edición de Windows](https://learn.microsoft.com/en-us/windows/security/licensing-and-edition-requirements)
- [Limitación de Always On device tunnel](https://learn.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-always-on-device-tunnel)
+7 -2
View File
@@ -1,6 +1,6 @@
# Recuperación desde cero y alta en una sola ejecución
Los releases entregan tres ZIP independientes. Cada uno contiene sus binarios,
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.
@@ -17,6 +17,11 @@ 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, incluidos VPN Gateway y los clientes Hyper-V, 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:
@@ -186,4 +191,4 @@ la línea de comandos. Para empaquetar recursos institucionales adicionales:
-ServerContentPath C:\Preparacion\Packages
```
`SHA256SUMS-VERSION.txt` permite comprobar los tres ZIP antes de usarlos.
`SHA256SUMS-VERSION.txt` permite comprobar los cuatro ZIP antes de usarlos.
+17 -5
View File
@@ -1,5 +1,14 @@
# Security model
## Public Azure deployment
Owning a public Azure IP does not make the domain controller an Internet-facing
directory service. The supported cloud topology exposes no AD DS, DNS, SMB,
RPC, WinRM, broker, monitoring, or RustDesk port publicly. Hyper-V and later
physical Windows clients enter the VNet through certificate-authenticated Azure
VPN Gateway P2S; the Azure NSG and Windows firewall accept the P2S pool and the
private VNet only. See [azure-vpn-deployment.md](azure-vpn-deployment.md).
## Password handling
- The Credential Provider receives the password in Lithnet's secure password
@@ -33,15 +42,18 @@
- Administrative enrichment first verifies the employee number and reads
employee type/status, email, job title, and department from the incident
overview. Only after that match, it reads given names and paternal/maternal
surnames from the personal page plus street, exterior/interior number,
neighborhood, locality, state, and postal code from the location page.
- Administrative birth date, RFC, CURP, sex, blood type, marital status,
surnames and the normalized `Male`/`Female` value from the personal page plus
street, exterior/interior number, neighborhood, locality, state, and postal
code from the location page. AD stores only the controlled `SGU-Gender` line,
not the original HTML field.
- Administrative birth date, RFC, CURP, blood type, marital status,
nationality, telephone, email lists, housing type, and emergency-contact
fields are ignored.
- Student enrichment reads only the matching student number, given names,
paternal/maternal surnames, email, career, street, neighborhood,
city/municipality, state, and postal code from known element IDs.
- Student CURP, birth date, sex, blood type, marital status, telephone, mobile,
city/municipality, state, postal code, and normalized sex from known element
IDs.
- Student CURP, birth date, blood type, marital status, telephone, mobile,
guardian, medical, financial, and academic-history values are ignored.
- Professor enrichment keeps the menu display name as its base. From the payroll
consultation header it reads only a matching employee number, name, email,