{
"meta": {
"title": "Nombres persistentes de interfaz | ProxMenux Documentation",
"description": "Fija los nombres de interfaz de Proxmox (eno1, enp3s0, …) a direcciones MAC mediante ficheros .link de systemd para que los nombres sobrevivan a la re-enumeración PCI, actualizaciones de kernel y al añadir / quitar otras NICs.",
"ogTitle": "Nombres persistentes de interfaz | ProxMenux Documentation",
"ogDescription": "Evita que los nombres de interfaz de Proxmox cambien al modificar el hardware. Usa ficheros .link de systemd basados en la dirección MAC."
},
"header": {
"title": "Nombres persistentes de interfaz",
"description": "Genera un fichero .link de systemd por cada NIC física que fija el nombre asignado por el kernel a la MAC de la tarjeta. Una vez aplicado (tras el siguiente reinicio), los nombres de interfaz dejan de moverse cuando añades, quitas o mueves tarjetas PCIe.",
"section": "Red"
},
"intro": {
"title": "Qué hace",
"body": "Para cada NIC física del host, escribe un pequeño fichero en /etc/systemd/network/10-<iface>.link que dice: \"el dispositivo con esta MAC debe llamarse siempre así\". systemd-udevd aplica la regla en cada arranque, antes de que ifupdown lea /etc/network/interfaces."
},
"problem": {
"heading": "El problema que resuelve",
"intro": "Linux deriva los nombres de interfaz por defecto a partir de la topología PCI — eno1 = onboard, enp3s0 = la tarjeta en el bus PCI 3, slot 0, etc. El esquema de naming es determinista dado el mismo layout de hardware. Cambia el layout y los nombres se mueven:",
"items": [
"Añade una GPU delante de una NIC existente → el número de bus de la NIC puede cambiar → el nombre cambia.",
"Mueve una tarjeta a otro slot PCIe → el nombre cambia.",
"Actualización de BIOS / UEFI que re-enumera los dispositivos → los nombres pueden cambiar.",
"Reemplaza una tarjeta defectuosa por el mismo modelo en otro slot → el nombre cambia."
],
"outro": "Tras un cambio así, /etc/network/interfaces sigue referenciando el nombre antiguo; el bridge no levanta; el host pierde la red. Configurar nombres persistentes evita que este escenario vuelva a pasar."
},
"howWorks": {
"heading": "Cómo funciona",
"arrowLabel": "por NIC",
"nodes": {
"detectLabel": "Detectar NICs físicas",
"detectDetail": "ls /sys/class/net/\nfiltrar vmbr / bond /\ndocker / veth / wireguard …",
"readLabel": "Leer cada MAC",
"readDetail": "cat /sys/class/net/\n '<'iface'>'/address",
"writeLabel": "Escribir fichero .link",
"writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link"
},
"minimalIntro": "Cada fichero generado es intencionalmente mínimo:",
"minimalOutro": "En el arranque, systemd-udevd hace match del dispositivo por MAC y asigna el nombre pedido antes de que ningún otro componente (ifupdown, naming por defecto del kernel) llegue a él. El prefijo 10- del fichero asegura que estas reglas se carguen pronto, antes del 99-default.link por defecto."
},
"scope": {
"heading": "Qué se escribe y qué se omite",
"headerType": "Tipo",
"headerBehaviour": "Comportamiento",
"headerWhy": "Por qué",
"rows": [
{
"type": "NIC onboard / PCIe",
"behaviour": "Se escribe fichero .link",
"why": "Respaldada por un dispositivo PCI real — el caso para el que está la herramienta"
},
{
"type": "Wi-Fi (phy80211)",
"behaviour": "Se escribe fichero .link",
"why": "Tiene una MAC real y se beneficia de la estabilidad de nombre"
},
{
"type": "Bridges (vmbrX)",
"behaviour": "Se omite",
"why": "Virtual; el nombre viene de /etc/network/interfaces"
},
{
"type": "Bonds (bondX)",
"behaviour": "Se omite",
"why": "Virtual; el nombre del bond lo fija ifupdown"
},
{
"type": "veth / docker0 / br-XXXX",
"behaviour": "Se omite",
"why": "Creadas bajo demanda por Docker / LXC — no son hardware persistente"
},
{
"type": "tap / fwpr / fwln",
"behaviour": "Se omite",
"why": "Creadas bajo demanda por Proxmox por VM/CT"
},
{
"type": "WireGuard / Cilium / Tailscale",
"behaviour": "Se omite",
"why": "Interfaces software gestionadas por sus propios daemons"
}
]
},
"safety": {
"heading": "Red de seguridad: se respaldan los .link anteriores",
"intro": "Si /etc/systemd/network/ ya contiene ficheros .link (de una ejecución anterior u otra herramienta), se copian a un directorio de backup con timestamp antes de generar los nuevos:",
"outro": "Para hacer rollback: copia los ficheros desde el directorio de backup y reinicia.",
"rebootTitle": "Tiene efecto en el siguiente reinicio, no inmediatamente",
"rebootBody": "Los cambios en ficheros .link solo se aplican en el arranque, cuando udev re-enumera los dispositivos. La herramienta reporta \"Changes will apply after reboot\" por este motivo. Renombrar una interfaz en vivo es arriesgado y no se intenta: un vmbr0 activo con miembros tendría que reconfigurarse atómicamente, por eso la operación se difiere al siguiente arranque limpio."
},
"afterReboot": {
"heading": "Tras el reinicio",
"intro": "Una vez fijados los nombres, el flujo para futuros cambios de hardware es simple:",
"items": [
"Apaga, cambia hardware (añadir tarjeta, mover slot, …), arranca.",
"Cada NIC mantiene su nombre anterior porque su MAC coincide con un fichero .link.",
"Si una NIC se reemplaza (MAC distinta), obtiene un nombre del kernel por defecto (enp<bus>s<slot>); vuelve a ejecutar este menú para añadir una entrada .link con la MAC de la tarjeta nueva."
]
},
"troubleshoot": {
"heading": "Solución de problemas",
"emptyTitle": "\"No physical interfaces found\" tras ejecutar la herramienta",
"emptyBody": "El host no tiene interfaces respaldadas por PCI / phy80211 visibles para el kernel. Confirma con ls -l /sys/class/net/ — cada entrada debería tener un symlink device (PCI) o una entrada phy80211 (Wi-Fi). Si faltan ambos para lo que debería ser una NIC real, el driver no está cargado.",
"noChangeTitle": "Tras el reinicio, los nombres no han cambiado como esperaba",
"noChangeBody": "Comprueba que el fichero está presente y bien formado: cat /etc/systemd/network/10-<iface>.link. Después mira los logs de udev: journalctl -u systemd-udevd -b | grep -i link. Una causa habitual es un parámetro de kernel net.ifnames=0 residual que deshabilita el naming predictivo por completo — quítalo de /etc/default/grub, ejecuta update-grub y reinicia.",
"undoTitle": "Quiero deshacer el naming persistente",
"undoBody": "O bien borra los ficheros .link (rm /etc/systemd/network/10-*.link) o restaura desde el directorio de backup generado en la ejecución anterior. Reinicia para aplicar."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Análisis de bridges y reparación guiada",
"href": "/docs/network/bridge-analysis",
"tailRich": " — el camino de recuperación cuando los nombres ya se han movido."
},
{
"label": "Análisis de config y limpieza guiada",
"href": "/docs/network/config-analysis",
"tail": " — para eliminar bloques huérfanos dejados por los cambios de nombre."
},
{
"label": "Diagnóstico",
"href": "/docs/network/diagnostics",
"tailRich": " — confirma los nuevos nombres con Mostrar tabla de rutas tras el reinicio."
}
]
}
}