Cómo modificar la fijación de nombres de interfaces de red en Proxmox VE

Este artículo explica cómo cambiar los nombres asignados a las interfaces de red físicas en Proxmox VE cuando el orden automático no coincide con la disposición lógica esperada.

El problema

A partir de Proxmox VE 8.2, el sistema utiliza fijación de nombres de interfaces (network interface pinning) para asignar nombres estables (nic0, nic1, nic2...) a las interfaces de red físicas basándose en su dirección MAC. Esto evita que los nombres cambien después de actualizaciones de kernel, drivers o BIOS.

Sin embargo, en algunos casos la numeración asignada automáticamente no coincide con el orden lógico de las ranuras PCI o la distribución física de las tarjetas de red.

Cómo funciona la fijación de nombres

Proxmox utiliza la herramienta pve-network-interface-pinning para generar archivos .link de systemd que asocian una dirección MAC con un nombre de interfaz estable.

Los archivos generados por la herramienta se almacenan en:

/usr/local/lib/systemd/network/

Cada archivo sigue el patrón 50-pve-nicX.link (o 50-pmx-nicX.link en instalaciones anteriores) con el siguiente formato:

[Match]
MACAddress=02:00:00:00:00:01
Type=ether

[Link]
Name=nic5
  • La sección [Match] identifica la interfaz física por su dirección MAC y tipo.
  • La sección [Link] define el nombre que se asignará a esa interfaz durante el arranque.

Método 1: Usar la herramienta oficial (recomendado)

La forma más segura de renombrar una interfaz es usar la herramienta oficial con la opción --target-name:

pve-network-interface-pinning generate --interface nic5 --target-name nic6

Este comando:

  • Genera el archivo .link correspondiente
  • Actualiza automáticamente /etc/network/interfaces
  • Actualiza la configuración del firewall del host
  • Actualiza la configuración de SDN si está en uso

Después de ejecutar el comando, verifique los cambios propuestos:

diff /etc/network/interfaces /etc/network/interfaces.new

Si los cambios son correctos, reinicie el servidor para aplicarlos:

reboot

Revertir cambios antes de reiniciar

Si detecta problemas en los archivos .new generados, puede revertir eliminando los archivos temporales y los .link creados:

rm /etc/network/interfaces.new
rm /usr/local/lib/systemd/network/50-pve-nic*.link

Método 2: Edición manual de archivos .link

Para intercambiar nombres entre dos interfaces existentes, puede editar manualmente los archivos .link.

Paso 1: Verificar los archivos existentes

ls /usr/local/lib/systemd/network/

Paso 2: Crear respaldos

cp /usr/local/lib/systemd/network/50-pve-nic5.link{,.bak}
cp /usr/local/lib/systemd/network/50-pve-nic6.link{,.bak}

Paso 3: Intercambiar los nombres

Modifique el valor Name= en cada archivo:

sed -i 's/Name=nic5/Name=nic6/' /usr/local/lib/systemd/network/50-pve-nic5.link
sed -i 's/Name=nic6/Name=nic5/' /usr/local/lib/systemd/network/50-pve-nic6.link

Paso 4: Actualizar el initramfs

Los archivos .link se copian al initramfs, por lo que es necesario actualizarlo:

update-initramfs -u -k all

Paso 5: Reiniciar el servidor

reboot

Notas importantes

  • Los bridges se actualizan automáticamente: Si las interfaces están asignadas a bridges (vmbr0, vmbr1, etc.) en /etc/network/interfaces, no necesita modificar esa configuración. Los bridges referencian el nombre de la interfaz, por lo que seguirán el intercambio automáticamente.
  • Nombres recomendados: Si asigna nombres personalizados, use nombres que comiencen con en o eth para que Proxmox reconozca la interfaz como dispositivo físico en la GUI. Evite nombres que puedan colisionar con el esquema de systemd (como eno, enp, ens).
  • El prefijo puede variar: Dependiendo de la versión de Proxmox, los archivos pueden usar el prefijo 50-pve- o 50-pmx-. Verifique con ls antes de editar.
  • Firewall y SDN: Si usa el firewall de Proxmox o SDN, verifique que las referencias a las interfaces se actualicen en /etc/pve/nodes/<nodename>/host.fw y /etc/pve/sdn/.

Solución de problemas

Los cambios no se aplican después del reinicio

  1. Verifique que editó los archivos en la ruta correcta.
  2. Confirme que ejecutó update-initramfs -u -k all.
  3. Revise los logs: journalctl -b | grep systemd-network.

No encuentro los archivos .link

Si el directorio /usr/local/lib/systemd/network/ está vacío, la fijación de nombres no está configurada. Puede generarla con:

pve-network-interface-pinning generate

Conflicto entre archivos .link

Si existen archivos con prefijos diferentes (50-pve- y 50-pmx-) para la misma interfaz, elimine los duplicados y conserve solo uno.