Problema

Instalar Proxmox VE en una Raspberry Pi (ARM64) suele implicar varios pasos manuales: descargar una imagen de Raspberry Pi OS, instalar los paquetes de Proxmox, desactivar NetworkManager, crear un bridge vmbr0 y ajustar la red para que el hipervisor sea accesible desde el inicio. Cada uno de esos pasos es propenso a errores de configuración, sobre todo cuando se trabaja con una placa que solo tiene Ethernet y se quiere evitar Wi‑Fi. El resultado típico es un nodo que arranca, pero que no ofrece la interfaz web de Proxmox o que no permite crear contenedores/LXC porque el bridge no está activo.

Este patrón se repite en muchos homelabs que buscan una solución “plug‑and‑play” para ARM. La necesidad es clara: disponer de una imagen lista para flashar que ya incluya Proxmox VE, con la red configurada de forma que el hipervisor sea operativo inmediatamente después del primer arranque.

Causa

  1. Falta de bridge en la capa de red – Proxmox requiere un bridge de Linux (vmbr0) sobre una interfaz física. Si la interfaz está gestionada por NetworkManager o por cloud‑init, el bridge no se crea y los contenedores quedan sin conectividad.

  2. NetworkManager vs ifupdown2 – En Raspberry Pi OS Lite el gestor predeterminado es NetworkManager. Proxmox, sin embargo, depende de ifupdown2 para aplicar cambios de red sin reiniciar. La coexistencia de ambos da lugar a conflictos y a que la configuración estática se ignore.

  3. Wi‑Fi como interfaz primaria – Un bridge no puede residir sobre una interfaz Wi‑Fi porque el tráfico de máquinas virtuales necesita un dispositivo de capa 2 estable. Cuando la Pi solo tiene Wi‑Fi configurado, Proxmox no puede publicar su IP.

  4. Cloud‑init sobrescribiendo /etc/network/interfaces – Algunas imágenes de Raspberry Pi incluyen cloud‑init que, al arrancar, reemplaza la configuración manual del bridge con una plantilla basada en DHCP, rompiendo la red estática requerida por Proxmox.

  5. Permisos de usuario – El usuario creado durante el proceso de flash se replica en la base de datos de Proxmox. Si la contraseña no coincide o el usuario no pertenece al grupo www-data, el acceso a la UI falla.

Solución

Una estrategia reutilizable consiste en crear (o descargar) una imagen base que ya tenga:

  • Raspberry Pi OS Lite 64‑bit.
  • proxmox-ve instalado desde los repositorios oficiales.
  • ifupdown2 como gestor de red predeterminado.
  • Un archivo /etc/network/interfaces que defina vmbr0 sobre eth0 con IP estática.
  • Cloud‑init desactivado o configurado para no tocar la red.
  • NetworkManager eliminado.

Paso a paso genérico

  1. Obtener la imagen
    Busca una release en GitHub que ofrezca la imagen preconstruida (ejemplo: meteyou/proxmox-pi-os). Descarga el archivo .img.xz y verifica su checksum.

  2. Flashear con Raspberry Pi Imager
    Selecciona Use custom → archivo descargado → Write. Marca la opción Edit settings para añadir el repositorio de manifiesto que permite personalizar hostname, usuario y claves SSH.

  3. Primer arranque y acceso SSH
    Conecta la Pi a la red mediante cable Ethernet, enciéndela y espera a que el servicio SSH esté disponible (aprox. 1‑2 min). Usa el usuario y contraseña definidos en el paso anterior.

  4. Validar la red

    ip a show eth0
    ip a show vmbr0
    

    eth0 debe estar en DOWN y vmbr0 debe tener la IP estática configurada. Si eth0 sigue activo, el bridge no se ha creado.

  5. Reparar la configuración (si es necesario)

    • Eliminar NetworkManager

      sudo apt purge -y network-manager
      sudo apt install -y ifupdown2
      
    • Crear/ajustar /etc/network/interfaces

      sudo tee /etc/network/interfaces > /dev/null <<'EOF'
      

    interfaces(5) file used by ifupdown2

    source-directory /etc/network/interfaces.d

    auto lo iface lo inet loopback

    Bridge for Proxmox

    auto vmbr0 iface vmbr0 inet static address 192.168.10.10/24 gateway 192.168.10.1 bridge_ports eth0 bridge_stp off bridge_fd 0 EOF

    
    - **Desactivar cloud‑init networking**  
    ```bash
    sudo rm -f /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
    sudo touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
    echo "network: {config: disabled}" | sudo tee -a /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
    
    • Reiniciar la pila de red
      sudo systemctl restart networking
      
  6. Acceder a la UI de Proxmox
    Desde un navegador abre https://192.168.10.10:8006. El certificado será autofirmado; acepta la excepción. Inicia sesión con el usuario y contraseña creados en el paso 2.

  7. Crear la primera VM/LXC
    Usa la UI para lanzar una plantilla mínima (por ejemplo, Alpine o Debian). Verifica que la VM obtiene una interfaz eth0 conectada a vmbr0 y que tiene conectividad externa.

Cuándo aplicar esta solución

Señales de que la solución es adecuada

  • Necesitas un nodo Proxmox en hardware ARM de bajo consumo (Raspberry Pi 4/5, Orange Pi, etc.).
  • La placa solo dispone de Ethernet y no vas a usar Wi‑Fi para los contenedores.
  • Quieres evitar la cadena de instalación manual de paquetes y la reconfiguración de red.
  • El entorno es un homelab o laboratorio de pruebas, no una infraestructura de producción crítica.

Escenarios donde no aplica

  • Requerimientos de alta disponibilidad con varios nodos ARM; la solución de una sola imagen no cubre clustering automático.
  • Necesitas que la Pi funcione como router o firewall simultáneamente; el bridge está reservado para Proxmox y podría interferir.
  • Entornos donde la política de seguridad prohíbe la eliminación de NetworkManager o la instalación de paquetes externos sin auditoría.

Código

# 1. Eliminar NetworkManager y asegurar ifupdown2
sudo apt purge -y network-manager
sudo apt install -y ifupdown2

# 2. Definir bridge estático
sudo tee /etc/network/interfaces > /dev/null <<'EOF'
auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
    address 192.168.10.10/24
    gateway 192.168.10.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
EOF

# 3. Desactivar cloud‑init networking
sudo mkdir -p /etc/cloud/cloud.cfg.d
echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# 4. Reiniciar servicios
sudo systemctl restart networking
sudo systemctl restart pveproxy

Verificación

  1. Comprobar que vmbr0 está activo

    ip -br a show vmbr0
    

    Salida esperada: vmbr0 UP 192.168.10.10/24.

  2. Ping desde la Pi a la puerta de enlace

    ping -c 3 192.168.10.1
    

    Sin pérdidas indica que la capa 2 funciona.

  3. Acceso a la UI
    Navegador → https://192.168.10.10:8006. La página de login debe cargar en menos de 2 s.

  4. Crear una VM de prueba
    Desde la UI, lanzar una VM con 1 vCPU y 512 MiB RAM. Cuando la VM arranca, verifica que ip a muestra una interfaz eth0 con una IP del rango del bridge.

  5. Conectividad de la VM

    ping -c 3 8.8.8.8
    

    Si funciona, la cadena completa (bridge → VM → internet) está operativa.

Notas adicionales

  • Persistencia de la IP – Si el entorno DHCP asigna la misma IP a otro dispositivo, la UI de Proxmox quedará inaccesible. Reserva la IP en el router o usa una IP fuera del rango DHCP.
  • Actualizaciones de Proxmox – Las actualizaciones mayores pueden reinstalar NetworkManager. Después de cada apt upgrade, revisa que ifupdown2 siga activo y que el archivo /etc/network/interfaces no haya sido sobrescrito.
  • Almacenamiento – La tarjeta microSD es el cuello de botella. Para cargas de trabajo más intensas, monta un SSD vía USB‑3 y configura datastore en Proxmox apuntando a /dev/sda1.
  • Seguridad – Cambia la contraseña predeterminada del usuario de Proxmox y habilita la autenticación basada en claves SSH. Considera colocar el nodo detrás