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:
- Puntos únicos de falla en la capa de gestión o en el almacenamiento.
- Fragmentación de la monitorización: métricas dispersas entre Proxmox, contenedores, dispositivos de red y UPS.
- 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) ydata(tráfico de streaming, backups). - Asigna los APs a la VLAN
datay habilita inter‑VLAN routing en el UniFi Security Gateway con reglas de firewall que permitan solo los puertos necesarios entremgmtydata. - 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=128Ken datasets que alojan discos de VM, yrecordsize=1Mpara archivos estáticos como ISO. - Programa scrubs mensuales y trim semanal para mantener la salud del pool.
3. Implementar una estrategia de backup integral
- 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.
- Off‑site replication: usa
rsyncozfs send/receivea un nodo en la casa de un familiar (el Alpine LXC) a través de Tailscale. - 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_exporterpara métricas de Proxmox. - Integra Uptime Kuma y NUT en Grafana mediante el datasource
influxdb. - Configura alertas en Alertmanager para:
- ZFS health degradado (
zpool statusmuestraDEGRADED). - UPS en bajo (
battery.charge < 20%). - Falta de backup (
pbs_backup_last_success> 24h).
- ZFS health degradado (
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
systemdtimers 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
- Red: Desde un cliente en la VLAN
data, verifica que solo los puertos 22, 80 y 443 haciamgmtestán abiertos (tcpdump -i eth0). - ZFS: Ejecuta
zpool status -vy confirma que el estado esONLINEy que el último scrub tiene una fecha reciente. - Backup: En PBS, revisa
pbs-manager statusy comprueba que la última copia de la VM 101 tiene timestamp dentro de las 24 h. - 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
upsmonconSHUTDOWNCMD="/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 VLANmgmt. 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-agentsolo 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.