O nome da interface de rede é alterado após a atualização para 15.10 - udev changes

55

Atualizei uma máquina virtual executando o servidor Ubuntu 15.04 para o recém-lançado 15.10 estável.

Não havia problemas aparentes, mas após a reinicialização, a máquina perdeu sua conexão de rede. lspcimostrou o cartão correto e lsmodprovou que o motorista havia sido carregado.

Dicas sobre edição ou remoção /etc/udev/rules.d/70-persistent-net.rulesnão foram bem-sucedidas (ainda sem rede, sem novo arquivo), os famosos /lib/udev/write_net_rulesnem sequer existiam.

Não tenho muita pista sobre o udev e o systemd, então demorei algum tempo para descobrir em / sys / class / net que o nome da interface de rede mudou. Tornou-se ens32, que foi renomeado de eth0. Depois que eu mudei /etc/network/interfaces, a comunicação em rede foi ativada novamente.

Mas - por que isso acontece? E se isso acontecer, o arquivo de interfaces não deve ser atualizado automaticamente?

Agora que apaguei a placa de rede virtual e criei outra, eth0torna-se eno16777728, o que não é tão, hum, legal.

Esse comportamento (pelo menos o do procedimento de atualização) deve ser relatado como um bug?

Além disso, /etc/udev/rules.d/70-persistent-net.rulesagora está obsoleto? E (embora apenas parcialmente relacionado) e quanto /etc/udev/rules.d/70-persistent-cd.rules?)

Editar - pergunta adicional (após resposta aceita) A dependência do /etc/network/interfacesnome real da interface me incomodou. Eu tentei uma nova instalação do * ubuntu em outra máquina virtual. Para minha surpresa, /etc/network/interfacescontinha apenas uma referência ao dispositivo de loopback. No entanto, com a minha VM original, essa alteração impediu a rede. Então, o que mais eu preciso mudar?

Editar Bem, a partir de outro teste, descobri que um novo Ubuntu Server possui a placa de interface de rede /etc/network/interfaces, enquanto o XUbuntu não. Talvez esteja usando network-managerou algo mais.

JeffRSon
fonte
O mesmo bug aparece novamente no 17.04. Espero apenas durante a fase de pré-lançamento.
Avtomaton 12/03

Respostas:

56

No Ubuntu 15.10 (Wily Werewolf), iniciar com systemd / udev atribuirá automaticamente nomes de interface de rede estáveis ​​e previsíveis para todas as interfaces Ethernet, Wlan e Wwan locais ( origem ).

Os seguintes esquemas de nomenclatura diferentes para interfaces de rede agora são suportados pelo udev nativamente:

  1. Os nomes que incorporam Firmware / BIOS forneceram números de índice para dispositivos de bordo (exemplo eno1:)
  2. Nomes incorporando firmware / BIOS fornecida PCI Express números de índice de entalhe hotplug (exemplo: ens1)
  3. Nomes que incorporam a localização física / geográfica do conector do hardware (exemplo enp2s0:)
  4. Nomes que incorporam o endereço MAC da interface (exemplo enx78e7d1ea46da:)
  5. Nomeação ethX clássica e imprevisível, nativa do kernel (exemplo:) eth0- descontinuada

Por padrão, o systemd agora nomeará interfaces de acordo com a política:

  1. se essas informações do firmware forem aplicáveis ​​e disponíveis, voltando ao
  2. se essas informações do firmware forem aplicáveis ​​e disponíveis, voltando ao
  3. se aplicável, voltando a
  4. não é usado por padrão, mas está disponível se o usuário escolher.
  5. em todos os outros casos.

Como você desativa isso?

Você basicamente tem as seguintes opções:

  • Crie seu próprio esquema de nomenclatura manual, por exemplo, nomeando suas interfaces internet0 ou lan0. Para isso, crie seu próprio arquivo de regras do udev e defina a propriedade name para os dispositivos. Certifique-se de solicitá-lo antes do arquivo de políticas padrão, por exemplo, nomeando-o/etc/udev/rules.d/70-my-net-names.rules
  • Altere o arquivo de política padrão, para escolher um esquema de nomeação diferente, por exemplo, para nomear todos os nomes de interface após o endereço MAC por padrão cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules:, edite o arquivo e altere as linhas conforme necessário.
  • Passe a net.ifnames=0linha de comando do kernel.
kyodake
fonte
6
Essa é a fonte? Você pode adicionar um link para a página oficial nota de lançamento para o Ubuntu (eu tenho certeza que ele está em algum lugar, não pode encontrá-lo!)
Rmano
2
Sim, esta é a fonte.
kyodake
4
O que não faz sentido é que ele fez uma atualização, não uma nova instalação. Isso soa como um bug real do Ubuntu, porque a atualização deve deixar o sistema em um estado de funcionamento.
Will
11
@kyodake não há / usr / lib / udev pasta no Ubuntu 15.10, há / lib / udev
edid
11
@ Eddi: ok, bug corrigido.
precisa saber é
39

Existe uma maneira mais fácil contada pelo guia para iniciantes do ArchWiki .

Primeiro obtenha o endereço MAC do seu dispositivo

$ ip link

A saída mostra como

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000     
          link/ether 20:68:9d:xx:xx:xx brd ff:ff:ff:ff:ff:ff

O endereço MAC do seu dispositivo é o

20:68:9d:xx:xx:xx

Basta criar o arquivo (basta abrir com direitos sudo em um editor de texto)

$ nano /etc/udev/rules.d/10-network.rules    

Adicione a seguinte linha

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"

Substitua nome pelo nome desejado e aa: bb: cc: dd: ee: ff pelo endereço MAC do seu dispositivo.

Agora basta reiniciar o computador e o nome do dispositivo deveria ter mudado.

JonnyTischbein
fonte
A solução mais direta e simples! Agradecimentos maciços!
3bdalla
11
Para garantir que a regra NÃO se aplique às interfaces de vlan e bridge, adicione DRIVERS=="?*",depois ACTION=="add",. Veja também askubuntu.com/questions/767786/…
Donn Lee
16

Experimente o seguinte: Edite o seu /etc/default/grub. Mude a linha de

GRUB_CMDLINE_LINUX=""

para

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

e, finalmente, execute:

# update-grub

como root e reinicie o sistema.

Dênio Robson
fonte
Isso também funciona para o netboot. Eu tive sucesso adicionando o seguinte à instrução append no meu arquivo syslinux.cfg: append (...) net.ifnames=0 (...)
carestad
Essas soluções também funcionam perfeitamente no Ubuntu 16.04!
Nullldata 07/07
Eu tive que adicionar os parâmetros do GRUB acima (net.ifnames = 0) e remover as regras de renomeação do udev para fazer o vlans funcionar, mas agora está tudo bem. Obrigado pela solução.
Albert Veli
OBRIGADO. Estou instalando o Ubuntu Server 16.04 em um servidor sem cabeça e não tinha idéia de qual nome estava dando à interface de rede e, como resultado, o servidor não estava na rede. Fiz isso e verifiquei que o / etc / network / interfaces tinha "eth0" como o nome da interface e recolocou a unidade no servidor. Agora está online. As instruções para instalar o Ubuntu no Acer Aspire H340 estão desatualizadas no que diz respeito a isso, por isso escreverei alguma coisa na esperança de que outras pessoas que tentem o mesmo não percam tanto tempo quanto eu.
MetalMikester
5

Eu sei que isso pode ser um pouco tarde e a adição das 10-network.rules parece ter ajudado, mas não completamente. Eu tive que adicionar o nome do kernel do dispositivo para renomear. Aqui está como eu fiz o /etc/udev/rules.d/10-network.rules funcionar ...

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"

e mude o KERNEL == "" para o nome do seu kernel no dispositivo quando ele inicializar.

HTH

KC

Keith Clinton
fonte
3

Se você tiver uma nova instalação

apt-get remove biosdevname

Então

update-initramfs -u

Verifique se você possui o arquivo udev net ruels. Se sim, remova-o.

rm /etc/udev/rules.d/70-persistent-net.rules

Agora edite / etc / network / interfaces, renomeie as interfaces para eth0, eth1, ... etc.

Reiniciar

RJ
fonte
2

Eu consegui isso criando um arquivo:

root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
Mikael Lepistö
fonte