Eu uso a rede através do networking.service
e do /etc/network/interfaces
arquivo de configuração em um sistema Debian 12 (como mostrado aqui ).
Problema
Adicionei uma GPU e depois de reiniciar, o computador ficou offline. É um NAS sem display, então tive que conectar uma tela e um teclado.
E vi que ip addr
reportou uma nova interface: enp3s0
.
Problema: minha configuração é /etc/network/interfaces
mencionada apenas enp2s0
:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp2s0
iface enp2s0 inet dhcp
Solução temporária
Tive que substituir enp2s0
e enp3s0
correr systemctl restart networking
para recuperar a rede, e funcionou.
Se algum dia eu remover a GPU ou adicionar um dispositivo PCI-Express, o nome da interface de rede poderá mudar novamente e o servidor ficará offline.
Então eu alterei o arquivo conf para gerenciar enp2s0
ou enp3s0
:
# The primary network interface
# without GPU
allow-hotplug enp2s0
iface enp2s0 inet dhcp
# with GPU
allow-hotplug enp3s0
iface enp3s0 inet dhcp
Solução definitiva?
É seguro declarar conf para interfaces que podem ou não existir? Existe uma maneira mais limpa?
Uma opção para uma solução mais limpa é desabilitar nomes de interface previsíveis . Se você tiver apenas uma interface em seu sistema, ela sempre será
eth0
.Outra opção seria renomear a interface identificando-a primeiro pelo seu endereço MAC. Isso é descrito no mesmo documento ; por exemplo, dada uma interface com endereço MAC
52:54:00:bb:a4:80
, eu poderia colocar o seguinte em/etc/systemd/network/10-lan0.link
:Agora, sempre que o sistema inicializar, a interface com esse endereço MAC será nomeada
lan0
.Eu escreveria então
/etc/network/interfaces
assim:Como a interface é identificada pelo seu endereço MAC, isso funcionará independentemente de quais outras placas você tenha instalado no seu sistema.
Acho que a solução do pôster inicial , nomes de interface extras duplicados, já é a melhor. Começando pelos requisitos (servidor headless, NAS, mudanças limitadas de hardware), aqui está o porquê:
Foco nas necessidades:
Necessidades: habilitar DHCP em qualquer interface e não ficar bloqueado , o que também inclui sobreviver a atualizações de software ao longo dos anos .
A maneira mais simples e fácil de garantir que o DHCP esteja habilitado para qualquer NIC, sem
systemd
ouudev
com complexidade, é a NOMEAÇÃO DE INTERFACE CATCHALLIsso nos permite evitar
systemd
regras para renomear interfaces, eudev
regras, ambas dinâmicas, programáveis e sofisticadas, mas que não agregam nenhum benefício para esse caso de uso e criam pontos de falha extras:systemd
renomear com base no endereço mac ou mesmo correspondência de curinga funciona bem, mas se o seuinitrd
não regenerar, essa regra pode ser ignorada. Você também precisa alterar /etc/network/interfaces para corresponder à regra.udev
também pode fazer o mesmo, identificando uma NIC por endereço MAC ou curinga, mas então requer um script para configurar a interface, por exemplointerface=$1;ip link set dev $interface up;dhclient $interface
Mencionado na documentação do Debian como CATCHALL INTERFACE NAMING em Networking, especificamente config #Safety_nets . É mencionado como uma forma aceitável de adicionar robustez a um sistema, onde casos extremos ainda podem surpreendê-lo
Um exemplo
Começando com seu exemplo , crie registros de interface extras para um número razoável de nomes possíveis:
Alternativas a considerar, com opiniões para cada uma:
Trabalho, mas muito profundamente ligado a atualizações de sistema e outras complexidades
systemd
regras de link (mencionadas acima)udev
regras (mencionadas acima)Hacky e deve funcionar, mas não há benefício testado sobre a solução "top" (pegue todos os nomes de interface)
/etc/networking/interfaces
egallow-hotplug enp* / iface enp* inet dhcp
Funciona bem, mas provavelmente não vale a pena
netplan
, donetplan.io
pacote, pode controlar interfaces, corresponder nomes e delegar para outros sistemas, como o NetworkManager, mas o padrão ésystemd
Esta configuração de exemplo corresponde aos nomes e, em seguida, informa
systemd
(por meionetworkd
do renderizador) para habilitar o dhcp. Executesudo netplan apply
network-manager
pacote, controlado vianmcli
ounmtui
se você quiser um TUI. Geralmente uma ferramenta GUI para desktops, ele usa arquivos yaml internamente que são fáceis de usar.configuração de exemplo, anote o caminho e lembre-se de executar
sudo systemctl restart NetworkManager