{ "meta": { "title": "Nomes de interface persistentes | Documentação ProxMenux", "description": "Associe os nomes das interfaces Proxmox (eno1, enp3s0, …) aos endereços MAC através de ficheiros .link do systemd para os manter após a reenumeração PCI, atualizações do kernel e adição ou remoção de outras placas de rede.", "ogTitle": "Nomes de interface persistentes | Documentação ProxMenux", "ogDescription": "Impeça que os nomes das interfaces Proxmox mudem quando altera o hardware. Usa ficheiros .link do systemd associados ao endereço MAC." }, "header": { "title": "Nomes de interface persistentes", "description": "Gera um ficheiro .link do systemd por placa de rede física para associar o nome atribuído pelo kernel ao endereço MAC da placa. Após a aplicação no próximo reinício, os nomes das interfaces mantêm-se estáveis ao adicionar, remover ou mudar placas PCIe de lugar.", "section": "Rede" }, "intro": { "title": "O que isto faz", "body": "Para cada NIC físico no host, escreve um pequeno arquivo sob /etc/systemd/network/10-<iface>.link que diz: \"o dispositivo com este MAC deve ser sempre chamado este nome\". systemd-udevd aplica a regra em cada inicialização, antes que ifupdown leia /etc/network/interfaces." }, "problem": { "heading": "O problema que isto resolve", "intro": "O Linux deriva os nomes predefinidos das interfaces da topologia PCI — eno1 = integrada na placa principal, enp3s0 = placa no barramento PCI 3, slot 0, etc. O esquema de nomes é determinístico para a mesma disposição de hardware. Se a disposição mudar, os nomes mudam:", "items": [ "Adicione um GPU na frente de um NIC existente → o número de barramento NIC pode mudar → alterações de nome.", "Mudar uma placa para outro slot PCIe → o nome muda.", "BIOS / UEFI atualização que re-enumera dispositivos → nomes podem mudar.", "Substituir uma placa avariada pelo mesmo modelo noutro slot → o nome muda." ], "outro": "Após uma alteração destas, /etc/network/interfaces continua a referir o nome antigo; o bridge não se ativa e o host perde a rede. Configurar nomes persistentes impede que este cenário se repita." }, "howWorks": { "heading": "Como funciona", "arrowLabel": "por NIC", "nodes": { "detectLabel": "Detetar placas de rede físicas", "detectDetail": "ls /sys/class/net/\nexcluir vmbr / bond /\ndocker / veth / wireguard …", "readLabel": "Ler cada MAC", "readDetail": "cat /sys/class/net/\n '<'iface'>'/address", "writeLabel": "Gravar o ficheiro .link", "writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link" }, "minimalIntro": "Cada arquivo gerado é intencionalmente mínimo:", "minimalOutro": "No arranque, o systemd-udevd identifica o dispositivo pelo MAC e atribui o nome pedido antes da intervenção de outros componentes (ifupdown, nomes predefinidos do kernel). O prefixo 10- garante que estas regras carregam cedo, antes do ficheiro predefinido 99-default.link." }, "scope": { "heading": "O que é escrito, o que é ignorado", "headerType": "Tipo", "headerBehaviour": "Comportamento", "headerWhy": "Porquê?", "rows": [ { "type": "Placa de rede integrada / PCIe", "behaviour": "Arquivo .link escrito", "why": "Apoiado por um dispositivo PCI real — o caso em que a ferramenta se destina" }, { "type": "Wi-Fi (phy80211)", "behaviour": "Arquivo .link escrito", "why": "Tem um MAC real e beneficia da estabilidade do nome" }, { "type": "Pontes (vmbrX)", "behaviour": "Ignorado", "why": "Virtual; o nome vem do /etc/network/interfaces" }, { "type": "Bonds (bondX)", "behaviour": "Ignorado", "why": "Virtual; o nome do bond é definido pelo ifupdown" }, { "type": "veth / docker0 / br-XXXX", "behaviour": "Ignorado", "why": "Criados a pedido pelo Docker / LXC — não são hardware persistente" }, { "type": "tap / fwpr / fwln", "behaviour": "Ignorado", "why": "Criados a pedido pelo Proxmox para cada VM/CT" }, { "type": "WireGuard / Cilium / Tailscale", "behaviour": "Ignorado", "why": "Interfaces de software gerenciadas por seus próprios daemons" } ] }, "safety": { "heading": "Proteção: são criadas cópias de segurança dos ficheiros .link anteriores", "intro": "Se /etc/systemd/network/ já contiver ficheiros .link de uma execução anterior ou de outra ferramenta, são copiados para um diretório de segurança com data e hora antes de gerar os novos:", "outro": "Para voltar atrás: copie os arquivos de volta do diretório de backup e reinicie.", "rebootTitle": "Faz efeito na próxima reinicialização, não imediatamente", "rebootBody": "Alterações nos arquivos .link só se aplicam no arranque, quando o udev re-enumera dispositivos. A ferramenta informa que \"Alterações serão aplicadas após reiniciar\" por esta razão. Renomear uma interface ao vivo é arriscado e não tentado: um vmbr0 ativo com membros teria que ser reconfigurado atomicamente, por isso a operação é adiada para a próxima inicialização limpa." }, "afterReboot": { "heading": "Após a reinicialização", "intro": "Uma vez que os nomes são fixados, o fluxo de trabalho para futuras mudanças de hardware é simples:", "items": [ "Desligue, altere o hardware (adicione uma placa, mude de slot, …) e ligue novamente.", "Cada NIC mantém seu nome anterior porque seu MAC corresponde a um arquivo .link.", "Se um NIC é substituído (MAC diferente), ele recebe um nome padrão do kernel (enp<bus>s<slot>); execute novamente este menu para adicionar uma entrada .link para o MAC do novo cartão." ] }, "troubleshoot": { "heading": "Resolução de Problemas", "emptyTitle": "\"Nenhuma interface física encontrada\" após executar a ferramenta", "emptyBody": "O kernel não vê interfaces baseadas em PCI / phy80211 no host. Confirme com ls -l /sys/class/net/ — cada entrada deve ter uma ligação simbólica device (PCI) ou uma entrada phy80211 (Wi-Fi). Se ambas faltarem numa placa de rede real, o controlador não está carregado.", "noChangeTitle": "Após a reinicialização, os nomes não mudaram como esperado", "noChangeBody": "Verifique se o arquivo está presente e bem formado: cat /etc/systemd/network/10-<iface>.link. Em seguida, verifique registros udev: journalctl -u systemd-udevd -b | grep -i link. Uma causa comum é um parâmetro antigo do kernel net.ifnames=0 que desativa inteiramente a nomeação previsível — remova-a do /etc/default/grub, execute o update-grub, reinicie.", "undoTitle": "Quero anular os nomes persistentes", "undoBody": "Ou delete os arquivos .link (rm /etc/systemd/network/10-*.link) ou restaure do diretório de backup gerado na execução anterior. Reiniciar para aplicar." }, "related": { "heading": "Relacionado", "items": [ { "label": "Análise de ponte e reparo guiado", "href": "/docs/network/bridge-analysis", "tailRich": " — o caminho de recuperação quando os nomes já mudaram." }, { "label": "Análise de configuração e limpeza guiada", "href": "/docs/network/config-analysis", "tail": " — para remover blocos órfãos deixados pelas mudanças de nomes." }, { "label": "Diagnósticos", "href": "/docs/network/diagnostics", "tailRich": " — confirme os novos nomes com Mostrar tabela de roteamento após reiniciar." } ] } }