Proyecto final · FP Servicios de red

Infraestructura segura de fichaje horario con DNSSEC, DoH y aislamiento de red

Servidor casero con Proxmox, MikroTik y BIND9 firmado con DNSSEC, accesible desde cualquier parte del mundo mediante WireGuard. Sistema de fichaje con tarjeta RFID en ESP32 conectado a una web PHP, todo aislado de la red doméstica con tolerancia 0 a errores de seguridad.

Proxmox VE MikroTik RouterOS 7 BIND9 + DNSSEC DoH WireGuard ESP32 + RFID PHP 8.2 MySQL 8 Bash + Cron
Servidor Proxmox, MikroTik y ESP32 con RFID conectados
Foto 1 · Montaje físico real del proyecto.

Contexto y motivación

Este es mi proyecto final del ciclo formativo en la asignatura de Servicios de Red. El reto autoimpuesto fue montarlo en mi propia casa, conectado tras el router de Orange y un router Huawei intermedio, sin que ningún equipo del servidor pueda llegar a esos routers domésticos.

El requisito clave: poder fichar (con tarjeta RFID en un ESP32) desde cualquier parte del mundo manteniendo seguridad máxima. La filosofía de diseño: tolerancia cero a errores de seguridad — cada capa pensada para que el fallo de una no comprometa la siguiente.

Arquitectura general

Topología en cascada de tres routers, con el MikroTik actuando como firewall central:

Diagrama de arquitectura: Orange → Huawei → MikroTik → Proxmox con LXCs
Foto 2 · Diagrama de la red completa con la barrera del firewall central y los túneles WireGuard.

Aislamiento y seguridad de red

La regla maestra del firewall del MikroTik bloquea cualquier paquete originado desde la red interna del servidor (10.10.10.x, 10.10.20.x, 10.10.30.x) hacia cualquier dirección RFC1918 ajena. Esto significa que:

Defensa adicional: LAN→MGMT explícitamente bloqueado (una LXC comprometida no puede pivotar al host Proxmox), cadena OUTPUT del MikroTik bloquea que el propio router llame a los routers domésticos, y el acceso administrativo a WinBox/SSH está restringido a la IP exacta del portátil (/32), no a una subred entera.

WinBox con las reglas de firewall del MikroTik y contadores de paquetes bloqueados
Foto 3 · Reglas de firewall en WinBox con los contadores DENY-RFC1918 y HIT-HUAWEI subiendo en tiempo real.

Acceso remoto: WireGuard con Curve25519

Para fichar desde cualquier parte del mundo:

WinBox con peers de WireGuard, handshake reciente y tráfico Rx/Tx
Foto 4 · Peers de WireGuard en el MikroTik con last-handshake reciente y contadores Rx/Tx en aumento.

DNS propio con DNSSEC y DoH

Resolver autoritativo y recursivo en un LXC con BIND9:

Terminal mostrando delv con resultado fully validated
Foto 5 · Salida de delv +rtrace mostrando ; fully validated — la prueba criptográfica de la cadena padre→hija.

Aplicación de fichaje: PHP + MySQL + ESP32

Interfaz web de fichaje horario
Foto 6 · Aplicación web de fichaje funcionando end-to-end sobre PHP + MySQL.

Monitorización automatizada con scripts Bash

El reto principal de DNSSEC es la caducidad de las firmas RRSIG. Si caducan sin renovarse, los validadores externos rechazan el dominio entero. Para evitarlo, dos capas de defensa:

Notificación de Telegram con alerta DNSSEC
Foto 7 · Alerta de Telegram durante la prueba de fallo intencional. El sistema avisó antes de que ningún cliente notara nada.

Pruebas y validación

Matriz de pruebas realizadas para evidenciar que todo funciona:

Aislamiento de red

ping 192.168.100.1 desde una LXC → 100 % packet loss confirmado.

DNSSEC

delv +rtrace devuelve "; fully validated" con la cadena padre→hija verificada.

DoH cifrado

Wireshark muestra solo TLS al puerto 443 contra 1.1.1.1, jamás UDP/53 sin cifrar.

Detección de fallo

Se caducó una firma intencionalmente; el script envió alerta a Telegram + Gmail antes del fallo del cliente.

Acceso remoto

Validado desde 4G del móvil — ESP32 abre túnel WireGuard y ficha contra la web PHP.

Conocimientos demostrados

Administración de redes Linux RouterOS / MikroTik Virtualización con Proxmox VE Contenedores LXC VLANs y trunking 802.1Q Firewall default-deny DNSSEC: KSK/ZSK, firma de zonas Cadena de confianza DNS over HTTPS Certificados X.509 WireGuard (Curve25519) ESP32 + Arduino + SPI PHP 8.2 / NGINX / PHP-FPM MySQL 8 con privilegios mínimos Bash + cron + APIs externas Telegram Bot API · SMTP Defensa en profundidad

Conclusión

Este proyecto ha sido una breve practica la cual se puede mejorar, tanto con un sistema de logs como arquitectonicamente. Cada desición que tome en este proyecto me fije en la seguridad de mi red. El resultado es un entorno donde un fallo en cualquier capa no propaga el daño. Y la automatización de las alertas DNSSEC garantiza que la infraestructura es resistente no solo a ataques, sino también al olvido humano del propio administrador. Pronto implementare mejoras.

¡Gracias por leer este articulo!