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
-
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. -
NetworkManager vs ifupdown2 – En Raspberry Pi OS Lite el gestor predeterminado es NetworkManager. Proxmox, sin embargo, depende de
ifupdown2para aplicar cambios de red sin reiniciar. La coexistencia de ambos da lugar a conflictos y a que la configuración estática se ignore. -
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.
-
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. -
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-veinstalado desde los repositorios oficiales.ifupdown2como gestor de red predeterminado.- Un archivo
/etc/network/interfacesque definavmbr0sobreeth0con IP estática. - Cloud‑init desactivado o configurado para no tocar la red.
- NetworkManager eliminado.
Paso a paso genérico
-
Obtener la imagen
Busca una release en GitHub que ofrezca la imagen preconstruida (ejemplo:meteyou/proxmox-pi-os). Descarga el archivo.img.xzy verifica su checksum. -
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. -
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. -
Validar la red
ip a show eth0 ip a show vmbr0eth0debe estar en DOWN yvmbr0debe tener la IP estática configurada. Sieth0sigue activo, el bridge no se ha creado. -
Reparar la configuración (si es necesario)
-
Eliminar NetworkManager
sudo apt purge -y network-manager sudo apt install -y ifupdown2 -
Crear/ajustar
/etc/network/interfacessudo 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
-
-
Acceder a la UI de Proxmox
Desde un navegador abrehttps://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. -
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 interfazeth0conectada avmbr0y 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
-
Comprobar que
vmbr0está activoip -br a show vmbr0Salida esperada:
vmbr0 UP 192.168.10.10/24. -
Ping desde la Pi a la puerta de enlace
ping -c 3 192.168.10.1Sin pérdidas indica que la capa 2 funciona.
-
Acceso a la UI
Navegador →https://192.168.10.10:8006. La página de login debe cargar en menos de 2 s. -
Crear una VM de prueba
Desde la UI, lanzar una VM con 1 vCPU y 512 MiB RAM. Cuando la VM arranca, verifica queip amuestra una interfazeth0con una IP del rango del bridge. -
Conectividad de la VM
ping -c 3 8.8.8.8Si 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 queifupdown2siga activo y que el archivo/etc/network/interfacesno 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
datastoreen 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