feat(A07_dtic-DNS): Ámbito DNS operativo + CLI para gestión de CoreDNS
- Crear ámbito A07_dtic-DNS con manifiesto y plan A07.P001 - Implementar CLI dns.rb con 7 subcomandos (status, zona, registros, buscar, backup, reload, corefile) - Detectar servidor srvv-dns: CoreDNS en Docker (10.0.10.2, VM 112 en srv-pmox1) - Documentar zona frlr.utn.edu.ar con 20+ registros (A, CNAME, MX, TXT, SRV) - Actualizar ficha nodos/srvv-dns.md con información técnica completa - Agregar script reparar.sh para ns8-apps (pendiente de ejecución) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
be3a78c50a
commit
a013811aa2
@@ -0,0 +1,285 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# DNS CLI — Gestión del servidor DNS (srvv-dns)
|
||||||
|
#
|
||||||
|
# Responsabilidad: Comandos para administración de CoreDNS
|
||||||
|
#
|
||||||
|
# Uso:
|
||||||
|
# ./adn/tools/run dns help # Ayuda
|
||||||
|
# ./adn/tools/run dns status # Estado del servidor
|
||||||
|
# ./adn/tools/run dns zona # Listar zona activa
|
||||||
|
# ./adn/tools/run dns registros # Listar todos los registros
|
||||||
|
# ./adn/tools/run dns buscar <nombre>
|
||||||
|
# ./adn/tools/run dns backup # Crear backup de zona
|
||||||
|
# ./adn/tools/run dns reload # Forzar reload de CoreDNS
|
||||||
|
|
||||||
|
require 'open3'
|
||||||
|
require 'time'
|
||||||
|
require_relative '../core/colores'
|
||||||
|
|
||||||
|
module ADN
|
||||||
|
class SubcomandoDNS
|
||||||
|
SSH_HOST = 'rmonla@10.0.10.2'
|
||||||
|
SSH_OPTS = '-o StrictHostKeyChecking=no -o ConnectTimeout=10'
|
||||||
|
ZONA_PATH = '/docker/coreDNS/zones/frlr.utn.edu.ar.db'
|
||||||
|
COREFILE_PATH = '/docker/coreDNS/Corefile'
|
||||||
|
ZONA_NAME = 'frlr.utn.edu.ar'
|
||||||
|
|
||||||
|
def initialize(args, logger)
|
||||||
|
@args = args
|
||||||
|
@logger = logger
|
||||||
|
end
|
||||||
|
|
||||||
|
def ejecutar
|
||||||
|
if @args.empty? || @args[0] == 'help'
|
||||||
|
mostrar_ayuda
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
comando = @args[0]
|
||||||
|
|
||||||
|
case comando
|
||||||
|
when 'status'
|
||||||
|
status
|
||||||
|
when 'zona'
|
||||||
|
zona
|
||||||
|
when 'registros'
|
||||||
|
registros
|
||||||
|
when 'buscar'
|
||||||
|
buscar(@args[1])
|
||||||
|
when 'backup'
|
||||||
|
backup
|
||||||
|
when 'reload'
|
||||||
|
reload
|
||||||
|
when 'corefile'
|
||||||
|
corefile
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}✗ Comando DNS desconocido: #{comando}#{Color::RESET}"
|
||||||
|
mostrar_ayuda
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def mostrar_ayuda
|
||||||
|
puts <<~HELP
|
||||||
|
#{Color::CYAN}🌐 DNS CLI — Gestión del servidor DNS (srvv-dns)#{Color::RESET}
|
||||||
|
|
||||||
|
#{Color::GREEN}Uso:#{Color::RESET} ./adn/tools/run dns <subcomando> [args]
|
||||||
|
|
||||||
|
#{Color::YELLOW}━━━ Comandos de Consulta ━━━#{Color::RESET}
|
||||||
|
#{Color::BOLD}status#{Color::RESET} Estado del servidor CoreDNS
|
||||||
|
#{Color::BOLD}zona#{Color::RESET} Información de la zona #{ZONA_NAME}
|
||||||
|
#{Color::BOLD}registros#{Color::RESET} Listar todos los registros DNS
|
||||||
|
#{Color::BOLD}buscar <nombre>#{Color::RESET} Buscar registros por nombre
|
||||||
|
|
||||||
|
#{Color::YELLOW}━━━ Comandos de Mantenimiento ━━━#{Color::RESET}
|
||||||
|
#{Color::BOLD}backup#{Color::RESET} Crear backup de la zona
|
||||||
|
#{Color::BOLD}reload#{Color::RESET} Forzar reload de CoreDNS
|
||||||
|
#{Color::BOLD}corefile#{Color::RESET} Mostrar configuración CoreDNS
|
||||||
|
|
||||||
|
#{Color::YELLOW}Ejemplos:#{Color::RESET}
|
||||||
|
#{Color::DIM}# Ver estado del servidor#{Color::RESET}
|
||||||
|
./adn/tools/run dns status
|
||||||
|
|
||||||
|
#{Color::DIM}# Listar todos los registros#{Color::RESET}
|
||||||
|
./adn/tools/run dns registros
|
||||||
|
|
||||||
|
#{Color::DIM}# Buscar registros de ns8#{Color::RESET}
|
||||||
|
./adn/tools/run dns buscar ns8
|
||||||
|
|
||||||
|
#{Color::DIM}# Crear backup antes de cambios#{Color::RESET}
|
||||||
|
./adn/tools/run dns backup
|
||||||
|
HELP
|
||||||
|
end
|
||||||
|
|
||||||
|
def status
|
||||||
|
puts "#{Color::CYAN}🌐 Estado del servidor DNS (srvv-dns)#{Color::RESET}\n\n"
|
||||||
|
|
||||||
|
# Verificar conectividad
|
||||||
|
print " Conectividad SSH... "
|
||||||
|
if ssh_exec_simple('true')
|
||||||
|
puts "#{Color::GREEN}✅ OK#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}❌ Fallido#{Color::RESET}"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
# Verificar contenedor CoreDNS
|
||||||
|
print " Contenedor CoreDNS... "
|
||||||
|
output = ssh_exec('docker ps --filter "name=coredns" --format "{{.Status}}"')
|
||||||
|
if output&.include?('Up')
|
||||||
|
puts "#{Color::GREEN}✅ Activo (#{output.strip})#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}❌ Inactivo#{Color::RESET}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Verificar puerto 53
|
||||||
|
print " Puerto 53... "
|
||||||
|
output = ssh_exec('ss -tuln | grep ":53" | head -1')
|
||||||
|
if output&.include?('53')
|
||||||
|
puts "#{Color::GREEN}✅ Escuchando#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}❌ Cerrado#{Color::RESET}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Verificar zona
|
||||||
|
print " Zona #{ZONA_NAME}... "
|
||||||
|
output = ssh_exec("test -f #{ZONA_PATH} && echo 'exists' || echo 'missing'")
|
||||||
|
if output&.include?('exists')
|
||||||
|
puts "#{Color::GREEN}✅ Existente#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}❌ No encontrada#{Color::RESET}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Serial de zona
|
||||||
|
print " Serial de zona... "
|
||||||
|
serial = obtener_serial
|
||||||
|
if serial
|
||||||
|
puts "#{Color::GREEN}#{serial}#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "#{Color::RED}❌ No se pudo leer#{Color::RESET}"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "\n #{Color::DIM}Última consulta: #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}#{Color::RESET}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def zona
|
||||||
|
puts "#{Color::CYAN}📋 Zona DNS: #{ZONA_NAME}#{Color::RESET}\n\n"
|
||||||
|
|
||||||
|
serial = obtener_serial
|
||||||
|
puts " SOA Serial: #{serial || 'N/A'}"
|
||||||
|
|
||||||
|
output = ssh_exec("cat #{ZONA_PATH}")
|
||||||
|
return unless output
|
||||||
|
|
||||||
|
# Contar registros por tipo
|
||||||
|
registros = { 'A' => 0, 'CNAME' => 0, 'MX' => 0, 'TXT' => 0, 'NS' => 0, 'SRV' => 0 }
|
||||||
|
output.each_line do |line|
|
||||||
|
next if line.start_with?('$', ';')
|
||||||
|
registros.each_key do |tipo|
|
||||||
|
registros[tipo] += 1 if line.include?(" IN #{tipo} ")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "\n Registros por tipo:"
|
||||||
|
registros.each do |tipo, count|
|
||||||
|
puts " #{tipo}: #{count}" if count > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
# Nameservers
|
||||||
|
puts "\n Nameservers:"
|
||||||
|
output.each_line do |line|
|
||||||
|
puts " #{line.strip}" if line.include?(' IN NS ')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def registros
|
||||||
|
output = ssh_exec("cat #{ZONA_PATH}")
|
||||||
|
return unless output
|
||||||
|
|
||||||
|
puts "#{Color::CYAN}📋 Registros de zona #{ZONA_NAME}#{Color::RESET}\n\n"
|
||||||
|
puts "```\n"
|
||||||
|
|
||||||
|
# Imprimir solo líneas de registros (no comentarios ni directivas)
|
||||||
|
output.each_line do |line|
|
||||||
|
line = line.strip
|
||||||
|
next if line.empty? || line.start_with?('$', ';', '(', ')')
|
||||||
|
puts line if line.include?(' IN ')
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "```"
|
||||||
|
end
|
||||||
|
|
||||||
|
def buscar(nombre)
|
||||||
|
return puts "#{Color::RED}✗ Falta nombre a buscar#{Color::RESET}" unless nombre
|
||||||
|
|
||||||
|
output = ssh_exec("cat #{ZONA_PATH}")
|
||||||
|
return unless output
|
||||||
|
|
||||||
|
puts "#{Color::CYAN}🔍 Buscando '#{nombre}' en #{ZONA_NAME}#{Color::RESET}\n\n"
|
||||||
|
|
||||||
|
encontrados = []
|
||||||
|
output.each_line do |line|
|
||||||
|
line = line.strip
|
||||||
|
next if line.empty? || line.start_with?('$', ';')
|
||||||
|
encontrados << line if line.include?(nombre)
|
||||||
|
end
|
||||||
|
|
||||||
|
if encontrados.empty?
|
||||||
|
puts " #{Color::RED}No se encontraron registros#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts "```\n"
|
||||||
|
encontrados.each { |l| puts l }
|
||||||
|
puts "```"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def backup
|
||||||
|
timestamp = Time.now.strftime('%y%m%d-%H%M')
|
||||||
|
backup_path = "/docker/coreDNS/zones/bkp_#{timestamp}_frlr.utn.edu.ar.db"
|
||||||
|
|
||||||
|
puts " Creando backup: #{File.basename(backup_path)}..."
|
||||||
|
|
||||||
|
output = ssh_exec("cp #{ZONA_PATH} #{backup_path} && ls -la #{backup_path}")
|
||||||
|
if output
|
||||||
|
puts " #{Color::GREEN}✅ Backup creado#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts " #{Color::RED}❌ Error al crear backup#{Color::RESET}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def reload
|
||||||
|
puts " Forzando reload de CoreDNS..."
|
||||||
|
|
||||||
|
output = ssh_exec("touch #{ZONA_PATH} && docker kill --signal=HUP coredns 2>/dev/null || echo 'reload manual'")
|
||||||
|
|
||||||
|
if output
|
||||||
|
puts " #{Color::GREEN}✅ Reload solicitado#{Color::RESET}"
|
||||||
|
puts " #{Color::DIM}CoreDNS recargará la zona en ~30s#{Color::RESET}"
|
||||||
|
else
|
||||||
|
puts " #{Color::RED}❌ Error al solicitar reload#{Color::RESET}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def corefile
|
||||||
|
puts "#{Color::CYAN}⚙️ Corefile de CoreDNS#{Color::RESET}\n\n"
|
||||||
|
puts "```\n"
|
||||||
|
output = ssh_exec("cat #{COREFILE_PATH}")
|
||||||
|
puts output if output
|
||||||
|
puts "```"
|
||||||
|
end
|
||||||
|
|
||||||
|
def ssh_exec(cmd)
|
||||||
|
full_cmd = "ssh #{SSH_OPTS} #{SSH_HOST} '#{cmd}'"
|
||||||
|
begin
|
||||||
|
stdout, stderr, status = Open3.capture3(full_cmd)
|
||||||
|
if status.success?
|
||||||
|
stdout.strip
|
||||||
|
else
|
||||||
|
$stderr.puts "#{Color::RED}SSH error: #{stderr.strip}#{Color::RESET}"
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
rescue => e
|
||||||
|
$stderr.puts "#{Color::RED}Error en SSH: #{e.message}#{Color::RESET}"
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def ssh_exec_simple(cmd)
|
||||||
|
full_cmd = "ssh #{SSH_OPTS} #{SSH_HOST} '#{cmd}'"
|
||||||
|
begin
|
||||||
|
_, _, status = Open3.capture3(full_cmd)
|
||||||
|
status.success?
|
||||||
|
rescue
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def obtener_serial
|
||||||
|
output = ssh_exec("grep -A5 'IN SOA' #{ZONA_PATH} | grep -oE '[0-9]{10}' | head -1")
|
||||||
|
output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -77,6 +77,7 @@ require_relative 'cli/msp'
|
|||||||
require_relative 'cli/wzombi'
|
require_relative 'cli/wzombi'
|
||||||
require_relative 'cli/dasuten'
|
require_relative 'cli/dasuten'
|
||||||
require_relative 'cli/digis'
|
require_relative 'cli/digis'
|
||||||
|
require_relative 'cli/dns'
|
||||||
require_relative 'bkps/bkps'
|
require_relative 'bkps/bkps'
|
||||||
require_relative 'cli/dron'
|
require_relative 'cli/dron'
|
||||||
require_relative 'proy/proy'
|
require_relative 'proy/proy'
|
||||||
@@ -165,6 +166,8 @@ class ADNCLI
|
|||||||
ADN::SubcomandoDron.new(args, @logger).ejecutar
|
ADN::SubcomandoDron.new(args, @logger).ejecutar
|
||||||
when 'digis'
|
when 'digis'
|
||||||
ADN::SubcomandoDigis.new(args, @logger).ejecutar
|
ADN::SubcomandoDigis.new(args, @logger).ejecutar
|
||||||
|
when 'dns'
|
||||||
|
ADN::SubcomandoDNS.new(args, @logger).ejecutar
|
||||||
else
|
else
|
||||||
@logger.error("Subcomando desconocido: #{subcomando}")
|
@logger.error("Subcomando desconocido: #{subcomando}")
|
||||||
puts "#{Color::RED}✗ Subcomando desconocido: '#{subcomando}'#{Color::RESET}"
|
puts "#{Color::RED}✗ Subcomando desconocido: '#{subcomando}'#{Color::RESET}"
|
||||||
|
|||||||
@@ -0,0 +1,121 @@
|
|||||||
|
# Plan: Detección y Conexión al Servidor DNS
|
||||||
|
|
||||||
|
> **Ámbito:** A07 — dtic-DNS
|
||||||
|
|
||||||
|
**Código:** A07.P001
|
||||||
|
**Fecha:** 07 de abril de 2026
|
||||||
|
**Autor:** Sistema ADN
|
||||||
|
**Versión:** 1.0
|
||||||
|
**Estado:** 🚧 EN EJECUCIÓN
|
||||||
|
**Dependencia:** Ninguna
|
||||||
|
|
||||||
|
## 📋 Resumen Ejecutivo
|
||||||
|
|
||||||
|
Establecer conexión y administración al servidor DNS **srvv-dns** (10.0.10.2, VM 112 en srv-pmox1), identificar su implementación (BIND en contenedor o servicio nativo), y habilitar un canal de gestión para operaciones de DNS.
|
||||||
|
|
||||||
|
**Estado conocido:**
|
||||||
|
- Nodo detectado: `srvv-dns` (10.0.10.2)
|
||||||
|
- Hardware: 4GB RAM, 10GB disco (61% usado)
|
||||||
|
- Servicio BIND/named: 🔴 Inactivo en Systemd (posible contenedor Docker/LXC)
|
||||||
|
|
||||||
|
## 📅 Fases de Implementación
|
||||||
|
|
||||||
|
### ✅ **FASE 0: Preparación (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Tareas Iniciales
|
||||||
|
- [x] **0.1:** Crear ámbito dtic-DNS en `docs/ambito/dtic-DNS/`
|
||||||
|
- [x] **0.2:** Crear este plan en `A07.P001_Deteccion-Conexion-DNS.md`
|
||||||
|
- [x] **0.3:** Identificar nodo srvv-dns (10.0.10.2, VM 112 en srv-pmox1)
|
||||||
|
|
||||||
|
### ✅ **FASE 1: Verificación del Servicio DNS (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Diagnóstico Realizado
|
||||||
|
- [x] **1.1:** Verificar conectividad a `srvv-dns` (ICMP OK, tiempo ~0.4ms)
|
||||||
|
- [x] **1.2:** Identificar implementación: **CoreDNS** en Docker (no BIND)
|
||||||
|
- [x] **1.3:** Verificar puerto 53 escuchando (53/tcp open, 53/udp abierto)
|
||||||
|
- [x] **1.4:** Consulta DNS funcional (`frlr.utn.edu.ar` → 190.114.205.20)
|
||||||
|
- [x] **1.5:** Actualizar ficha `nodos/srvv-dns.md` con estado real
|
||||||
|
|
||||||
|
**Hallazgos:**
|
||||||
|
```
|
||||||
|
- Contenedor: coredns (coredns/coredns:latest)
|
||||||
|
- Puertos: 0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp
|
||||||
|
- Uptime: 28+ horas
|
||||||
|
- Logs: Consultas activas (www.frlr.utn.edu.ar, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ **FASE 2: Conexión al Servidor DNS (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Canal Establecido
|
||||||
|
- [x] **2.1:** SSH funcional con clave cargada (`ssh rmonla@10.0.10.2`)
|
||||||
|
- [x] **2.2:** Método de gestión identificado: Archivos de zona en `/docker/coreDNS/zones/`
|
||||||
|
- [x] **2.3:** Corefile ubicado: `/docker/coreDNS/Corefile`
|
||||||
|
- [x] **2.4:** Zona activa: `frlr.utn.edu.ar.db` con 20+ registros
|
||||||
|
- [x] **2.5:** Registrar método de conexión en `nodos/srvv-dns.md`
|
||||||
|
|
||||||
|
### ✅ **FASE 3: Inventario de Zonas DNS (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Relevamiento Completado
|
||||||
|
- [x] **3.1:** Listar zonas DNS activas (frlr.utn.edu.ar)
|
||||||
|
- [x] **3.2:** Identificar registros críticos (20+ registros A, CNAME, MX, TXT, SRV)
|
||||||
|
- [x] **3.3:** Mapear nombres de host a IPs conocidas (documentado en `nodos/srvv-dns.md`)
|
||||||
|
- [x] **3.4:** Documentar estructura de zonas en `nodos/srvv-dns.md`
|
||||||
|
|
||||||
|
### ✅ **FASE 4: Automatización (COMPLETADA)**
|
||||||
|
|
||||||
|
#### Herramientas ADN Implementadas
|
||||||
|
- [x] **4.1:** `./adn/tools/run dns status` - Estado del servidor
|
||||||
|
- [x] **4.2:** `./adn/tools/run dns zona` - Información de zona
|
||||||
|
- [x] **4.3:** `./adn/tools/run dns registros` - Listar registros
|
||||||
|
- [x] **4.4:** `./adn/tools/run dns buscar <nombre>` - Buscar registros
|
||||||
|
- [x] **4.5:** `./adn/tools/run dns backup` - Crear backup
|
||||||
|
- [x] **4.6:** `./adn/tools/run dns reload` - Forzar reload
|
||||||
|
- [x] **4.7:** `./adn/tools/run dns corefile` - Ver configuración
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Criterios de Éxito
|
||||||
|
|
||||||
|
| Fase | Criterio | Verificación |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **Detección** | IP y método de acceso identificados | ✅ `nodos/srvv-dns.md` completo |
|
||||||
|
| **Conexión** | Acceso remoto funcional | ✅ SSH testeado (clave cargada) |
|
||||||
|
| **Inventario** | Lista de zonas documentada | ✅ Zona `frlr.utn.edu.ar` documentada |
|
||||||
|
| **Automatización** | CLI `dns.rb` operativo | ✅ `./adn/tools/run dns status` funcional |
|
||||||
|
|
||||||
|
## 📝 Notas Técnicas
|
||||||
|
|
||||||
|
### Puertos DNS Comunes
|
||||||
|
| Puerto | Protocolo | Uso |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| 53 | UDP/TCP | DNS estándar |
|
||||||
|
| 8053 | TCP | DNS alternativo (CoreDNS, etc.) |
|
||||||
|
| 5353 | UDP | mDNS (Bonjour/Avahi) |
|
||||||
|
| 8080/443 | TCP | APIs web (PowerDNS, etc.) |
|
||||||
|
|
||||||
|
### Implementaciones DNS Comunes
|
||||||
|
| Implementación | Puerto | Método de Gestión |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| BIND (named) | 53 | SSH + rndc / editar zone files |
|
||||||
|
| PowerDNS | 53 + 8081 | API REST |
|
||||||
|
| dnsmasq | 53 | SSH + editar `/etc/dnsmasq.conf` |
|
||||||
|
| Windows DNS | 53 | PowerShell remoting / DNS Manager |
|
||||||
|
| CoreDNS | 53 | Config file + reload |
|
||||||
|
|
||||||
|
## 🔄 Armonía Integral
|
||||||
|
|
||||||
|
**Última actualización:** 2026-04-07 (Fases 1-4 completadas - CLI DNS operativa)
|
||||||
|
|
||||||
|
| Documento | Estado | Notas |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `A07_dtic-DNS.md` | ✅ Creado | Manifiesto del ámbito |
|
||||||
|
| `A07.P001_Deteccion-Conexion-DNS.md` | ✅ Fase 1-4 | Detección, conexión y automatización completadas |
|
||||||
|
| `nodos/srvv-dns.md` | ✅ Actualizado | Implementación: CoreDNS en Docker |
|
||||||
|
| `adn/tools/cli/dns.rb` | ✅ Operativo | CLI DNS con 7 subcomandos |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- **CLI ADN**: `./adn/tools/run dns help` (por crear)
|
||||||
|
- **Bitácoras**: `./adn/tools/run db evento:listar --ambito dtic-DNS`
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
# A07 - Ámbito dtic-DNS
|
||||||
|
|
||||||
|
> Manifiesto de Ámbito | Referencia: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||||
|
|
||||||
|
## Identificación
|
||||||
|
|
||||||
|
| Campo | Valor |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **Código** | A07 |
|
||||||
|
| **Nombre** | Administración DNS de la Facultad |
|
||||||
|
| **Estado** | ✅ Operativo |
|
||||||
|
| **Inicio** | 07/04/2026 |
|
||||||
|
| **Fin Estimado** | Continuo (operación y mantenimiento) |
|
||||||
|
|
||||||
|
## Objetivo
|
||||||
|
|
||||||
|
El ámbito **dtic-DNS** engloba todas las operaciones relacionadas con la administración y gestión del servidor DNS de la Facultad (**srvv-dns**).
|
||||||
|
|
||||||
|
Este ámbito cubre:
|
||||||
|
|
||||||
|
1. **Gestión de CoreDNS** — Administración del servidor DNS basado en CoreDNS (Docker).
|
||||||
|
2. **Zonas DNS** — Mantenimiento de la zona `frlr.utn.edu.ar` y sus registros.
|
||||||
|
3. **Consultas y diagnóstico** — Herramientas CLI para verificación del estado DNS.
|
||||||
|
4. **Backups** — Resguardos automáticos de la configuración de zona antes de cambios.
|
||||||
|
|
||||||
|
## Herramientas
|
||||||
|
|
||||||
|
| Herramienta | Uso |
|
||||||
|
| :--- | :--- |
|
||||||
|
| **CoreDNS** | Servidor DNS en contenedor Docker (puerto 53) |
|
||||||
|
| **ADN CLI `dns`** | `./adn/tools/run dns <subcomando>` — herramientas de gestión DNS |
|
||||||
|
| **ADN CLI `dron`** | `./adn/tools/run dron` — vigía de tareas largas con auto-bitácora |
|
||||||
|
|
||||||
|
## Nodos Involucrados
|
||||||
|
|
||||||
|
### Núcleo DNS (Exclusivos del Ámbito)
|
||||||
|
|
||||||
|
| Nodo | IP / VMID | Rol en el Ámbito |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **srvv-dns** | `10.0.10.2` / VM 112 | Servidor DNS primario de la Facultad |
|
||||||
|
| **srv-pmox1** | `10.0.10.201` | Hipervisor Proxmox (anfitrión de srvv-dns) |
|
||||||
|
|
||||||
|
### Nodos de Soporte
|
||||||
|
|
||||||
|
| Nodo | IP | Rol en el Ámbito |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **srv-ns8** | `10.0.10.8` | Gestión central, GIT, punto de acceso para administración |
|
||||||
|
|
||||||
|
## Tareas Configuradas
|
||||||
|
|
||||||
|
| ID | Descripción | Tipo |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `dns_status` | Verificar estado del servidor DNS | status |
|
||||||
|
| `dns_backup` | Crear backup de zona antes de cambios | backup |
|
||||||
|
| `dns_reload` | Forzar recarga de CoreDNS | reload |
|
||||||
|
|
||||||
|
## Flujo de Trabajo Típico
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Registrar evento en bitácora (inicio de jornada DNS)
|
||||||
|
2. Verificar estado: ./adn/tools/run dns status
|
||||||
|
3. Crear backup: ./adn/tools/run dns backup
|
||||||
|
4. Realizar cambios (editar zona en srvv-dns)
|
||||||
|
5. Forzar reload: ./adn/tools/run dns reload
|
||||||
|
6. Cerrar evento en bitácora
|
||||||
|
```
|
||||||
|
|
||||||
|
### Subcomandos DNS disponibles
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./adn/tools/run dns help # Ayuda
|
||||||
|
./adn/tools/run dns status # Estado del servidor
|
||||||
|
./adn/tools/run dns zona # Información de zona
|
||||||
|
./adn/tools/run dns registros # Listar todos los registros
|
||||||
|
./adn/tools/run dns buscar <nombre> # Buscar por nombre
|
||||||
|
./adn/tools/run dns backup # Crear backup
|
||||||
|
./adn/tools/run dns reload # Forzar reload
|
||||||
|
./adn/tools/run dns corefile # Ver configuración CoreDNS
|
||||||
|
```
|
||||||
|
|
||||||
|
## Planes Asociados
|
||||||
|
|
||||||
|
| Código | Nombre | Estado |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| [A07.P001](A07.P001_Deteccion-Conexion-DNS.md) | Detección y Conexión al Servidor DNS | ✅ Completado |
|
||||||
|
|
||||||
|
## 🛸 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. El `tarea_id` del dron se incluye en la descripción del evento con formato `🛸 dron_HHMMSS_PID: <nota>`.
|
||||||
|
|
||||||
|
**Ejemplo:**
|
||||||
|
```bash
|
||||||
|
./adn/tools/run dron lanzar --evento AUTO --nota "Detección DNS" -- ./adn/tools/run dns detectar
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Armonía Integral
|
||||||
|
|
||||||
|
**Última actualización:** 2026-04-07 (ámbito operativo - CLI DNS implementada)
|
||||||
|
|
||||||
|
| Documento | Estado | Notas |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| `A07_dtic-DNS.md` | ✅ Creado | Manifiesto del ámbito |
|
||||||
|
| `A07.P001_Deteccion-Conexion-DNS.md` | ✅ Completado | Plan inicial completado |
|
||||||
|
| `nodos/srvv-dns.md` | ✅ Actualizado | Ficha técnica completa |
|
||||||
|
| `adn/tools/cli/dns.rb` | ✅ Operativo | CLI con 7 subcomandos |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Referencias
|
||||||
|
|
||||||
|
- **CLI DNS**: `./adn/tools/run dns help`
|
||||||
|
- **Código fuente**: [`adn/tools/cli/dns.rb`](../../../adn/tools/cli/dns.rb)
|
||||||
|
- **ADN Ontología**: [`adn/01_ontologia.md`](../../../adn/01_ontologia.md)
|
||||||
|
- **Bitácoras**: `./adn/tools/run db evento:listar --ambito dtic-DNS`
|
||||||
|
- **Nodo srvv-dns**: [`nodos/srvv-dns.md`](../../../nodos/srvv-dns.md)
|
||||||
+53
-6
@@ -3,7 +3,7 @@
|
|||||||
## Información General
|
## Información General
|
||||||
- **Hostname**: `srvv-dns`
|
- **Hostname**: `srvv-dns`
|
||||||
- **IP**: `10.0.10.2`
|
- **IP**: `10.0.10.2`
|
||||||
- **Rol**: Servidor DNS (Presunto)
|
- **Rol**: Servidor DNS Primario de la Facultad
|
||||||
- **Estado**: 🟢 Online
|
- **Estado**: 🟢 Online
|
||||||
- **OS**: Debian 12 (Bookworm)
|
- **OS**: Debian 12 (Bookworm)
|
||||||
|
|
||||||
@@ -18,12 +18,59 @@
|
|||||||
- **Almacenamiento**: 10 GB (61% usado)
|
- **Almacenamiento**: 10 GB (61% usado)
|
||||||
|
|
||||||
## Cargas de Trabajo
|
## Cargas de Trabajo
|
||||||
- **Servicios Detectados**:
|
- **Servicio DNS**: 🟢 **CoreDNS** (Docker)
|
||||||
- `bind9`: 🔴 Inactivo / No encontrado.
|
- Imagen: `coredns/coredns:latest`
|
||||||
- `named`: 🔴 Inactivo / No encontrado.
|
- Contenedor: `coredns`
|
||||||
- **Motor Docker**: Estado desconocido (no verificado).
|
- Puertos: `0.0.0.0:53->53/tcp, 0.0.0.0:53->53/udp`
|
||||||
|
- Uptime: 28+ horas
|
||||||
|
- Logs activos (consultas DNS resolviéndose)
|
||||||
|
- **Motor Docker**: 🟢 Activo
|
||||||
|
|
||||||
## Análisis de Salud
|
## Análisis de Salud
|
||||||
- **Uso de RAM**: Bajo (500Mi usado).
|
- **Uso de RAM**: Bajo (500Mi usado).
|
||||||
- **Disco**: **61% Ocupado** (Base de 10GB).
|
- **Disco**: **61% Ocupado** (Base de 10GB).
|
||||||
- **Alerta**: El servicio DNS principal no parece estar corriendo vía Systemd. ¿Posible contenedor?
|
- **DNS**: Operativo — responde consultas a `frlr.utn.edu.ar` (190.114.205.20)
|
||||||
|
|
||||||
|
## Acceso y Gestión
|
||||||
|
- **SSH**: `ssh rmonla@10.0.10.2` ✅ Funcional (clave SSH cargada)
|
||||||
|
- **Gestión DNS**: Edición directa de archivos de zona
|
||||||
|
- **Corefile**: `/docker/coreDNS/Corefile` (montado en el contenedor)
|
||||||
|
- **Zonas**: `/docker/coreDNS/zones/` (frlr.utn.edu.ar.db)
|
||||||
|
- **Reload**: Automático vía plugin `reload` de CoreDNS (detecta cambios)
|
||||||
|
|
||||||
|
## Zona DNS: frlr.utn.edu.ar
|
||||||
|
|
||||||
|
| Tipo | Nombre | Valor/Target | Notas |
|
||||||
|
| :--- | :--- | :--- | :--- |
|
||||||
|
| **SOA** | @ | ns1.frlr.utn.edu.ar. | Serial: 2025120501 |
|
||||||
|
| **NS** | @ | ns1.frlr.utn.edu.ar. | DNS primario |
|
||||||
|
| **NS** | @ | ns3.utn.edu.ar. | DNS secundario (190.114.221.1) |
|
||||||
|
| **A** | ns1 | 190.114.205.2 | DNS server |
|
||||||
|
| **A** | @ | 190.114.205.20 | Dominio principal |
|
||||||
|
| **A** | www | 190.114.205.20 | Sitio web |
|
||||||
|
| **A** | dns | 190.114.205.2 | Servidor DNS |
|
||||||
|
| **A** | mail | 190.114.205.2 | Servidor de correo |
|
||||||
|
| **A** | s0 | 190.114.205.4 | Sitio 0 WebApps |
|
||||||
|
| **A** | pmox | 190.114.205.6 | Proxmox VE |
|
||||||
|
| **A** | upt | 190.114.205.9 | UpTimeWebs |
|
||||||
|
| **A** | sysacad | 190.114.205.10 | Sistema Académico |
|
||||||
|
| **A** | ftp | 190.114.205.14 | Servidor FTP |
|
||||||
|
| **A** | n8n | 190.114.205.15 | n8n Automation |
|
||||||
|
| **A** | ns7 | 190.114.205.17 | Servidor ns7 |
|
||||||
|
| **A** | ns8 | 190.114.205.18 | Servidor ns8 |
|
||||||
|
| **A** | *.ns8 | 190.114.205.18 | Wildcard ns8 |
|
||||||
|
| **A** | s2 | 190.114.205.19 | SITIO2 |
|
||||||
|
| **A** | koha | 190.114.205.29 | Biblioteca |
|
||||||
|
| **MX** | @ | frlr-utn-edu-ar.mail.protection.outlook.com | Exchange Online |
|
||||||
|
| **TXT** | @ | v=spf1 ... | SPF record |
|
||||||
|
| **TXT** | @ | google-site-verification=... | Google Search Console |
|
||||||
|
| **TXT** | mail._domainkey | v=DKIM1; k=rsa; p=... | DKIM key |
|
||||||
|
| **CNAME** | autodiscover | autodiscover.outlook.com | Exchange |
|
||||||
|
| **CNAME** | sip | sipdir.online.lync.com | Lync/Skype |
|
||||||
|
| **CNAME** | lyncdiscover | webdir.online.lync.com | Lync Web |
|
||||||
|
| **SRV** | _sip._tls | 100 1 443 sipdir.online.lync.com | SIP TLS |
|
||||||
|
| **SRV** | _sipfederationtls._tcp | 100 1 5061 sipfed.online.lync.com | SIP Federation |
|
||||||
|
|
||||||
|
### Backups de Zona
|
||||||
|
- Ubicación: `/docker/coreDNS/zones/bkp_*.db`
|
||||||
|
- Último backup: `bkp_251205-2007_frlr.utn.edu.ar.db` (2025-12-05)
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Script para reparar el contenedor srvv-apps (tinyfilemanager)
|
||||||
|
# Ejecutar en srv-ns8 con: sudo bash reparar.sh
|
||||||
|
|
||||||
|
echo "🔧 Reparando contenedor srvv-apps..."
|
||||||
|
|
||||||
|
# 1. Eliminar directorio index.php erróneo
|
||||||
|
echo " 1. Eliminando directorio index.php incorrecto..."
|
||||||
|
rm -rf /home/rmonla/Documentos/GitHub/dtic-srv-NS8/servicios/nginx/ns8-apps/index.php
|
||||||
|
|
||||||
|
# 2. Descargar el archivo index.php correcto
|
||||||
|
echo " 2. Descargando index.php desde GitHub..."
|
||||||
|
curl -sL https://raw.githubusercontent.com/tinyfilemanager/tinyfilemanager/master/index.php \
|
||||||
|
-o /home/rmonla/Documentos/GitHub/dtic-srv-NS8/servicios/nginx/ns8-apps/index.php
|
||||||
|
|
||||||
|
# 3. Verificar descarga
|
||||||
|
if [ -f /home/rmonla/Documentos/GitHub/dtic-srv-NS8/servicios/nginx/ns8-apps/index.php ]; then
|
||||||
|
echo " ✅ index.php descargado correctamente"
|
||||||
|
ls -la /home/rmonla/Documentos/GitHub/dtic-srv-NS8/servicios/nginx/ns8-apps/index.php
|
||||||
|
else
|
||||||
|
echo " ❌ Error al descargar index.php"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Iniciar contenedor
|
||||||
|
echo " 3. Iniciando contenedor srvv-apps..."
|
||||||
|
docker start srvv-apps
|
||||||
|
|
||||||
|
# 5. Verificar estado
|
||||||
|
sleep 2
|
||||||
|
if docker ps | grep -q srvv-apps; then
|
||||||
|
echo " ✅ Contenedor srvv-apps iniciado exitosamente"
|
||||||
|
docker ps | grep srvv-apps
|
||||||
|
else
|
||||||
|
echo " ⚠️ El contenedor no se mantuvo running. Revisando logs..."
|
||||||
|
docker logs srvv-apps --tail 20
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Reparación completada. El servicio apps debería estar disponible en srv-ns8/apps"
|
||||||
Reference in New Issue
Block a user