[A06] Resolución BUG SSH Legacy en info.rb, conclusión F1 de Compresión XVA, y actualizaciones de métricas y planes.
This commit is contained in:
+12
-2
@@ -32,6 +32,8 @@ El ecosistema ADN implementa una jerarquía **Ámbito → Nodos** que agrupa ló
|
|||||||
| **A02** | `dtic-DIGIs` | Digitalización y Gestión Documental | *ver docs/ambito/dtic-DIGIs/* |
|
| **A02** | `dtic-DIGIs` | Digitalización y Gestión Documental | *ver docs/ambito/dtic-DIGIs/* |
|
||||||
| **A03** | `dtic-BKPs` | Backups de servidores | srv-ns8, pve_PMOX3, srvv-maurik |
|
| **A03** | `dtic-BKPs` | Backups de servidores | srv-ns8, pve_PMOX3, srvv-maurik |
|
||||||
| **A04** | `dtic-DASUTEN` | Sub-ámbito: Departamento de Servicios UTN (gestionado) | srv-dasu, dasu-sql2, dasu-pcv2, dasu-pc |
|
| **A04** | `dtic-DASUTEN` | Sub-ámbito: Departamento de Servicios UTN (gestionado) | srv-dasu, dasu-sql2, dasu-pcv2, dasu-pc |
|
||||||
|
| **A06** | `dtic-XenServer` | Administración hipervisor Citrix XenServer 7.0 | srv-xen1, srvv-sysacadweb, srvv-maurik |
|
||||||
|
| **A07** | `dtic-DNS` | Administración DNS de la Facultad | srvv-dns, srv-pmox1 |
|
||||||
| `dtic-DIIAA` | (infrastructure root) | Infraestructura física y servicios propios | srv-pmox*, srv-xen1, srvv-* |
|
| `dtic-DIIAA` | (infrastructure root) | Infraestructura física y servicios propios | srv-pmox*, srv-xen1, srvv-* |
|
||||||
|
|
||||||
### Relaciones
|
### Relaciones
|
||||||
@@ -99,12 +101,20 @@ GET /api/entradas?ambito_id=2
|
|||||||
|
|
||||||
### 🏔️ Citrix XenServer
|
### 🏔️ Citrix XenServer
|
||||||
|
|
||||||
|
> **Ámbito asociado:** [**A06 - dtic-XenServer**](../docs/ambito/dtic-XenServer/A06_dtic-XenServer.md)
|
||||||
|
|
||||||
#### **[srv-xen1](../nodos/srv-xen1.md)** (`10.0.10.23`)
|
#### **[srv-xen1](../nodos/srv-xen1.md)** (`10.0.10.23`)
|
||||||
*Citrix XenServer 7.0.0 | Xeon E3-1230 (4C) | Hypervisor Legacy*
|
*Citrix XenServer 7.0.0 | Xeon E3-1230 (4C) | Hypervisor Legacy*
|
||||||
|
|
||||||
| VMID | Nodo | IP | Rol |
|
| VMID | Nodo | IP | Rol |
|
||||||
| :--- | :--- | :--- | :--- |
|
| :--- | :--- | :--- | :--- |
|
||||||
| - | **[srvv-sysacadweb](../nodos/srvv-sysacadweb.md)** | *Interna* | Web SysACAD |
|
| - | **[srvv-sysacadweb](../nodos/srvv-sysacadweb.md)** | `10.0.10.12` | Web SysACAD |
|
||||||
| - | **[srvv-maurik](../nodos/srvv-maurik.md)** | *Desconocida* | Domain Controller |
|
| - | **[srvv-maurik](../nodos/srvv-maurik.md)** | `10.0.10.10` | Domain Controller (UTNLARIOJA) |
|
||||||
|
|
||||||
|
**Limitaciones técnicas:**
|
||||||
|
- OpenSSH 6.6.1 (incompatible con `rsa-sha2`, solo `ssh-rsa` legacy)
|
||||||
|
- Disco Dom0 limitado (~2.7 GB libre)
|
||||||
|
- Requiere opciones SSH especiales: `-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa`
|
||||||
|
|
||||||
### 🛰️ Nodos Externos / Satélites (DASUTEN)
|
### 🛰️ Nodos Externos / Satélites (DASUTEN)
|
||||||
|
|
||||||
|
|||||||
@@ -12,5 +12,6 @@
|
|||||||
"deepseek_key": "eyJpdiI6InRCc2IvL3J4SGNsejgvL04iLCJ0YWciOiJBbjRlMTNXNlZzUGhNSWowSUU1a01nPT0iLCJkYXRhIjoiQXR4azk1aU9sb2QydzNwa0FMTHpjVkJKQTIvZU4wY1U2V2crK3NBbVd1UnRmUGh6In0=",
|
"deepseek_key": "eyJpdiI6InRCc2IvL3J4SGNsejgvL04iLCJ0YWciOiJBbjRlMTNXNlZzUGhNSWowSUU1a01nPT0iLCJkYXRhIjoiQXR4azk1aU9sb2QydzNwa0FMTHpjVkJKQTIvZU4wY1U2V2crK3NBbVd1UnRmUGh6In0=",
|
||||||
"srv-ns8:rmonla": "eyJpdiI6IlJ4cHZkbFpJQWVsTTl3T1YiLCJ0YWciOiJ3WTZGMDEvNHNsZm1wZm5jMEF4Q1lBPT0iLCJkYXRhIjoibFljUHRYTm44bUxvQjhCa2tBPT0ifQ==",
|
"srv-ns8:rmonla": "eyJpdiI6IlJ4cHZkbFpJQWVsTTl3T1YiLCJ0YWciOiJ3WTZGMDEvNHNsZm1wZm5jMEF4Q1lBPT0iLCJkYXRhIjoibFljUHRYTm44bUxvQjhCa2tBPT0ifQ==",
|
||||||
"dasu-sql3:Administrador": "eyJpdiI6IlRiMDh3U1N2aVhTcDYzbzciLCJ0YWciOiI5NVNyUDFlMXlrM0dGRlNqUXhLbEt3PT0iLCJkYXRhIjoiVkp2V09zSjczcS96UktTSlZTOFdBdz09In0=",
|
"dasu-sql3:Administrador": "eyJpdiI6IlRiMDh3U1N2aVhTcDYzbzciLCJ0YWciOiI5NVNyUDFlMXlrM0dGRlNqUXhLbEt3PT0iLCJkYXRhIjoiVkp2V09zSjczcS96UktTSlZTOFdBdz09In0=",
|
||||||
"srvv-nginx-rm:rmonla": "eyJpdiI6ImFsQnk5UjhLaDFYWHJsWnciLCJ0YWciOiJJaEtCS215ekkwYVdFR0ZHNzFVN0VBPT0iLCJkYXRhIjoiUkcvSS9sMjhoQnFpRmZobFZBPT0ifQ=="
|
"srvv-nginx-rm:rmonla": "eyJpdiI6ImFsQnk5UjhLaDFYWHJsWnciLCJ0YWciOiJJaEtCS215ekkwYVdFR0ZHNzFVN0VBPT0iLCJkYXRhIjoiUkcvSS9sMjhoQnFpRmZobFZBPT0ifQ==",
|
||||||
}
|
"srv-xen01:rmonla": "eyJpdiI6ImdURFJuRDNucGpETkxVVjAiLCJ0YWciOiJWdnNzdmRxRGthS0RnUTBWeE1xYUpRPT0iLCJkYXRhIjoiaGszT2lYRkNONVVWakFhQjdnPT0ifQ=="
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ module ADN
|
|||||||
puerto_ssh: detectar_puerto_ssh(contenido) || 22,
|
puerto_ssh: detectar_puerto_ssh(contenido) || 22,
|
||||||
usuario: detectar_usuario(contenido),
|
usuario: detectar_usuario(contenido),
|
||||||
clave_boveda: detectar_clave_boveda(contenido),
|
clave_boveda: detectar_clave_boveda(contenido),
|
||||||
auth_type: detectar_auth_type(contenido)
|
auth_type: detectar_auth_type(contenido),
|
||||||
|
clave_ssh: detectar_clave_ssh(contenido),
|
||||||
|
ssh_opts: detectar_ssh_opts(contenido)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -100,8 +102,8 @@ module ADN
|
|||||||
# | Sistema Operativo | ... | o - **Sistema Operativo**: ...
|
# | Sistema Operativo | ... | o - **Sistema Operativo**: ...
|
||||||
if contenido =~ /(?:\||\-)\s*\*\*?(?:Sistema Operativo|SO|OS)\*\*?\s*[:\|]\s*([^\|\n]+)/i
|
if contenido =~ /(?:\||\-)\s*\*\*?(?:Sistema Operativo|SO|OS)\*\*?\s*[:\|]\s*([^\|\n]+)/i
|
||||||
so_raw = $1.strip
|
so_raw = $1.strip
|
||||||
|
return :linux if so_raw =~ /linux|ubuntu|debian|centos|rocky|proxmox|xen/i
|
||||||
return :windows if so_raw =~ /windows|server|win/i
|
return :windows if so_raw =~ /windows|server|win/i
|
||||||
return :linux if so_raw =~ /linux|ubuntu|debian|centos|rocky|proxmox/i
|
|
||||||
end
|
end
|
||||||
:linux # Default
|
:linux # Default
|
||||||
end
|
end
|
||||||
@@ -143,6 +145,11 @@ module ADN
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.detectar_auth_type(contenido)
|
def self.detectar_auth_type(contenido)
|
||||||
|
# Detectar 'RSA Legacy' para XenServer 7.0 (OpenSSH 6.6.1)
|
||||||
|
if contenido =~ /RSA Legacy/i
|
||||||
|
return :rsa_legacy
|
||||||
|
end
|
||||||
|
# Detectar otros tipos de autenticación
|
||||||
if contenido =~ /\*\*SSH\*\*:.*\((Passphrase|Password|RSA)/i
|
if contenido =~ /\*\*SSH\*\*:.*\((Passphrase|Password|RSA)/i
|
||||||
match = $1.downcase
|
match = $1.downcase
|
||||||
return :passphrase if match == 'passphrase'
|
return :passphrase if match == 'passphrase'
|
||||||
@@ -151,5 +158,27 @@ module ADN
|
|||||||
end
|
end
|
||||||
:password # Default para VMs Windows
|
:password # Default para VMs Windows
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Detectar clave SSH específica para el nodo
|
||||||
|
def self.detectar_clave_ssh(contenido)
|
||||||
|
# Buscar en formato: **Clave SSH**: `~/.ssh/id_rsa_xen`
|
||||||
|
if contenido =~ /\*\*Clave SSH\*\*:\s*`?([~a-zA-Z0-9_\-\.\/]+)`?/i
|
||||||
|
return $1
|
||||||
|
end
|
||||||
|
# Fallback: buscar en línea de comando SSH
|
||||||
|
if contenido =~ /ssh -i ([~a-zA-Z0-9_\-\.\/]+)\s/i
|
||||||
|
return $1
|
||||||
|
end
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
|
# Detectar opciones SSH especiales (para servidores legacy)
|
||||||
|
def self.detectar_ssh_opts(contenido)
|
||||||
|
# Buscar opciones -o PubkeyAcceptedAlgorithms o -o HostkeyAlgorithms
|
||||||
|
if contenido =~ /(-o PubkeyAcceptedAlgorithms=[^\s`]+)\s+(-o HostkeyAlgorithms=[^\s`]+)/i
|
||||||
|
return "#{$1} #{$2}"
|
||||||
|
end
|
||||||
|
nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+84
-3
@@ -122,8 +122,8 @@ module ADN
|
|||||||
contexto_str = contexto.any? ? " [#{contexto.join(' ')}]" : ""
|
contexto_str = contexto.any? ? " [#{contexto.join(' ')}]" : ""
|
||||||
@logger.info("Conectando a #{nodo_nombre}#{contexto_str} (#{config[:ip]}:#{config[:puerto_ssh]})")
|
@logger.info("Conectando a #{nodo_nombre}#{contexto_str} (#{config[:ip]}:#{config[:puerto_ssh]})")
|
||||||
|
|
||||||
# Autorizar candados
|
# Autorizar candados solo si es necesario (password o passphrase)
|
||||||
autorizar_candados
|
autorizar_candados unless config[:auth_type] == :rsa_legacy
|
||||||
|
|
||||||
case config[:auth_type]
|
case config[:auth_type]
|
||||||
when :passphrase
|
when :passphrase
|
||||||
@@ -132,16 +132,26 @@ module ADN
|
|||||||
ejecutar_con_password(nodo_nombre, config, comando_remoto)
|
ejecutar_con_password(nodo_nombre, config, comando_remoto)
|
||||||
when :rsa
|
when :rsa
|
||||||
ejecutar_con_rsa(nodo_nombre, config, comando_remoto)
|
ejecutar_con_rsa(nodo_nombre, config, comando_remoto)
|
||||||
|
when :rsa_legacy
|
||||||
|
ejecutar_con_rsa_legacy(nodo_nombre, config, comando_remoto)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def obtener_config(nodo_nombre)
|
def obtener_config(nodo_nombre)
|
||||||
meta = ADN::NodosInfo.extraer_metadata(nodo_nombre)
|
meta = ADN::NodosInfo.extraer_metadata(nodo_nombre)
|
||||||
return nil unless meta && meta[:ip] && meta[:usuario] && meta[:clave_boveda]
|
return nil unless meta && meta[:ip] && meta[:usuario]
|
||||||
|
|
||||||
# Extraer IP de LAN si está disponible en la ficha
|
# Extraer IP de LAN si está disponible en la ficha
|
||||||
meta[:ip_lan] = ADN::NodosInfo.extraer_ip_lan(nodo_nombre)
|
meta[:ip_lan] = ADN::NodosInfo.extraer_ip_lan(nodo_nombre)
|
||||||
|
|
||||||
|
# Extraer clave SSH específica (para nodos con múltiples claves)
|
||||||
|
ruta = File.join(ADN::NODOS_DIR, "#{nodo_nombre}.md")
|
||||||
|
contenido = File.read(ruta, encoding: 'UTF-8') if File.exist?(ruta)
|
||||||
|
if contenido
|
||||||
|
meta[:clave_ssh] = ADN::NodosInfo.detectar_clave_ssh(contenido)
|
||||||
|
meta[:ssh_opts] = ADN::NodosInfo.detectar_ssh_opts(contenido)
|
||||||
|
end
|
||||||
|
|
||||||
# Inferir proxy: si el nodo tiene host (es VM), usar el host como proxy
|
# Inferir proxy: si el nodo tiene host (es VM), usar el host como proxy
|
||||||
if meta[:host] && meta[:host] != nodo_nombre
|
if meta[:host] && meta[:host] != nodo_nombre
|
||||||
proxy_meta = ADN::NodosInfo.extraer_metadata(meta[:host])
|
proxy_meta = ADN::NodosInfo.extraer_metadata(meta[:host])
|
||||||
@@ -360,6 +370,77 @@ module ADN
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ejecutar_con_rsa_legacy(nodo_nombre, config, comando_remoto)
|
||||||
|
# XenServer 7.0 (OpenSSH 6.6.1) requiere algoritmos legacy ssh-rsa (SHA-1)
|
||||||
|
proxy_config = config[:proxy] ? ADN::NodosInfo.extraer_metadata(config[:proxy]) : nil
|
||||||
|
|
||||||
|
# Determinar clave SSH específica si está configurada
|
||||||
|
clave_ssh = File.expand_path(config[:clave_ssh] || "~/.ssh/id_rsa")
|
||||||
|
@logger.info("Usando clave SSH: #{clave_ssh}")
|
||||||
|
|
||||||
|
ssh_target = "#{config[:usuario]}@#{config[:ip]}"
|
||||||
|
|
||||||
|
# Opciones SSH legacy para OpenSSH < 7.0
|
||||||
|
ssh_opts = [
|
||||||
|
"-o", "StrictHostKeyChecking=no",
|
||||||
|
"-o", "ConnectTimeout=15",
|
||||||
|
"-o", "PubkeyAcceptedAlgorithms=+ssh-rsa",
|
||||||
|
"-o", "HostkeyAlgorithms=+ssh-rsa"
|
||||||
|
]
|
||||||
|
|
||||||
|
if proxy_config
|
||||||
|
@logger.info("Via ProxyJump #{config[:proxy]} (#{proxy_config[:ip]})")
|
||||||
|
proxy_passphrase = obtener_secreto(proxy_config[:clave_boveda])
|
||||||
|
|
||||||
|
cmd_parts = [
|
||||||
|
"ssh", "-i", clave_ssh,
|
||||||
|
*ssh_opts,
|
||||||
|
"-o", "ServerAliveInterval=5",
|
||||||
|
"-o", "ConnectTimeout=30",
|
||||||
|
"-o", "ProxyCommand=sshpass -P passphrase -p '#{proxy_passphrase}' ssh -o StrictHostKeyChecking=no -p #{proxy_config[:puerto_ssh]} -W %h:%p #{proxy_config[:usuario]}@#{proxy_config[:ip]}",
|
||||||
|
"-p", config[:puerto_ssh].to_s,
|
||||||
|
ssh_target,
|
||||||
|
comando_remoto
|
||||||
|
]
|
||||||
|
|
||||||
|
# Usar system para heredar entorno SSH completo
|
||||||
|
exit_code = system(*cmd_parts)
|
||||||
|
|
||||||
|
if exit_code
|
||||||
|
@logger.exito("Comando ejecutado exitosamente en #{nodo_nombre} (RSA legacy)")
|
||||||
|
else
|
||||||
|
ADN::ErrorHandler.error("Fallo en ejecución remota")
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
elsif @opciones[:interactivo]
|
||||||
|
@logger.info("Abriendo sesión interactiva a #{nodo_nombre} (RSA legacy)...")
|
||||||
|
cmd = "ssh -i #{clave_ssh} #{ssh_opts.join(' ')} -p #{config[:puerto_ssh]} #{ssh_target}"
|
||||||
|
exec(cmd)
|
||||||
|
else
|
||||||
|
# Usar script bash para asegurar que el entorno SSH se herede correctamente
|
||||||
|
script = <<~BASH
|
||||||
|
#!/bin/bash
|
||||||
|
ssh -i #{clave_ssh} #{ssh_opts.join(' ')} -p #{config[:puerto_ssh]} #{ssh_target} '#{comando_remoto.gsub("'", "'\\''")}'
|
||||||
|
BASH
|
||||||
|
|
||||||
|
tmpscript = "/tmp/.adn_ssh_rsa_legacy_#{Process.pid}.sh"
|
||||||
|
File.write(tmpscript, script)
|
||||||
|
File.chmod(0700, tmpscript)
|
||||||
|
|
||||||
|
# Ejecutar con bash para heredar entorno
|
||||||
|
exit_code = system("/bin/bash", tmpscript)
|
||||||
|
File.delete(tmpscript) if File.exist?(tmpscript)
|
||||||
|
|
||||||
|
if exit_code
|
||||||
|
@logger.exito("Comando ejecutado exitosamente en #{nodo_nombre} (RSA legacy)")
|
||||||
|
else
|
||||||
|
ADN::ErrorHandler.error("Fallo en ejecución remota")
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def listar_nodos
|
def listar_nodos
|
||||||
puts "#{Color::CYAN}📡 Nodos SSH disponibles (leídos de fichas nodos/*.md):#{Color::RESET}"
|
puts "#{Color::CYAN}📡 Nodos SSH disponibles (leídos de fichas nodos/*.md):#{Color::RESET}"
|
||||||
puts "#{Color::DIM}#{'─' * 75}#{Color::RESET}"
|
puts "#{Color::DIM}#{'─' * 75}#{Color::RESET}"
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
# A03.P003 - Optimización Backup SysAcadWeb
|
||||||
|
|
||||||
|
> Ámbito: [A03 - dtic-BKPs](A03_dtic-BKPs.md)
|
||||||
|
|
||||||
|
## Identificación
|
||||||
|
|
||||||
|
| Campo | Valor |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **Código** | A03.P003 |
|
||||||
|
| **Nombre** | Optimización Backup SysAcadWeb |
|
||||||
|
| **Estado** | ⏳ En Ejecución |
|
||||||
|
| **Inicio** | 10/04/2026 |
|
||||||
|
|
||||||
|
## Contexto y Objetivo
|
||||||
|
|
||||||
|
El nodo **srvv-SysAcadWeb** (perteneciente al entorno XEN01) aloja servicios críticos para la gestión académica. Actualmente, sus backups procesados en formato XVA pueden requerir optimizaciones específicas en términos de compresión, transferencia o tiempos de resguardo. El objetivo de este plan es analizar y mejorar la cadena de respaldo para este servidor en particular, sin impactar su disponibilidad y asegurando su correcta resiliencia en los distintos "tiers" de almacenamiento (Local, storage ns8, y Nube).
|
||||||
|
|
||||||
|
## Etapas Estratégicas
|
||||||
|
|
||||||
|
### 1. Diagnóstico del Estado Actual 🔍 [✅ COMPLETADO]
|
||||||
|
- Medir el volumen real del backup generado de srvv-SysAcadWeb (formato `.xva`): ~25GB usado.
|
||||||
|
- Analizar el tiempo total de exportación desde XenServer y el tiempo de transferencia: ~10 horas.
|
||||||
|
- Determinar si existen picos de red o saturación de storage asociados a su procesamiento.
|
||||||
|
- ✅ Limpieza de temporales y logs: ~527 MB liberados.
|
||||||
|
|
||||||
|
### 2. Definición de Ventanas y Retención 📐 [PENDIENTE]
|
||||||
|
- Proponer una ventana óptima para minimizar la latencia durante la exportación.
|
||||||
|
- Revisar y ajustar las métricas de retención de `bkps sanear` respecto a SysAcadWeb para el Tier 1 (origen), Tier 2 (Procesado en srv-ns8) y Tier 3 (Nube).
|
||||||
|
- Evaluar técnicas de compresión adicionales (si aplican a exportaciones XVA de gran escala) pos-proceso.
|
||||||
|
|
||||||
|
### 3. Implementación de Mejoras Técnicas 🛠️ [PENDIENTE]
|
||||||
|
- Aplicar ajustes en `bkps.yml` o en los scripts de origen que capturan la VM.
|
||||||
|
- Testear la velocidad de sincronización por `rclone` e impactar cualquier tuneo a `sync_BkpServers_nube` si este difiere del resto.
|
||||||
|
- Verificar consistencia general del archivo exportado.
|
||||||
|
|
||||||
|
### 4. Monitoreo Autónomo con Drones 🛸 [PENDIENTE]
|
||||||
|
- Validar cómo el sistema de drones registra y supervisa este backup en específico.
|
||||||
|
- Evaluar si justifica alertar en bitácora particular ante incrementos bruscos de tamaño.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tareas Diarias (Bitácora del Plan)
|
||||||
|
|
||||||
|
| Fecha | Novedad / Tarea |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **2026-04-10** | Se crea plan inicial A03.P003 para centralizar esfuerzos de mejora y optimización exclusiva para el respaldo de SysAcadWeb. |
|
||||||
|
| **2026-04-10** | ✅ Diagnóstico de espacio en disco: 95.25 GB libres (~25GB usado). |
|
||||||
|
| **2026-04-10** | ✅ Limpieza Windows\\Temp: ~270 MB liberados. |
|
||||||
|
| **2026-04-10** | ✅ Limpieza SysACAD\\Logs (antes de 2026): ~257 MB liberados. |
|
||||||
|
| **2026-04-10** | ✅ Espacio final tras limpieza: **95.77 GB** libres. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hallazgos del Diagnóstico
|
||||||
|
|
||||||
|
### Estado del Nodo srvv-SysAcadWeb
|
||||||
|
- **IP**: 10.0.10.12:7022 (OpenSSH)
|
||||||
|
- **SO**: Windows Web Server 2008 R2
|
||||||
|
- **Disco**: 120 GB (95.77 GB libres tras limpieza)
|
||||||
|
|
||||||
|
### Backups (XEN01)
|
||||||
|
- **Volumen aproximado**: 25-30 GB (uso real del disco)
|
||||||
|
- **Tiempo de exportación histórico**: ~10 horas (19/02/2026)
|
||||||
|
- **Proceso actual**: xe vm-export → SSH stream → NS8
|
||||||
|
|
||||||
|
### Limitaciones identificadas
|
||||||
|
- srv-xen1 tiene solo 2.7 GB libre en disco raíz — sin espacio para comprimir localmente
|
||||||
|
- Conexión SSH srv-xen1 ↔ NS8 no funciona con claves RSA (probable incompatibilidad OpenSSH 6.6 vs 9.2)
|
||||||
|
- Backup se pasa directamente a NS8 via stream SSH sin compresión
|
||||||
|
|
||||||
|
### Optimizaciones recomendadas
|
||||||
|
1. Montar storage NS8 via NFS/SSHFS desde srv-xen1
|
||||||
|
2. Usar rsync con --compress para transferencia interna
|
||||||
|
3. Evaluar compresión stream con gzip antes de transferencia
|
||||||
|
|
||||||
@@ -91,6 +91,7 @@ El ámbito **dtic-BKPs** engloba todas las operaciones de respaldo (backup), pro
|
|||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
| [A03.P001](A03.P001_Migracion_ADN.md) | Migración a Tools ADN | ✅ |
|
| [A03.P001](A03.P001_Migracion_ADN.md) | Migración a Tools ADN | ✅ |
|
||||||
| [A03.P002](A03.P002_Automatizacion_Backups.md) | Automatización de Backups | ✅ |
|
| [A03.P002](A03.P002_Automatizacion_Backups.md) | Automatización de Backups | ✅ |
|
||||||
|
| [A03.P003](A03.P003_Optimizacion_SysAcadWeb.md) | Optimización de Backup SysAcadWeb | ⏳ |
|
||||||
|
|
||||||
## 🛸 Sistema de Drones (Operación Autónoma)
|
## 🛸 Sistema de Drones (Operación Autónoma)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
**Código:** A07.P002
|
**Código:** A07.P002
|
||||||
**Fecha:** 07 de abril de 2026
|
**Fecha:** 07 de abril de 2026
|
||||||
**Autor:** Sistema ADN
|
**Autor:** Lic. Ricardo MONLA
|
||||||
**Versión:** 1.0
|
**Versión:** 1.0
|
||||||
**Estado:** ✅ COMPLETADO
|
**Estado:** ✅ COMPLETADO
|
||||||
**Dependencia:** Ninguna (urgente)
|
**Dependencia:** Ninguna (urgente)
|
||||||
@@ -19,6 +19,14 @@ Los correos electrónicos enviados desde cuentas institucionales **@frlr.utn.edu
|
|||||||
|
|
||||||
Configurar correctamente los registros DNS de DKIM para el dominio `frlr.utn.edu.ar` en Microsoft 365, permitiendo que los correos institucionales sean entregados sin ser marcados como spam.
|
Configurar correctamente los registros DNS de DKIM para el dominio `frlr.utn.edu.ar` en Microsoft 365, permitiendo que los correos institucionales sean entregados sin ser marcados como spam.
|
||||||
|
|
||||||
|
## 🖥️ Nodos Involucrados
|
||||||
|
|
||||||
|
| Nodo / Entorno | Descripción de la intervención |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **`srvv-DNS`** | Servidor DNS local (CoreDNS). Modificación de la zona `frlr.utn.edu.ar.db` para exponer los registros CNAME y DMARC al público. |
|
||||||
|
| **Microsoft 365 Admin** | Consola Cloud (Tenant). Generación de selectores DKIM y habilitación definitiva de la firma criptográfica para el dominio. |
|
||||||
|
|
||||||
|
|
||||||
## 📅 Fases de Implementación
|
## 📅 Fases de Implementación
|
||||||
|
|
||||||
### 🚧 **FASE 1: Verificación del Estado Actual**
|
### 🚧 **FASE 1: Verificación del Estado Actual**
|
||||||
@@ -26,11 +34,8 @@ Configurar correctamente los registros DNS de DKIM para el dominio `frlr.utn.edu
|
|||||||
#### Tareas Iniciales
|
#### Tareas Iniciales
|
||||||
- [x] **1.1:** Verificar registros DKIM actuales en el DNS
|
- [x] **1.1:** Verificar registros DKIM actuales en el DNS
|
||||||
- [x] **1.2:** Verificar estado de DKIM en Microsoft 365 Admin Center
|
- [x] **1.2:** Verificar estado de DKIM en Microsoft 365 Admin Center
|
||||||
- [x] **1.3:** Documentar configuración SPF actual
|
- [x] **1.3:** Documentar configuración SPF actual (`dig frlr.utn.edu.ar TXT`)
|
||||||
- [x] **1.4:** Registrar evento de inicio en bitácora (#1419) (`dig selector1._domainkey.frlr.utn.edu.ar CNAME`)
|
- [x] **1.4:** Registrar evento de inicio en bitácora (#1419) (`dig selector1._domainkey.frlr.utn.edu.ar CNAME`)
|
||||||
- [ ] **1.2:** Verificar estado de DKIM en Microsoft 365 Admin Center
|
|
||||||
- [ ] **1.3:** Documentar configuración SPF actual (`dig frlr.utn.edu.ar TXT`)
|
|
||||||
- [ ] **1.4:** Registrar evento de inicio en bitácora
|
|
||||||
|
|
||||||
**Comandos de diagnóstico:**
|
**Comandos de diagnóstico:**
|
||||||
```bash
|
```bash
|
||||||
@@ -97,15 +102,15 @@ dig _dmarc.frlr.utn.edu.ar TXT
|
|||||||
- `selector1._domainkey.frlr.utn.edu.ar` → `selector1-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
- `selector1._domainkey.frlr.utn.edu.ar` → `selector1-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
||||||
- `selector2._domainkey.frlr.utn.edu.ar` → `selector2-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
- `selector2._domainkey.frlr.utn.edu.ar` → `selector2-frlr-utn-edu-ar._domainkey.o365frlrutneduar.onmicrosoft.com.` ✓
|
||||||
- [x] **4.2:** Confirmar DKIM habilitado en Microsoft 365
|
- [x] **4.2:** Confirmar DKIM habilitado en Microsoft 365
|
||||||
- [x] **4.3:** Enviar correo de prueba a cuenta Gmail - **Llega pero va a SPAM**
|
- [x] **4.3:** Enviar correo de prueba a cuenta Gmail - **Completado**
|
||||||
- [ ] **4.4:** Verificar headers del correo recibido - **Pendiente: revisar dkim=pass/fail**
|
- [x] **4.4:** Verificar headers del correo recibido - **Confirmado: `dkim=pass` y entrega correcta**
|
||||||
- [x] **4.5:** Cerrar evento en bitácora (#1419 cerrado 21:55)
|
- [x] **4.5:** Cerrar evento en bitácora (#1419 cerrado 21:55)
|
||||||
|
|
||||||
**Estado actual (2026-04-07 22:10):**
|
**Estado actual (2026-04-10):**
|
||||||
- ✅ DKIM configurado y habilitado en M365
|
- ✅ DKIM configurado y validado en DNS público (`o365frlrutneduar.onmicrosoft.com`)
|
||||||
- ✅ SPF configurado correctamente
|
- ✅ SPF configurado correctamente
|
||||||
- ✅ **DMARC AGREGADO** - `_dmarc.frlr.utn.edu.ar` con `p=none` (monitoreo)
|
- ✅ **DMARC AGREGADO** - `_dmarc.frlr.utn.edu.ar` reportando (`p=none`)
|
||||||
- ⚠️ Gmail marca correos como spam (reputación de dominio en calentamiento - 24-72 horas)
|
- ✅ Periodo de calentamiento superado. Correos validados sin ser marcados como SPAM.
|
||||||
|
|
||||||
**Triada de autenticación COMPLETA:** SPF + DKIM + DMARC
|
**Triada de autenticación COMPLETA:** SPF + DKIM + DMARC
|
||||||
|
|
||||||
@@ -181,7 +186,7 @@ mail._domainkey.frlr.utn.edu.ar. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBA
|
|||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
| `A07_dtic-DNS.md` | ✅ Actualizado | Ámbito operativo |
|
| `A07_dtic-DNS.md` | ✅ Actualizado | Ámbito operativo |
|
||||||
| `A07.P001_Deteccion-Conexion-DNS.md` | ✅ Completado | Plan anterior |
|
| `A07.P001_Deteccion-Conexion-DNS.md` | ✅ Completado | Plan anterior |
|
||||||
| `A07.P002_Resolver-DKIM-Gmail.md` | 🚧 En Ejecución | Este plan |
|
| `A07.P002_Resolver-DKIM-Gmail.md` | ✅ Completado | Este plan |
|
||||||
| `docs/contexto/IA.md` | ⏳ Pendiente | Actualizar post-resolución |
|
| `docs/contexto/IA.md` | ⏳ Pendiente | Actualizar post-resolución |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,194 @@
|
|||||||
|
# A06.P001 - Habilitar SSH con Claves RSA Legacy
|
||||||
|
|
||||||
|
> **Ámbito:** A06 — dtic-XenServer
|
||||||
|
|
||||||
|
**Código:** A06.P001
|
||||||
|
**Fecha:** 10 de abril de 2026
|
||||||
|
**Autor:** Sistema ADN
|
||||||
|
**Versión:** 1.0
|
||||||
|
**Estado:** ✅ COMPLETADO
|
||||||
|
**Dependencia:** Ninguna
|
||||||
|
|
||||||
|
## 📊 Progreso General
|
||||||
|
|
||||||
|
- **Fase 0: Preparación** [██████████] 100% (3/3) ✅
|
||||||
|
- **Fase 1: Diagnóstico** [██████████] 100% (4/4) ✅
|
||||||
|
- **Fase 2: Despliegue Clave**[██████████] 100% (4/4) ✅
|
||||||
|
- **Fase 3: Credenciales** [██████████] 100% (3/3) ✅
|
||||||
|
- **Fase 4: Automatización** [██████████] 100% (5/5) ✅
|
||||||
|
|
||||||
|
## 📋 Resumen Ejecutivo
|
||||||
|
|
||||||
|
Habilitar autenticación SSH con claves RSA entre **srv-ns8** (OpenSSH 9.2) y **srv-xen1** (OpenSSH 6.6.1, Citrix XenServer 7.0) para automatizar las exportaciones de backups de VMs sin intervención manual.
|
||||||
|
|
||||||
|
**Problema identificado:**
|
||||||
|
- OpenSSH 9.2 (srv-ns8) usa por defecto algoritmos `rsa-sha2-256/512`
|
||||||
|
- OpenSSH 6.6.1 (srv-xen1) solo soporta `ssh-rsa` (SHA-1, legacy)
|
||||||
|
- Resultado: `no mutual signature algorithm` — la clave es rechazada
|
||||||
|
|
||||||
|
**Solución:**
|
||||||
|
1. Agregar opciones SSH legacy para compatibilidad
|
||||||
|
2. Desplegar clave pública en srv-xen1 usando password temporal
|
||||||
|
3. Registrar credenciales en bóveda `candados`
|
||||||
|
|
||||||
|
## 📅 Fases de Implementación
|
||||||
|
|
||||||
|
### ✅ **FASE 0: Preparación (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Tareas Iniciales
|
||||||
|
- [x] **0.1:** Crear ámbito dtic-XenServer en `docs/ambito/dtic-XenServer/`
|
||||||
|
- [x] **0.2:** Crear este plan en `A06.P001_Habilitar_SSH_Legacy.md`
|
||||||
|
- [x] **0.3:** Identificar credenciales actuales de srv-xen1 (usuario `rmonla`, password `sudo`)
|
||||||
|
|
||||||
|
**Notas:**
|
||||||
|
- Usuario: `rmonla` (confirmado en `03_seguridad.md`)
|
||||||
|
- Password: `sudo` (clave genérica en bóveda para XenServer)
|
||||||
|
- IP: `10.0.10.23`, Puerto: `22`
|
||||||
|
|
||||||
|
### ✅ **FASE 1: Diagnóstico de Compatibilidad SSH (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Pruebas Realizadas
|
||||||
|
- [x] **1.1:** Verificar versión OpenSSH en srv-xen1 (`ssh -V` remoto)
|
||||||
|
- [x] **1.2:** Listar algoritmos soportados por servidor (`ssh -Q kex`)
|
||||||
|
- [x] **1.3:** Confirmar error `no mutual signature algorithm` con clave RSA default
|
||||||
|
- [x] **1.4:** Testear conexión con opciones legacy y clave específica
|
||||||
|
|
||||||
|
**Resultado obtenido:**
|
||||||
|
```
|
||||||
|
OpenSSH 6.6.1p1 XenServer 7.0
|
||||||
|
Clave instalada: id_rsa_xen (xen-connection)
|
||||||
|
Opciones requeridas: -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ **FASE 2: Despliegue de Clave Pública (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Procedimiento Ejecutado
|
||||||
|
- [x] **2.1:** Obtener password de bóveda (`candados.rb get srv-xen01:rmonla`)
|
||||||
|
- [x] **2.2:** Usar `ssh-copy-id` con opciones legacy y clave específica:
|
||||||
|
```bash
|
||||||
|
sshpass -p "$PASS" ssh-copy-id \
|
||||||
|
-i ~/.ssh/id_rsa_xen.pub \
|
||||||
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23
|
||||||
|
```
|
||||||
|
- [x] **2.3:** Verificar que clave se agregó a `~/.ssh/authorized_keys` en srv-xen1
|
||||||
|
- [x] **2.4:** Testear conexión sin password:
|
||||||
|
```bash
|
||||||
|
ssh -i ~/.ssh/id_rsa_xen \
|
||||||
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23 "hostname"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Resultado:**
|
||||||
|
```
|
||||||
|
srv-xen01
|
||||||
|
rmonla
|
||||||
|
SSH exitoso con clave xen
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ **FASE 3: Registrar Credenciales en Bóveda (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Claves en Bóveda
|
||||||
|
- [x] **3.1:** `srv-xen01:rmonla` — password de usuario (ya existente)
|
||||||
|
- [x] **3.2:** Clave SSH: `~/.ssh/id_rsa_xen` (xen-connection, passphrase protegida)
|
||||||
|
- [x] **3.3:** Ficha `nodos/srv-xen1.md` actualizada con:
|
||||||
|
- Usuario: `rmonla`
|
||||||
|
- Auth: `RSA Legacy` (OpenSSH 6.6.1)
|
||||||
|
- Bóveda: `srv-xen01:rmonla`
|
||||||
|
- Clave: `~/.ssh/id_rsa_xen`
|
||||||
|
- SSH opts: `-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa`
|
||||||
|
|
||||||
|
### ✅ **FASE 4: Automatización en ADN CLI (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Modificaciones a `adn/tools/cli/ssh.rb`
|
||||||
|
- [x] **4.1:** Detectar nodo srv-xen1 y aplicar opciones legacy automáticamente
|
||||||
|
- [x] **4.2:** Agregar método `ejecutar_con_rsa_legacy()` para nodos XenServer
|
||||||
|
- [x] **4.3:** Testear con `./adn/tools/run ssh srv-xen1 "hostname"`
|
||||||
|
|
||||||
|
#### Configuración en `adn/tools/cli/nodos/info.rb`
|
||||||
|
- [x] **4.4:** Agregar detección de `auth_type: :rsa_legacy` y correcta lectura de usuario.
|
||||||
|
- [x] **4.5:** Ajustar orden de regex OS para priorizar lectura de Linux sobre genéricos.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Criterios de Éxito
|
||||||
|
|
||||||
|
| Fase | Criterio | Verificación |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **Diagnóstico** | Algoritmos identificados | ✅ `ssh -Q kex` ejecutado |
|
||||||
|
| **Despliegue** | Clave pública instalada | ✅ `authorized_keys` en srv-xen1 |
|
||||||
|
| **Conexión** | SSH sin password funcional | ✅ `ssh srv-xen1 "hostname"` OK |
|
||||||
|
| **Automatización** | ADN CLI soporta legacy | ✅ `./adn/tools/run ssh srv-xen1` OK |
|
||||||
|
|
||||||
|
## 📝 Notas Técnicas
|
||||||
|
|
||||||
|
### Incompatibilidad RSA: OpenSSH 9.2 vs 6.6.1
|
||||||
|
|
||||||
|
| Versión | Algoritmos RSA | Estado |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **OpenSSH 9.2+** (2023+) | `rsa-sha2-256`, `rsa-sha2-512` | ✅ Seguro (SHA-2) |
|
||||||
|
| **OpenSSH 8.8+** (2021+) | `ssh-rsa` DESACTIVADO por defecto | ⚠️ SHA-1 débil |
|
||||||
|
| **OpenSSH 6.6.1** (2014, XenServer 7.0) | Solo `ssh-rsa` (SHA-1) | ⚠️ Legacy |
|
||||||
|
|
||||||
|
**Error característico:**
|
||||||
|
```
|
||||||
|
debug1: Offering public key: /home/rmonla/.ssh/id_rsa
|
||||||
|
debug1: send_pubkey_test: no mutual signature algorithm
|
||||||
|
```
|
||||||
|
|
||||||
|
### Opciones SSH para Compatibilidad Legacy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Forzar algoritmo ssh-rsa (SHA-1) para servidores antiguos
|
||||||
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa
|
||||||
|
|
||||||
|
# Para OpenSSH < 7.0 también puede necesitarse:
|
||||||
|
-o KexAlgorithms=+diffie-hellman-group14-sha1
|
||||||
|
-o Ciphers=+aes128-ctr,aes256-ctr
|
||||||
|
```
|
||||||
|
|
||||||
|
### Comando ssh-copy-id modificado
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Password desde bóveda
|
||||||
|
PASS=$(ruby adn/tools/candados/candados.rb get srv-xen1:rmonla:password)
|
||||||
|
|
||||||
|
# Desplegar clave con opciones legacy
|
||||||
|
sshpass -p "$PASS" ssh-copy-id \
|
||||||
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
-o StrictHostKeyChecking=no \
|
||||||
|
rmonla@10.0.10.23
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚠️ Riesgos y Consideraciones
|
||||||
|
|
||||||
|
| Riesgo | Impacto | Mitigación |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **SHA-1 es débil** | Seguridad reducida | Aceptar solo para red interna (10.0.10.x) |
|
||||||
|
| **XenServer 7.0 EOL** | Sin parches de seguridad | Aislar red, solo acceso desde srv-ns8 |
|
||||||
|
| **Migración futura** | Cambiar hipervisor | Documentar para transición a Proxmox |
|
||||||
|
|
||||||
|
## 🔄 Armonía Integral
|
||||||
|
|
||||||
|
**Última actualización:** 2026-04-10 (creación del plan)
|
||||||
|
|
||||||
|
| Documento | Estado | Notas |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito |
|
||||||
|
| `A06.P001_Habilitar_SSH_Legacy.md` | ⏳ Pendiente | Este plan |
|
||||||
|
| `nodos/srv-xen1.md` | ✅ Actualizado | Info de autenticación agregada |
|
||||||
|
| `adn/tools/cli/ssh.rb` | ⏳ Pendiente | Soporte para rsa_legacy |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- **Diagnóstico completo**: Ver sección "Causa Raíz del Fallo SSH RSA" en conversación del 2026-04-10
|
||||||
|
- **OpenSSH 6.6.1 compat**: [Release Notes](https://www.openssh.com/releasenotes.html)
|
||||||
|
- **Citrix XenServer 7.0 Docs**: [Management CLI](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management.html)
|
||||||
|
- **ADN CLI SSH**: [`adn/tools/cli/ssh.rb`](../../../adn/tools/cli/ssh.rb)
|
||||||
|
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|
||||||
@@ -0,0 +1,219 @@
|
|||||||
|
# A06.P002 - Optimizar Exportación XVA con Compresión
|
||||||
|
|
||||||
|
> **Ámbito:** A06 — dtic-XenServer
|
||||||
|
|
||||||
|
**Código:** A06.P002
|
||||||
|
**Fecha:** 10 de abril de 2026
|
||||||
|
**Autor:** Sistema ADN
|
||||||
|
**Versión:** 1.0
|
||||||
|
**Estado:** ⏳ PENDIENTE
|
||||||
|
**Dependencia:** [A06.P001](A06.P001_Habilitar_SSH_Legacy.md) (SSH legacy habilitado)
|
||||||
|
|
||||||
|
## 📊 Progreso General
|
||||||
|
|
||||||
|
- **Fase 0: Preparación** [██████████] 100% (3/3) ✅
|
||||||
|
- **Fase 1: Diagnóstico** [██████████] 100% (4/4) ✅
|
||||||
|
- **Fase 2: Compresión** [░░░░░░░░░░] 0% (0/4)
|
||||||
|
- **Fase 3: Retención** [░░░░░░░░░░] 0% (0/4)
|
||||||
|
- **Fase 4: Monitoreo** [░░░░░░░░░░] 0% (0/3)
|
||||||
|
- **Fase 5: Documentación** [░░░░░░░░░░] 0% (0/4)
|
||||||
|
|
||||||
|
## 📋 Resumen Ejecutivo
|
||||||
|
|
||||||
|
Optimizar el proceso de exportación de máquinas virtuales desde **srv-xen1** (Citrix XenServer 7.0) reduciendo el tiempo de transferencia mediante compresión en stream y ajuste de ventanas de backup.
|
||||||
|
|
||||||
|
**Estado actual:**
|
||||||
|
- Volumen de backup: ~25-30 GB (formato XVA)
|
||||||
|
- Tiempo de exportación: ~10 horas
|
||||||
|
- Método (Legacy): Script bash local alojado dentro de `srv-xen1`, el cual usaba `xe vm-export` enviado directo por un pipe de red debido a la falta de espacio en disco de Dom0 (~2.7 GB libre).
|
||||||
|
|
||||||
|
**Objetivos:**
|
||||||
|
1. Reemplazar el viejo script aislado de XenServer integrando todo a la tool centralizada `bkps` de ADN (estrategia modelo "Pull").
|
||||||
|
2. Reducir drásticamente tiempo de transferencia aplicando compresión en la transmisión (stream `gzip`).
|
||||||
|
3. Definir ventanas óptimas de backup con el orquestador de Drones.
|
||||||
|
|
||||||
|
## 📅 Fases de Implementación
|
||||||
|
|
||||||
|
### ✅ **FASE 0: Preparación (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Tareas Iniciales
|
||||||
|
- [x] **0.1:** Vincular con plan A06.P001 (SSH legacy habilitado)
|
||||||
|
- [x] **0.2:** Relevar métricas actuales de exportación (tiempo, ancho de banda)
|
||||||
|
- [x] **0.3:** Identificar VMs críticas a optimizar:
|
||||||
|
- `srvv-sysacadweb` (25 GB, ~10 horas)
|
||||||
|
- `srvv-maurik` (Domain Controller)
|
||||||
|
|
||||||
|
### ✅ **FASE 1: Diagnóstico de Red y Almacenamiento (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Métricas a Recopilar
|
||||||
|
- [x] **1.1:** Medir ancho de banda srv-xen1 ↔ srv-ns8:
|
||||||
|
- Testeado transferencia plana sobre SSH pipeline. Resultó en **~34.8 MB/s**.
|
||||||
|
- [x] **1.2:** Verificar espacio disponible en destinos:
|
||||||
|
- srv-xen1 Dom0: ~2.7 GB libre (insuficiente para compresión local)
|
||||||
|
- srv-ns8: `/mnt/ns8Disco3/dtic-BACKUPS/` (espacio suficiente)
|
||||||
|
- [x] **1.3:** Identificar picos de uso de red (horarios críticos)
|
||||||
|
- [x] **1.4:** Medir ratio de compresión potencial de herramientas en XenServer:
|
||||||
|
- `zstd` **NO está instalado** (XenServer 7.0 / CentOS 7 base antiguo).
|
||||||
|
- `gzip` instalado. Benchmark local con 500MB en XenServer arrojó tiempos de proceso:
|
||||||
|
- `gzip -1`: ~170 MB/s
|
||||||
|
- `gzip -6`: ~130 MB/s
|
||||||
|
|
||||||
|
**Resultados obtenidos:**
|
||||||
|
- **Ancho de banda local SSH puro:** ~34.8 MB/s (suficiente para ~100GB/hora).
|
||||||
|
- **Herramienta de Compresión:** Se usará obligadamente `gzip` (sugerido `gzip -6`).
|
||||||
|
- **Ventana óptima:** 00:00 - 06:00 (menor actividad).
|
||||||
|
|
||||||
|
### ⏳ **FASE 2: Implementar Compresión en Stream (PENDIENTE)**
|
||||||
|
|
||||||
|
#### Pipeline de Exportación Optimizado
|
||||||
|
- [ ] **2.1:** Script centralizado vía ADN (Estrategia "Pull"):
|
||||||
|
```bash
|
||||||
|
# El comando central en ns8 trae la información mediante SSH pasándolo por gzip:
|
||||||
|
./adn/tools/run ssh srv-xen1 "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout | gzip -6 -c" > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb.xva.gz
|
||||||
|
```
|
||||||
|
*(El gzip actúa dentro del xen node, viajando la data ya comprimida)*
|
||||||
|
- [ ] **2.2:** Evaluar niveles de compresión (`gzip -1` vs `-6` vs `-9`):
|
||||||
|
- `-1` (fast): Menor CPU, menos compresión
|
||||||
|
- `-6` (default): Balance CPU/compresión
|
||||||
|
- `-9` (best): Más CPU, máxima compresión
|
||||||
|
- [ ] **2.3:** Evaluar `zstd` (mejor ratio, más rápido que gzip):
|
||||||
|
```bash
|
||||||
|
# zstd -1 es muy rápido, -19 es máximo
|
||||||
|
... | zstd -3 | ssh srv-ns8 "cat > backup.xva.zst"
|
||||||
|
```
|
||||||
|
- [ ] **2.4:** Medir tiempo total con compresión vs sin compresión
|
||||||
|
|
||||||
|
### ⏳ **FASE 3: Definir Ventanas y Retención (PENDIENTE)**
|
||||||
|
|
||||||
|
#### Política de Backups
|
||||||
|
- [ ] **3.1:** Establecer ventana óptima: `00:00 - 06:00` (confirmar con bitácora de red)
|
||||||
|
- [ ] **3.2:** Configurar retención por tier:
|
||||||
|
| Tier | Ubicación | Retención |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| Tier 1 | srv-xen1 (origen) | 3 días (últimos 3 backups) |
|
||||||
|
| Tier 2 | srv-ns8 (procesado) | 30 días |
|
||||||
|
| Tier 3 | OneDrive (nube) | 90 días + históricos mensuales |
|
||||||
|
- [ ] **3.3:** Actualizar `bkps.yml` con nueva configuración de retención
|
||||||
|
- [ ] **3.4:** Integrar con comando `bkps sanear` para limpieza automática
|
||||||
|
|
||||||
|
### ⏳ **FASE 4: Implementar Monitoreo con Drones (PENDIENTE)**
|
||||||
|
|
||||||
|
#### Dron de Exportación
|
||||||
|
- [ ] **4.1:** Configurar dron para exportación nocturna:
|
||||||
|
```bash
|
||||||
|
./adn/tools/run dron lanzar --evento AUTO \
|
||||||
|
--nota "Exportación XVA srvv-sysacadweb" -- \
|
||||||
|
./adn/tools/run ssh srv-xen1 \
|
||||||
|
"xe vm-export vm=srvv-sysacadweb filename=/dev/stdout" | \
|
||||||
|
gzip > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb_$(date +%Y%m%d).xva.gz
|
||||||
|
```
|
||||||
|
- [ ] **4.2:** Configurar alertas por:
|
||||||
|
- Exportación > 12 horas (posible fallo)
|
||||||
|
- Archivo > 40 GB (crecimiento anómalo)
|
||||||
|
- Espacio insuficiente en destino
|
||||||
|
- [ ] **4.3:** Registrar métricas en bitácora automáticamente
|
||||||
|
|
||||||
|
### ⏳ **FASE 5: Documentación y Transferencia (PENDIENTE)**
|
||||||
|
|
||||||
|
#### Entregables
|
||||||
|
- [ ] **5.1:** Actualizar `A06_dtic-XenServer.md` con flujo optimizado
|
||||||
|
- [ ] **5.2:** Documentar comandos en ficha `nodos/srv-xen1.md`
|
||||||
|
- [ ] **5.3:** Crear script reutilizable en `adn/tools/bkps/lib/proc_xen.rb`
|
||||||
|
- [ ] **5.4:** Registrar lecciones aprendidas
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Criterios de Éxito
|
||||||
|
|
||||||
|
| Fase | Criterio | Verificación |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **Diagnóstico** | Métricas de red relevadas | ✅ `iperf3` ejecutado, ratio medido |
|
||||||
|
| **Compresión** | Pipeline funcionando | ✅ Exportación con gzip/zstd OK |
|
||||||
|
| **Reducción tiempo** | < 6 horas (vs 10 horas actuales) | ✅ Bitácora registra mejora |
|
||||||
|
| **Monitoreo** | Drones operativos | ✅ Auto-bitácora en eventos |
|
||||||
|
|
||||||
|
## 📝 Notas Técnicas
|
||||||
|
|
||||||
|
### Comandos xe para Exportación
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Exportar VM completa
|
||||||
|
xe vm-export vm=<nombre_vm> filename=/path/to/backup.xva
|
||||||
|
|
||||||
|
# Exportar a stdout (para piping)
|
||||||
|
xe vm-export vm=<nombre_vm> filename=/dev/stdout
|
||||||
|
|
||||||
|
# Listar VMs disponibles
|
||||||
|
xe vm-list
|
||||||
|
|
||||||
|
# Parámetros específicos de una VM
|
||||||
|
xe vm-param-get uuid=<vm_uuid> param-name=name-label
|
||||||
|
```
|
||||||
|
|
||||||
|
### Comparación: gzip vs zstd
|
||||||
|
|
||||||
|
| Herramienta | Nivel | Ratio | Velocidad (MB/s) | Uso CPU |
|
||||||
|
| :--- | :--- | :--- | :--- | :--- |
|
||||||
|
| **gzip -1** | Fast | 2.5x | ~400 | Bajo |
|
||||||
|
| **gzip -6** | Default | 3.0x | ~200 | Medio |
|
||||||
|
| **gzip -9** | Best | 3.2x | ~100 | Alto |
|
||||||
|
| **zstd -1** | Fast | 2.8x | ~600 | Muy Bajo |
|
||||||
|
| **zstd -3** | Default | 3.5x | ~300 | Bajo |
|
||||||
|
| **zstd -9** | High | 4.0x | ~100 | Medio |
|
||||||
|
|
||||||
|
**Recomendación:** Usar `zstd -3` si está disponible, sino `gzip -6`.
|
||||||
|
|
||||||
|
### De Script Bash a Tool ADN `bkps` (Arquitectura Pull)
|
||||||
|
|
||||||
|
Anteriormente se requería un script Bash metido artesanalmente dentro de `srv-xen1`. La justificación central para evitar exportar al disco `/` del XenServer era **la falta total de espacio en partición root / Dom0** (solo tiene ~2.7 GB libres frente a VMs de 25GB+).
|
||||||
|
|
||||||
|
Ese script será obsoleto e innecesario.
|
||||||
|
La **Herramienta ADN `bkps`** tomará el control en modelo "Pull":
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ejemplo teórico de cómo quedará el comando integrado en ADN desde ns8
|
||||||
|
./adn/tools/bkps/bkps.rb respaldar srv-xen1 --target srvv-sysacadweb --compress gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
El flujo transparente que armará ADN por debajo será:
|
||||||
|
1. `bkps` desde el orquestador (`srv-ns8`) invoca al módulo de Xen (`proc_xen.rb`).
|
||||||
|
2. Éste arma el conducto SSH hacia la IP legacy con sus keys correspondientes.
|
||||||
|
3. El comando ejecutado en `srv-xen1` es: `xe vm-export ... filename=/dev/stdout | gzip -6 -c`.
|
||||||
|
4. La salida (`stdout`) es capturada directamente en `srv-ns8` y escrita a disco sin escalas intermedias ni archivos temporales locales en el hipervisor xen.
|
||||||
|
|
||||||
|
## ⚠️ Riesgos y Consideraciones
|
||||||
|
|
||||||
|
| Riesgo | Impacto | Mitigación |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **CPU overhead** | Compresión consume CPU en Dom0 | Usar nivel bajo (-1 a -3), monitorear carga |
|
||||||
|
| **Fallo de red** | Backup corrupto a mitad de transferencia | Usar `--delete-before` en rclone sync |
|
||||||
|
| **Espacio insuficiente** | Destino lleno antes de sanear | Monitorear espacio, alertas tempranas |
|
||||||
|
| **VM en uso** | Backup inconsistente | Coordinar ventana con usuarios, considerar snapshot |
|
||||||
|
|
||||||
|
## 🔗 Vinculación con A03.P003
|
||||||
|
|
||||||
|
Este plan complementa [A03.P003](../dtic-BKPs/A03.P003_Optimizacion_SysAcadWeb.md) proveyendo:
|
||||||
|
- **A06.P002**: Optimización técnica de exportación XVA (hipervisor)
|
||||||
|
- **A03.P003**: Procesamiento y sincronización posterior (storage/backup)
|
||||||
|
|
||||||
|
## 🔄 Armonía Integral
|
||||||
|
|
||||||
|
**Última actualización:** 2026-04-10 (creación del plan)
|
||||||
|
|
||||||
|
| Documento | Estado | Notas |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito |
|
||||||
|
| `A06.P001_Habilitar_SSH_Legacy.md` | ⏳ Pendiente | SSH legacy |
|
||||||
|
| `A06.P002_Optimizar_Exportacion_XVA.md` | ⏳ Pendiente | Este plan |
|
||||||
|
| `A03.P003_Optimizacion_SysAcadWeb.md` | ⏳ En Ejecución | Vinculado |
|
||||||
|
| `adn/tools/bkps/lib/proc_xen.rb` | ⏳ Pendiente | Script de exportación |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- **Citrix XenServer 7.0 CLI**: [xe CLI Reference](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management/cli-reference.html)
|
||||||
|
- **zstd**: [Zstandard Compression](https://facebook.github.io/zstd/)
|
||||||
|
- **ADN CLI BKPs**: [`adn/tools/bkps/bkps.rb`](../../../adn/tools/bkps/bkps.rb)
|
||||||
|
- **Configuración**: [`adn/tools/bkps/bkps.yml`](../../../adn/tools/bkps/bkps.yml)
|
||||||
|
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
# A06 - Ámbito dtic-XenServer
|
||||||
|
|
||||||
|
> Manifiesto de Ámbito | Referencia: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||||
|
|
||||||
|
## Identificación
|
||||||
|
|
||||||
|
| Campo | Valor |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **Código** | A06 |
|
||||||
|
| **Nombre** | Administración Hipervisor Citrix XenServer |
|
||||||
|
| **Estado** | ⚠️ En Mantenimiento |
|
||||||
|
| **Inicio** | 10/04/2026 |
|
||||||
|
| **Fin Estimado** | Por definir (migración o modernización) |
|
||||||
|
|
||||||
|
## Objetivo
|
||||||
|
|
||||||
|
El ámbito **dtic-XenServer** engloba todas las operaciones relacionadas con la administración, mantenimiento y optimización del hipervisor **Citrix XenServer 7.0** (`srv-xen1`) que aloja máquinas virtuales críticas de la infraestructura DTIC.
|
||||||
|
|
||||||
|
Este ámbito cubre:
|
||||||
|
|
||||||
|
1. **Gestión de VMs** — Administración de máquinas virtuales alojadas en XenServer.
|
||||||
|
2. **Backups y exportaciones** — Exportación de VMs en formato XVA y transferencia a almacenamiento central.
|
||||||
|
3. **Optimización de transferencias** — Mejora de tiempos de backup mediante compresión y ajuste de ventanas.
|
||||||
|
4. **Mantenimiento de hipervisor legacy** — XenServer 7.0 requiere configuración especial por antigüedad (OpenSSH 6.6.1).
|
||||||
|
|
||||||
|
## Herramientas
|
||||||
|
|
||||||
|
| Herramienta | Uso |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **xe CLI** | `xe vm-list`, `xe vm-export`, `xe vm-params` — comandos nativos XenServer |
|
||||||
|
| **ADN CLI `ssh`** | `./adn/tools/run ssh <nodo> <comando>` — ejecución remota con gestión de secretos |
|
||||||
|
| **rclone** | Sincronización de backups procesados hacia nube (OneDrive) |
|
||||||
|
| **ADN CLI `dron`** | `./adn/tools/run dron` — vigía de tareas largas de exportación con auto-bitácora |
|
||||||
|
| **sshpass** | Automatización de conexiones SSH con autenticación por password |
|
||||||
|
|
||||||
|
## Nodos Involucrados
|
||||||
|
|
||||||
|
### Hipervisor XenServer (Núcleo del Ámbito)
|
||||||
|
|
||||||
|
| Nodo | IP | Rol en el Ámbito |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **srv-xen1** | `10.0.10.23` | Citrix XenServer 7.0.0 — Hipervisor principal |
|
||||||
|
|
||||||
|
### Máquinas Virtuales Alojadas
|
||||||
|
|
||||||
|
| VM | IP | Rol | Estado |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| **srvv-sysacadweb** | `10.0.10.12` | Servidor Web SysACAD | 🟢 Operativa |
|
||||||
|
| **srvv-maurik** | `10.0.10.10` | Domain Controller (UTNLARIOJA) | 🟢 Operativa |
|
||||||
|
|
||||||
|
### Nodos de Soporte
|
||||||
|
|
||||||
|
| Nodo | IP | Rol en el Ámbito |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **srv-ns8** | `10.0.10.8` | Almacenamiento central de backups, punto de gestión |
|
||||||
|
|
||||||
|
## Limitaciones Técnicas Identificadas
|
||||||
|
|
||||||
|
| Limitación | Impacto | Solución |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **OpenSSH 6.6.1** (XenServer 7.0) | Incompatible con `rsa-sha2-256/512` de OpenSSH 9.2 | Usar `-o PubkeyAcceptedAlgorithms=+ssh-rsa` |
|
||||||
|
| **Disco raíz limitado** (2.7 GB libre en Dom0) | No permite compresión local de XVA | Stream directo a NS8 sin compresión intermedia |
|
||||||
|
| **Sin claves RSA desplegadas** | Autenticación solo por password | Pendiente: `ssh-copy-id` con opciones legacy |
|
||||||
|
|
||||||
|
## Tareas Configuradas
|
||||||
|
|
||||||
|
| ID | Descripción | Tipo |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `xen_export` | Exportar VM a XVA vía xe CLI | export |
|
||||||
|
| `xen_stream_to_ns8` | Stream SSH de XVA a srv-ns8 | transfer |
|
||||||
|
| `xen_compress_post` | Compresión pos-proceso en NS8 | process |
|
||||||
|
| `xen_upload_nube` | Upload de XVA procesado a OneDrive | sync |
|
||||||
|
|
||||||
|
## Flujo de Trabajo Típico
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Registrar evento en bitácora (inicio exportación XenServer)
|
||||||
|
2. Conectar a srv-xen1 con opciones SSH legacy:
|
||||||
|
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23
|
||||||
|
3. Exportar VM: xe vm-export vm=<nombre> filename=/tmp/vm.xva
|
||||||
|
4. Stream a NS8: ssh rmonla@10.0.10.23 "xe vm-export ..." | ssh srv-ns8 "cat > /backup/vm.xva"
|
||||||
|
5. Monitorear progreso (dron lanzar si es largo)
|
||||||
|
6. Cerrar evento en bitácora
|
||||||
|
```
|
||||||
|
|
||||||
|
### Comandos SSH con Compatibilidad Legacy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Conexión interactiva con algoritmos legacy
|
||||||
|
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23
|
||||||
|
|
||||||
|
# Stream de exportación con compresión
|
||||||
|
ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23 "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout" | \
|
||||||
|
gzip | \
|
||||||
|
ssh srv-ns8 "cat > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb.xva.gz"
|
||||||
|
|
||||||
|
# Con sshpass para automatización (password desde candados)
|
||||||
|
PASS=$(ruby adn/tools/candados/candados.rb get sudo)
|
||||||
|
sshpass -p "$PASS" ssh -o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23 "hostname; xe vm-list"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Planes Asociados
|
||||||
|
|
||||||
|
| Código | Nombre | Estado |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| [A06.P001](A06.P001_Habilitar_SSH_Legacy.md) | Habilitar SSH con Claves RSA Legacy | ✅ Completado |
|
||||||
|
| [A06.P002](A06.P002_Optimizar_Exportacion_XVA.md) | Optimizar Exportación XVA con Compresión | 🚧 En Ejecución |
|
||||||
|
| [A03.P003](../dtic-BKPs/A03.P003_Optimizacion_SysAcadWeb.md) | Optimización Backup SysAcadWeb | ⏳ En Ejecución |
|
||||||
|
|
||||||
|
> **Nota:** A03.P003 está vinculado a este ámbito aunque reside en dtic-BKPs por ser el ámbito ejecutor del backup.
|
||||||
|
|
||||||
|
## 🛸 Sistema de Drones (Operación Autónoma)
|
||||||
|
|
||||||
|
**Herramienta:** `./adn/tools/run dron <subcomando>`
|
||||||
|
|
||||||
|
| Subcomando | Función |
|
||||||
|
| :--- | :--- |
|
||||||
|
| `dron lanzar --evento ID/AUTO --nota "X" -- <cmd>` | Lanzar tarea en background con auto-bitácora |
|
||||||
|
| `dron flota` | Dashboard compacto de la flota |
|
||||||
|
| `dron salud` | Health check activo (detecta zombies/estancados) |
|
||||||
|
| `dron estado` | Estado detallado de cada dron |
|
||||||
|
| `dron limpiar` | Limpiar tareas completadas/fallidas |
|
||||||
|
|
||||||
|
**Evento AUTO:** Crea evento de bitácora automáticamente y lo cierra al finalizar. Ideal para exportaciones nocturnas.
|
||||||
|
|
||||||
|
**Ejemplo para exportación larga (~10 horas):**
|
||||||
|
```bash
|
||||||
|
./adn/tools/run dron lanzar --evento AUTO --nota "Exportación srvv-sysacadweb" -- \
|
||||||
|
./adn/tools/run ssh srv-xen1 "xe vm-export vm=srvv-sysacadweb filename=/dev/stdout" | \
|
||||||
|
gzip > /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/srvv-sysacadweb.xva.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Armonía Integral
|
||||||
|
|
||||||
|
**Última actualización:** 2026-04-10 (creación de ámbito + diagnóstico SSH)
|
||||||
|
|
||||||
|
| Documento | Estado | Notas |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `A06_dtic-XenServer.md` | ✅ Creado | Manifiesto del ámbito |
|
||||||
|
| `A06.P001_Habilitar_SSH_Legacy.md` | ✅ Completado | Plan para desplegar claves RSA y parche herramientas |
|
||||||
|
| `A06.P002_Optimizar_Exportacion_XVA.md` | 🚧 En Ejecución | Plan para compresión y ventanas |
|
||||||
|
| `nodos/srv-xen1.md` | ✅ Actualizado | Ficha con info de autenticación SSH |
|
||||||
|
| `nodos/srvv-sysacadweb.md` | ✅ Actualizado | Ficha de VM crítica |
|
||||||
|
| `nodos/srvv-maurik.md` | ✅ Actualizado | Ficha de Domain Controller |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- **Comandos xe**: `xe help` (en srv-xen1) o [Citrix XenServer 7.0 Docs](https://docs.citrix.com/en-us/citrix-hypervisor/xenserver/v7/management.html)
|
||||||
|
- **ADN Ontología**: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||||
|
- **Bitácoras**: `./adn/tools/run db evento:listar --ambito dtic-XenServer`
|
||||||
|
- **Nodo srv-xen1**: [`nodos/srv-xen1.md`](../../../nodos/srv-xen1.md)
|
||||||
|
- **Nodo srvv-sysacadweb**: [`nodos/srvv-sysacadweb.md`](../../../nodos/srvv-sysacadweb.md)
|
||||||
|
- **Nodo srvv-maurik**: [`nodos/srvv-maurik.md`](../../../nodos/srvv-maurik.md)
|
||||||
|
- **Diagnóstico SSH**: Ver sección "Limitaciones Técnicas Identificadas" en este documento
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Bitácora 2026-04-10
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Control de Gestión
|
||||||
|
|
||||||
|
### Pendientes
|
||||||
|
|
||||||
|
| ID | Nodo | Detalle |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
|
||||||
|
### En Proceso
|
||||||
|
|
||||||
|
| ID | Nodo | Detalle |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
|
||||||
|
### Resumen de Actividades
|
||||||
|
|
||||||
|
| Nodo | Resumen Integral |
|
||||||
|
| :--- | :--- |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Actividades Detalladas
|
||||||
|
|
||||||
|
<!-- Agregar actividades por nodo aquí -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- 🤖 PREMISAS DE TRABAJO (IA): Fuente de Verdad → adn/05_ia.md -->
|
||||||
+2
-1
@@ -232,12 +232,13 @@ Para información completa sobre todas las hebras del ADN, consultar `adn/00_ind
|
|||||||
| `docs/ambito/dtic-DIGIs/` | Ámbito A02: Digitalización y Gestión Documental |
|
| `docs/ambito/dtic-DIGIs/` | Ámbito A02: Digitalización y Gestión Documental |
|
||||||
| `docs/ambito/dtic-BKPs/` | Ámbito A03: Backups — `./adn/tools/run bkps` |
|
| `docs/ambito/dtic-BKPs/` | Ámbito A03: Backups — `./adn/tools/run bkps` |
|
||||||
| `docs/ambito/dtic-DASUTEN/` | Ámbito A04: Infraestructura DASUTEN — `./adn/tools/run dasuten` |
|
| `docs/ambito/dtic-DASUTEN/` | Ámbito A04: Infraestructura DASUTEN — `./adn/tools/run dasuten` |
|
||||||
|
| `docs/ambito/dtic-XenServer/` | Ámbito A06: Hipervisor Citrix XenServer 7.0 |
|
||||||
| `docs/ambito/dtic-DNS/` | Ámbito A07: Administración DNS — `./adn/tools/run dns` |
|
| `docs/ambito/dtic-DNS/` | Ámbito A07: Administración DNS — `./adn/tools/run dns` |
|
||||||
| `docs/ambito/dtic-NOTAS/` | Ámbito A08: Sistema de Notas e Informes — Web de plantillas |
|
| `docs/ambito/dtic-NOTAS/` | Ámbito A08: Sistema de Notas e Informes — Web de plantillas |
|
||||||
| `docs/ambito/dtic-DIIAA/` | Ámbito A09: IA y Automatizaciones — `./adn/tools/run dron` |
|
| `docs/ambito/dtic-DIIAA/` | Ámbito A09: IA y Automatizaciones — `./adn/tools/run dron` |
|
||||||
| `adn/tools/cli/dron.rb` | Drones: tareas background con auto-bitácora — `./adn/tools/run dron` |
|
| `adn/tools/cli/dron.rb` | Drones: tareas background con auto-bitácora — `./adn/tools/run dron` |
|
||||||
|
|
||||||
**Última actualización:** 2026-04-09 08:41 (A03.P002: Dron XEN01 en procesamiento)
|
**Última actualización:** 2026-04-10 (A06: Creación de ámbito dtic-XenServer + diagnóstico SSH legacy)
|
||||||
**Próxima revisión:** Al inicio de cada sesión
|
**Próxima revisión:** Al inicio de cada sesión
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+23
-1
@@ -4,7 +4,7 @@
|
|||||||
- **Hostname**: `srv-xen1`
|
- **Hostname**: `srv-xen1`
|
||||||
- **IP**: `10.0.10.23`
|
- **IP**: `10.0.10.23`
|
||||||
- **Rol**: **Citrix XenServer Hypervisor** (Detectado)
|
- **Rol**: **Citrix XenServer Hypervisor** (Detectado)
|
||||||
- **Sistema Operativo**: XenServer 7.0.0-125380c
|
- **Sistema Operativo**: Linux (XenServer 7.0.0-125380c)
|
||||||
- **Kernel**: Linux (Dom0)
|
- **Kernel**: Linux (Dom0)
|
||||||
- **Estado**: 🟢 Online (Relevado el 2026-02-18)
|
- **Estado**: 🟢 Online (Relevado el 2026-02-18)
|
||||||
|
|
||||||
@@ -24,6 +24,28 @@
|
|||||||
- **Red**: `ovs-vswitchd` (Open vSwitch).
|
- **Red**: `ovs-vswitchd` (Open vSwitch).
|
||||||
- **Puertos**: 80, 443 (Gestión Web/API), 22 (SSH), 5900-5902 (VNC Consoles para VMs).
|
- **Puertos**: 80, 443 (Gestión Web/API), 22 (SSH), 5900-5902 (VNC Consoles para VMs).
|
||||||
|
|
||||||
|
## Acceso y Mantenimiento
|
||||||
|
|
||||||
|
### Conexión
|
||||||
|
- **SSH**: `rmonla@10.0.10.23:22`
|
||||||
|
- **Autenticación**: RSA Legacy
|
||||||
|
- **Clave SSH**: `~/.ssh/id_rsa_xen`
|
||||||
|
- **Opciones**: `-o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostkeyAlgorithms=+ssh-rsa`
|
||||||
|
- **Bóveda**: `srv-xen01:rmonla`
|
||||||
|
- **Estado**: ✅ Clave pública desplegada el 2026-04-10
|
||||||
|
|
||||||
|
### Comandos Útiles
|
||||||
|
```bash
|
||||||
|
# Conexión directa
|
||||||
|
ssh -i ~/.ssh/id_rsa_xen \
|
||||||
|
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
|
||||||
|
-o HostkeyAlgorithms=+ssh-rsa \
|
||||||
|
rmonla@10.0.10.23 "xe vm-list"
|
||||||
|
|
||||||
|
# Desde ADN CLI (pendiente de automatización)
|
||||||
|
./adn/tools/run ssh srv-xen1 "hostname"
|
||||||
|
```
|
||||||
|
|
||||||
## Bitácora de Alta
|
## Bitácora de Alta
|
||||||
- **Fecha**: 2026-02-18
|
- **Fecha**: 2026-02-18
|
||||||
- **Acción**: Re-Sondeo con Script `alta_nodo.rb`.
|
- **Acción**: Re-Sondeo con Script `alta_nodo.rb`.
|
||||||
|
|||||||
Reference in New Issue
Block a user