# Plan: DASUTEN sin Domain Controller (Modo Workgroup) > **Ámbito:** A04 — dtic-DASUTEN **Código:** A04.P005 **Fecha:** 27 de marzo de 2026 **Autor:** Sistema ADN **Versión:** 2.2 **Estado:** 🚧 EN EJECUCIÓN (Fase 2 completada, Fase 3 pendiente — Creación VM PC Cliente) **Dependencia:** A04.P001 (Red srv-dasu) ## 📋 Resumen Ejecutivo Evaluar si el sistema DASUTEN puede operar **sin la dependencia de un Domain Controller (AD DS)**, utilizando únicamente un SQL Server y una PC cliente en modo **Workgroup**. Esto simplifica significativamente la infraestructura y elimina los problemas de red asociados al dominio. ### Motivación Los intentos previos (P2601.06 a P2601.08) demostraron que la topología con DC introduce complejidad de red que entra en conflicto con el router del ISP de la oficina DASUTEN. Al eliminar la dependencia del DC, se reducen los puntos de falla y se simplifica la conectividad. ### Decisiones clave - **VMs existentes preservadas**: `dasu-srvv-dc` (VM 100), `dasu-srvv-sql` (VM 101) y `dasu-pcv` (VM 102) fueron apagadas y deshabilitadas del autostart. Pueden reactivarse si se decide retornar al enfoque con DC. - **Enfoque nuevo**: VMs limpias en modo Workgroup, sin Active Directory. - **Red provista por ISP**: Tanto `srv-dasu` como las VMs (`dasu-sql2`, `dasu-pcv2`) y la PC física (`dasu-pc`) obtienen IP directa del router del ISP. No se usa red privada 10.0.100.x. ## 🌐 Topología de Red ``` Internet │ Router ISP (192.168.1.1 — gateway confirmado) │ ├── srv-dasu → DHCP del ISP: 192.168.1.13 (vmbr0 bridge sobre enp33s0) │ ├── dasu-sql2 (VM 103) → DHCP del ISP: 192.168.1.14 ✅ VM creada │ └── dasu-pcv2 (VM 104) → DHCP del ISP: 192.168.1.15 ✅ VM creada │ └── dasu-pc → DHCP del ISP (PC física cliente) ``` > **Nota**: Todas las máquinas están en la misma red plana del ISP. No hay subnetting privado ni gateway interno. Esto elimina los problemas de routing que existían con el enfoque anterior. ## 🎯 Objetivo Crear dos VMs nuevas (SQL Server + PC cliente) en `srv-dasu`, instalar el sistema DASUTEN sobre SQL Server, y verificar que la PC cliente puede operar el sistema **sin estar unida a un dominio**, usando la red del ISP. ## 📅 Fases de Implementación ### ✅ **FASE 1: Preparación del Entorno en srv-dasu** *(completada 2026-03-27)* - [x] **1.1:** Verificar estado de srv-dasu: conectividad Tailscale ✅ (100.112.46.104, activo), RAM 15 GB total / 10 GB libres / 12 GB disponibles, disco 94 GB / 30 GB disponibles (68%). - [x] **1.2:** Confirmar que las VMs originales (100, 101, 102) están apagadas ✅ (todas `stopped`). - [x] **1.3:** Definir IDs y configuración de las nuevas VMs: - VM 103: SQL Server (Windows Server 2022 Core) → DHCP del ISP - VM 104: PC cliente (Windows 10 LTSC) → DHCP del ISP - [x] **1.4:** Verificar ISOs disponibles ✅: `Windows_Server_2022_Core_Eval_x64.iso`, `Windows_10_enterprise_ltsc_2021_x64_dvd_es-es_*.iso`, `SW_DVD9_SQL_Svr_Enterprise_Edtn_2019*.ISO`, `virtio-win.iso`. - [x] **1.5:** Verificar configuración bridge `vmbr0` ✅ → **HALLAZGO CRÍTICO**: vmbr0 configurado como estático `10.0.100.1/24` (red privada anterior). **Requiere reconfiguración a DHCP del ISP** antes de crear las VMs. - [x] **1.6:** *(agregado)* Reconfigurar `vmbr0`: bridge sobre `enp33s0` con DHCP del ISP ✅. IP asignada: `192.168.1.13/24`, gateway `192.168.1.1`. Backup en `/etc/network/interfaces.bak.20260327-182319`. Aplicado con `ifreload -a` — Tailscale se reconectó automáticamente. > ✅ **Resuelto**: `vmbr0` reconfigurado exitosamente. Las VMs conectadas a `vmbr0` ahora obtienen DHCP directo del ISP. ### ✅ **FASE 2: Creación de VM SQL Server (sin dominio)** *(completada 2026-03-28)* - [x] **2.1:** Crear VM 103 en Proxmox ✅ (4 GB RAM, 2 vCPU, 60 GB disco SATA, vmbr0, SeaBIOS, i440fx). MAC: `BC:24:11:8D:EC:46`. - [x] **2.2:** Instalar Windows Server 2022 Core ✅. Instalado vía consola noVNC. Drivers VirtIO instalados vía `pnputil /add-driver D:\*.inf /subdirs /install`. Red operativa (DHCP ISP). Credencial Admin guardada en candados (`dasu-sql2:Administrator`). Backup vzdump realizado (modo stop, zstd, 3.28 GB). - [x] **2.3:** Configurar red: DHCP del ISP ✅. IP actual asignada: `192.168.1.14/24`, gateway `192.168.1.1`. - [x] **2.4:** Configurar hostname (`dasu-sql2`) ✅ y modo Workgroup (WORKGROUP). - [x] **2.5:** Instalar y habilitar OpenSSH Server (puerto 7022) ✅. Shell por defecto: PowerShell. - [x] **2.6:** Instalar Tailscale VPN ✅. Cuenta `pcdasu0@frlr.utn.edu.ar`. IP Tailscale: (Pendiente login). ⚠️ Server Core interfiere con el popup GUI en la instalación normal, requiere comando CLI manual para URL interactiva. - [x] **2.7:** Instalar SQL Server 2019 ✅. Instalado vía bypass del relay w-zombi (limitación por encoding base64 de W-ZOMBI y escapes booleanos de PowerShell estricto en Server Core). Locale cambiado a es-ES. - [x] **2.8:** Configurar autenticación mixta SQL ✅. LoginMode=2 (registro), SA habilitado con password, firewall TCP 1433 abierto. Login SA verificado con `sqlcmd`. - [x] **2.9:** Verificar conectividad SQL ✅. TCP 1433 accesible desde srv-dasu (192.168.1.13) a dasu-sql2 (192.168.1.19). Login SA verificado localmente. ### ⏳ **FASE 3: Creación de VM PC Cliente (sin dominio)** - [x] **3.1:** Crear VM 104 en Proxmox (4 GB RAM, 2 vCPU, 50 GB disco SATA, vmbr0, SeaBIOS, i440fx) ✅. Instalador de Win 10 LTS montado en IDE2, VirtIO en IDE0. Red: e1000. - [x] **3.2:** Instalar Windows 10 LTSC ✅. - [x] **3.3:** Configurar red: **DHCP del ISP** (gateway del ISP). Anotar IP asignada. ✅ IP: `192.168.1.15`. - [x] **3.4:** Configurar hostname (`dasu-pcv2`) y modo Workgroup ✅. - [x] **3.5:** Instalar OpenSSH Server (puerto 7022) ✅ Instalado silente vía QEMU Guest Agent. - [x] **3.6:** Instalar Tailscale VPN (cuenta `pcdasu0@frlr.utn.edu.ar`). Anotar IP Tailscale asignada. ✅ **IP: 100.98.225.100** - [ ] **3.7:** Instalar herramientas cliente SQL (SSMS o sqlcmd) si es necesario. - [ ] **3.8:** Verificar conectividad hacia dasu-sql2 (ping + test TCP 1433). - [x] **3.9:** Instalar qemu-guest-agent en VM dasu-pcv2 para backups desatendidos (ACPI shutdown) ✅. ### ⏳ **FASE 4: Instalación del Sistema DASUTEN** - [x] **4.1:** Obtener backup/script de la base de datos DASUTEN del sistema actual. ✅ (Descargado localmente archivo de 604MB y confirmado acceso vía SMB al crudo `.bak`) - [x] **4.2:** Restaurar/crear la base de datos DASUTEN en dasu-sql2. ✅ **Automatización implementada**: Creada la extensión nativa ADN `adn/tools/run dasuten db:migrar` (Ruby) que realiza la descarga SMB, extracción y restauración vía SQLCMD de manera eficiente, segura y reutilizable, eliminando el uso de scripts temporales de shell. - [ ] **4.3:** Instalar la aplicación cliente DASUTEN en dasu-pcv2. - [ ] **4.4:** Configurar la conexión de la aplicación al SQL Server usando autenticación SQL (no Windows Integrated). - [ ] **4.5:** Verificar que la aplicación conecta y opera correctamente. ### ⏳ **FASE 5: Validación con PC física** - [ ] **5.1:** Instalar la aplicación cliente DASUTEN en `dasu-pc` (PC física de la oficina). - [ ] **5.2:** Configurar conexión al SQL Server (dasu-sql2) por IP. - [ ] **5.3:** Ejecutar pruebas funcionales del sistema DASUTEN (consultas, altas, reportes). - [ ] **5.4:** Documentar qué funcionalidades dependen del DC (si alguna) y cuáles operan sin él. - [ ] **5.5:** Evaluar rendimiento y estabilidad. - [ ] **5.6:** **Decisión**: ¿Se puede prescindir del DC para esta implementación? - ✅ **SÍ** → Adoptar este enfoque como definitivo, descartar VMs con DC. - ❌ **NO** → Reactivar VMs originales y retomar enfoque con DC. --- ## 🔄 Diferencias clave vs enfoque anterior | Aspecto | Con DC (P2601.06-08) | Sin DC (P2601.09) | |---------|----------------------|---------------------| | **Red** | Privada 10.0.100.x (gw interno) | DHCP del ISP (gw del ISP) | | **Autenticación SQL** | Windows Integrated (Kerberos) | SQL Auth (mixta) | | **Usuarios** | Active Directory | Usuarios locales Windows | | **DNS** | AD DNS (10.0.100.10) | DNS del ISP (automático) | | **Complejidad de red** | Alta (DC + DNS + dominio + routing) | Mínima (red plana ISP) | | **Puntos de falla** | DC, SQL, red dominio, routing | Solo SQL | | **VMs necesarias** | 3 (DC + SQL + PC) | 2 (SQL + PC) | ## ⚠️ Consideraciones de red ISP - Las IPs asignadas por DHCP del ISP pueden cambiar. Se recomienda **reservar IPs** en el router del ISP o documentar las IPs asignadas para referencia rápida. - Todas las máquinas se ven entre sí directamente (misma LAN del ISP), lo cual simplifica la comunicación pero requiere que el firewall de Windows permita el tráfico SQL (puerto 1433). - El acceso remoto a srv-dasu sigue siendo por **Tailscale** (independiente de la red local ISP). ## 📊 Recursos | Recurso | Valor real | |---------|-----------| | **RAM total srv-dasu** | 15 GB | | **RAM disponible** | 12 GB (10 GB libres + 3 GB cache) — VM 103 aún no consume (recién creada) | | **RAM para nuevas VMs** | 8 GB (SQL 4GB + PC 4GB) → queda ~4 GB para host | | **Disco total** | 94 GB (30 GB disponibles, 68% uso) — thin provisioned | | **ISOs** | Win Server 2022 Core, Win 10 LTSC, SQL 2019, virtio-win | | **Bridge vmbr0** | ✅ DHCP ISP sobre `enp33s0` — IP: `192.168.1.13/24` | | **Gateway** | `192.168.1.1` (router ISP confirmado) | ## 8. Lecciones Aprendidas y Troubleshooting - **`New-NetFirewallRule -Enabled` en entornos PS puros:** Al inyectar comandos de PowerShell a Server Core de forma automatizada (WS2022), debe pasarse el string `'True'` y no la variable booleana `$True`, ya que la Cmdletization falla la conversión estricta al vuelo. - **Escape JSON en W-ZOMBI de PowerShell:** Grandes scripts en línea que se parsean a través de `cmd.json` destrozan la interpretación si hay fallas en la conexión. Para Server Core sin GUI, fue más seguro bypassear W-ZOMBI subiendo el PowerShell directo sobre un HTTP en Python temporal (`/tmp/s.ps1`). - **QEMU-GA y Nombres de Unidad Aleatorios:** En entornos con múltiples CDs montados (OS + Drivers VirtIO + CD Extra), Windows Server asigna letras impredecibles (no siempre `D:`). El path del Agent MSI debe resolverse programáticamente usando `Get-WmiObject Win32_CDROMDrive`. - **Usuario Administrador localizado:** Al instalar Server Core desde la ISO `es-es`, el administrador por defecto se renombra literalmente a `Administrador` en español. Esto es crítico porque intentos de conexión desatendida vía SSH con `sshpass` o secuencias usando `Administrator` devolverán "Permission denied", ocultando que el servidor SSH en realidad sí estaba escuchando en el puerto. - **Compresión Nativa de BACKUP SQL vs RAR:** Actualmente el sistema de origen encapsula los `.bak` dentro de un `.rar` gigante (ej. `bksysdasuten.rar`). SQL Server **no sabe** leer `.rar` ni ZIP nativamente para operaciones RESTORE DATABASE. Ya que Linux tiene herramientas como `unar` que facilitan la extracción en RAM, es factible este paso intermedio. Sin embargo, **la solución definitiva y óptima ("menos es más")** para el origen de datos es generar el archivo `.bak` instruyendo a SQL Server que lo comprima nativamente con la opción `WITH COMPRESSION`. Un `.bak` comprimido es un 80% más pequeño, y SQL Server destino lo levanta sin pasos intermedios de extracción, evitando problemas de almacenamiento temporal e I/O innecesarios en el nodo de linux (`srv-dasu`) al copiar el archivo directo al Windows (`dasu-sql2`). ## 🔗 Referencias - **Ámbito**: [A04_dtic-DASUTEN.md](A04_dtic-DASUTEN.md) - **Plan de red**: [A04.P001_Red-SrvDasu.md](A04.P001_Red-SrvDasu.md) - **Plan integración (pausado)**: [A04.P002_Integracion-DASU-PC.md](A04.P002_Integracion-DASU-PC.md) - **Nodos**: [srv-dasu](../../../nodos/srv-dasu.md) | [srv-ns8](../../../nodos/srv-ns8.md) - **Legacy archivado**: [_hist_P2601_dasuten.md](_hist_P2601_dasuten.md)