Problema

Los entusiastas de los homelabs suelen combinar varios componentes – servidores Proxmox, almacenamiento ZFS, redes UniFi y servicios de contenedores – en un entorno de consumo doméstico. Con el tiempo aparecen tres patrones de dolor:

  1. Puntos únicos de falla en la capa de gestión o en el almacenamiento.
  2. Fragmentación de la monitorización: métricas dispersas entre Proxmox, contenedores, dispositivos de red y UPS.
  3. Estrategia de backup insuficiente que no cubre tanto la capa de VM/LXC como los datos de aplicaciones críticas.

El reto es diseñar una arquitectura que mantenga bajo consumo energético, pero que ofrezca alta disponibilidad y recuperación rápida ante fallos de hardware o cortes de energía.

Causa

1. Falta de separación de redes

Agrupar tráfico de gestión, datos y usuarios en la misma VLAN genera congestión y dificulta la aplicación de políticas de seguridad. En entornos con paredes de ladrillo y fibra, la señal Wi‑Fi se vuelve un cuello de botella y los switches PoE pueden sobrecargarse si se usan para todo.

2. Configuración ZFS sub‑optimizada

Mirroring simple sin planificación de capacidad, sin scrubs programados y sin ajustes de recordsize para máquinas virtuales, lleva a degradación del rendimiento y a errores silenciosos que solo aparecen en un fallo de disco.

3. Backup ad‑hoc

Copiar ISO a un NVMe local y depender de un solo script de rsync para los contenedores deja la restauración a merced de la última ejecución exitosa. La ausencia de snapshots consistentes de VM/LXC y la falta de replicación off‑site hacen que una caída del nodo principal sea catastrófica.

4. Monitorización y alertas dispersas

Utilizar Uptime Kuma, Termix y Portainer por separado genera ruido y dificulta la correlación de eventos. Además, la falta de integración con NUT (UPS) y con el DNS split de Tailscale impide detectar rápidamente un corte de energía o una pérdida de conectividad externa.

Solución

1. Rediseñar la topología de red

  • Tres VLAN: mgmt (acceso a Proxmox, NUT, Pi‑hole), iot (Zigbee/Z‑Wave, cámaras) y data (tráfico de streaming, backups).
  • Asigna los APs a la VLAN data y habilita inter‑VLAN routing en el UniFi Security Gateway con reglas de firewall que permitan solo los puertos necesarios entre mgmt y data.
  • Usa el switch PoE exclusivamente para dispositivos alimentados (cámaras, APs). Conecta los nodos Proxmox a puertos de 2.5 GbE dedicados para evitar cuellos de botella.

2. Optimizar ZFS para máquinas virtuales

  • Crea datasets separados para ISO, snapshots y datos de contenedores.
  • Ajusta recordsize=128K en datasets que alojan discos de VM, y recordsize=1M para archivos estáticos como ISO.
  • Programa scrubs mensuales y trim semanal para mantener la salud del pool.

3. Implementar una estrategia de backup integral

  1. Proxmox Backup Server (PBS) como destino principal. Configura backups diarios de todas las VM/LXC con retención de 7 días y weekly full.
  2. Off‑site replication: usa rsync o zfs send/receive a un nodo en la casa de un familiar (el Alpine LXC) a través de Tailscale.
  3. Snapshot de aplicaciones: habilita snapshots de bases de datos (MariaDB, PostgreSQL) dentro de los contenedores y exporta a PBS antes del backup de la VM.

4. Consolidar monitorización y alertas

  • Reemplaza Portainer por Grafana + Prometheus con el exporter pve_exporter para métricas de Proxmox.
  • Integra Uptime Kuma y NUT en Grafana mediante el datasource influxdb.
  • Configura alertas en Alertmanager para:
    • ZFS health degradado (zpool status muestra DEGRADED).
    • UPS en bajo (battery.charge < 20%).
    • Falta de backup (pbs_backup_last_success > 24h).

5. Automatizar despliegues y actualizaciones

  • Usa Ansible para provisionar contenedores y VMs en Proxmox, evitando la dependencia de Portainer.
  • Define playbooks que incluyan: creación de LXC, instalación de paquetes, configuración de systemd timers para scrubs y backups.
  • Versiona los playbooks en Git y habilita CI con GitHub Actions para validar cambios antes de aplicar.

Cuándo aplicar esta solución

  • Síntomas: fallos intermitentes de streaming, alertas de ZFS degradado, backups que no se completan, o pérdida de conectividad cuando se activa la UPS.
  • Entorno: homelabs con al menos dos nodos Proxmox, almacenamiento ZFS y una red UniFi gestionada.
  • No aplica: configuraciones extremadamente simples (un solo nodo sin almacenamiento crítico) donde la complejidad añadida de PBS y Grafana no justifica el esfuerzo.

Código

# Programar scrubs mensuales y trim semanal en un pool llamado rpool
cat <<'EOF' > /etc/cron.d/zfs-maintenance
# m h  dom mon dow  user  command
0 2 1 * * root /sbin/zpool scrub rpool >/dev/null 2>&1
0 3 * * 0 root /sbin/zpool trim -a >/dev/null 2>&1
EOF

# Configurar backup de una VM (ID 101) a Proxmox Backup Server (PBS) cada noche
cat <<'EOF' > /etc/pve/vzdump.cron
0 1 * * * root /usr/bin/vzdump 101 --mode snapshot --storage PBS --compress lzo
EOF

Verificación

  1. Red: Desde un cliente en la VLAN data, verifica que solo los puertos 22, 80 y 443 hacia mgmt están abiertos (tcpdump -i eth0).
  2. ZFS: Ejecuta zpool status -v y confirma que el estado es ONLINE y que el último scrub tiene una fecha reciente.
  3. Backup: En PBS, revisa pbs-manager status y comprueba que la última copia de la VM 101 tiene timestamp dentro de las 24 h.
  4. Alertas: Genera una condición de prueba (por ejemplo, desconecta la UPS) y verifica que Grafana envía una notificación al canal configurado.

Notas adicionales

  • UPS y NUT: Configura upsmon con SHUTDOWNCMD="/sbin/shutdown -h now" para que el nodo se apague ordenadamente antes de que la batería se agote.
  • Tailscale split DNS: Añade una regla de DNS en el servidor de Tailscale que resuelva los nombres internos (*.home) a la IP de la VLAN mgmt. Evita colisiones con dominios públicos.
  • Almacenamiento: Si el pool ZFS crece por encima del 80 % de capacidad, planifica añadir un disco y re‑balancear con zpool add.
  • Portainer: Si decides mantenerlo, habilita su modo read‑only y usa portainer-agent solo en contenedores que no requieran acceso a la API de Docker del host.

Con esta arquitectura, el homelab gana resiliencia, una monitorización centralizada y una estrategia de backup que cubre tanto la capa de virtualización como los datos de usuario. El consumo energético sigue siendo bajo, pero la capacidad de recuperación frente a fallos aumenta notablemente.