Problema

Muchos entusiastas de homelab empiezan con Raspberry Pi por su bajo costo y facilidad de despliegue. Con el tiempo, la carga de trabajo crece: más contenedores Docker, servicios que demandan CPU/GPU, y la necesidad de aislar tráfico mediante VLAN o DMZ. En ese punto, la arquitectura ARM se vuelve limitante y la migración a servidores x86 con Proxmox parece la solución natural. El reto consiste en trasladar datos, configuraciones y redes sin interrumpir servicios críticos, manteniendo la separación de tráfico (admin, DMZ, usuarios) y aprovechando hardware de 10 GbE.

Causa

Los cuellos de botella típicos al pasar de Pi a x86 son:

  1. Diferencias de arquitectura – imágenes Docker basadas en ARM no arrancan en x86.
  2. Redes estáticas – los Pi suelen usar eth0 con IP fija; Proxmox introduce puentes (vmbr0, vmbr1) y VLAN que requieren re‑mapear direcciones.
  3. Almacenamiento – los SSD en los Pi están montados directamente; Proxmox usa LVM/ZFS y puede requerir migrar datos a volúmenes lógicos.
  4. Persistencia de configuraciones – Home Assistant, Nextcloud y JellyFin guardan datos en rutas específicas (/config, /data). Copiar esas carpetas sin perder permisos es crítico.
  5. Aislamiento de tráfico – al crear una DMZ en Proxmox, es fácil olvidar reglas de firewall o asignar VLAN incorrectas, lo que genera pérdida de conectividad externa.

Solución

1. Preparar el nodo Proxmox

  • Instalar Proxmox VE (ISO oficial) en el nuevo servidor x86.
  • Configurar los dos puertos SFP+ como un LAGG (bond0) y asignarlo a vmbr0.
  • Crear un puente adicional (vmbr1) conectado al puerto RJ‑45 de 2.5 GbE para la red de gestión.
# Crear bond0 con los dos DAC
cat <<EOF > /etc/network/interfaces.d/bond0.cfg
auto bond0
iface bond0 inet manual
    bond-slaves eth0 eth1
    bond-mode 802.3ad
    bond-miimon 100
EOF

# Puente para tráfico de VMs/containers
cat <<EOF > /etc/network/interfaces.d/vmbr0.cfg
auto vmbr0
iface vmbr0 inet static
    address 10.0.10.1/24
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0
EOF

# Puente para gestión
cat <<EOF > /etc/network/interfaces.d/vmbr1.cfg
auto vmbr1
iface vmbr1 inet static
    address 192.168.1.10/24
    bridge-ports eth2
    bridge-stp off
    bridge-fd 0
EOF

systemctl restart networking

2. Definir VLAN y DMZ

  • En el switch (Zyxel XGS1210) crear VLAN 10 (admin), 20 (DMZ) y 30 (usuarios).
  • En Proxmox, añadir sub‑interfaces a vmbr0:
cat <<EOF > /etc/network/interfaces.d/vmbr0.10.cfg
auto vmbr0.10
iface vmbr0.10 inet static
    address 10.0.10.2/24
    vlan-raw-device vmbr0
EOF

cat <<EOF > /etc/network/interfaces.d/vmbr0.20.cfg
auto vmbr0.20
iface vmbr0.20 inet static
    address 10.0.20.2/24
    vlan-raw-device vmbr0
EOF
  • Activar firewall de Proxmox y crear reglas que permitan solo SSH/HTTPS desde la VLAN 10 al host, y tráfico HTTP/HTTPS desde VLAN 20 al contenedor Nextcloud.

3. Migrar datos de los Pi

  1. Copiar volúmenes – montar los SSD de los Pi en el nuevo nodo (USB‑SATA) y usar rsync preservando permisos y atributos:
rsync -aHAX --progress /mnt/pi_homeassistant/ /mnt/pve/storage/homeassistant/
rsync -aHAX --progress /mnt/pi_nextcloud/ /mnt/pve/storage/nextcloud/
rsync -aHAX --progress /mnt/pi_jellyfin/ /mnt/pve/storage/jellyfin/
  1. Convertir contenedores Docker a LXC – para servicios ligeros (Home Assistant, BBS) crear plantillas LXC basadas en Debian/Ubuntu y montar los directorios copiados como volúmenes bind.
pct create 101 local:vztmpl/debian-12-standard_12.0-1_amd64.tar.gz \
    -hostname homeassistant -net0 name=eth0,bridge=vmbr0.20,ip=10.0.20.101/24 \
    -rootfs local-lvm:8 \
    -features nesting=1

pct set 101 -mp0 /mnt/pve/storage/homeassistant,mp=/config
pct start 101
  1. Re‑crear VMs para aplicaciones que requieren Docker – usar una VM con Ubuntu 22.04, instalar Docker y restaurar los docker-compose.yml originales. Cambiar la arquitectura de las imágenes con docker pull --platform linux/amd64.
docker compose up -d

4. Configurar replicación y alta disponibilidad (opcional)

  • Si se añade un segundo nodo HP, conectar los dos servidores con un cable DAC directo y crear un segundo bond (bond1).
  • Configurar pve-cluster y habilitar HA para los contenedores críticos (Nextcloud, Home Assistant).
pvecm add <IP_del_segundo_nodo>
ha-manager add ha-nextcloud --vmid 102 --max-restarts 3

5. Ajustar transcoding y rendimiento

  • Instalar intel-media-driver y ffmpeg dentro de la VM Jellyfin para aprovechar la GPU UHD 630.
  • Configurar Jellyfin para usar hardware acceleration (VAAPI) y desactivar la transcodificación automática en los Pi.

Cuándo aplicar esta solución

  • Escalado de carga: cuando varios contenedores consumen más CPU/RAM de lo que una Raspberry Pi puede ofrecer.
  • Necesidad de aislamiento: si se requiere separar tráfico de gestión, DMZ y usuarios mediante VLAN o firewalls.
  • Requerimientos de hardware: cuando se necesita GPU para transcodificación, 10 GbE para backup rápido o almacenamiento SSD NVMe.
  • Plan de crecimiento: si se prevé añadir nodos adicionales y alta disponibilidad.

No es apropiado si la infraestructura sigue siendo un único Pi con menos de 2 TB de datos y sin requisitos de aislamiento; la complejidad añadida de Proxmox y LAGG superaría los beneficios.

Verificación

  1. Conectividad – ping desde una máquina en VLAN 20 a la IP de Nextcloud (10.0.20.102).
  2. Acceso a gestión – SSH al host Proxmox desde VLAN 10 (192.168.1.10).
  3. Integridad de datos – comparar hashes de los directorios originales y los copiados (sha256sum -c).
  4. Transcodificación – reproducir un video 4K en Jellyfin y confirmar que la carga de CPU se mantiene bajo el 20 % y que ffmpeg -hwaccel vaapi muestra uso de VAAPI.
  5. Failover – apagar el nodo principal y verificar que la VM/LCX HA arranca en el nodo secundario.

Notas adicionales

  • Arquitectura de imágenes: antes de migrar, revisa docker images y etiqueta las que son arm64. Usa docker buildx para crear versiones amd64 si no existen.
  • Permisos de SELinux/AppArmor: al montar volúmenes en LXC, puede ser necesario ajustar lxc.cgroup2.devices.allow o desactivar AppArmor para evitar denegaciones de acceso.
  • Backup inicial: realiza una copia de seguridad completa del nodo Proxmox (vzdump --dumpdir /backup --all) antes de iniciar la migración; facilita la recuperación ante errores de configuración.
  • Monitoreo: habilita node-exporter y prometheus para observar el uso de 10 GbE y detectar cuellos de botella en la red de replicación.
  • Consumo energético: los servidores x86 consumen más que los Pi; considera programar apagados nocturnos de VMs no críticas para reducir la factura eléctrica.