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

45

Eu atualizei uma máquina virtual rodando o servidor Ubuntu 15.04 para o recém-lançado novo estável 15.10.

Não houve problemas aparentes, mas após a reinicialização, a máquina perdeu sua conexão de rede. lspci mostrou o cartão correto e lsmod provou que o driver foi carregado.

Sugestões sobre edição ou remoção de /etc/udev/rules.d/70-persistent-net.rules não tiveram sucesso (ainda sem rede, sem novo arquivo), o famoso /lib/udev/write_net_rules nem existia.

Eu não tenho muita dica sobre o udev e o systemd, então demorei um pouco para encontrar 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 de 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 eu deletei a placa de rede virtual e criei outra, eth0 se torna eno16777728 , o que não é, uhm, legal.

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

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

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

Editar Bem, de outro teste eu descobri que um novo Ubuntu Servidor tem a placa de interface de rede em /etc/network/interfaces , enquanto o XUbuntu não. Talvez esteja usando network-manager ou outra coisa.

    
por JeffRSon 23.10.2015 / 22:13

6 respostas

49

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

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

  1. Nomes incorporando números de índice fornecidos pelo Firmware / BIOS para dispositivos on-board (exemplo: eno1 )
  2. Nomes que incorporam números de índice de slots de hotplug PCI Express fornecidos pelo Firmware / BIOS (exemplo: ens1 )
  3. Nomes incorporando localização física / geográfica do conector do hardware (exemplo: enp2s0 )
  4. Nomes incorporando o endereço MAC das interfaces (exemplo: enx78e7d1ea46da )
  5. Nomenclatura ethX nativa do kernel, imprevisível e clássica (exemplo: eth0 ) - descontinuada

Por padrão, o systemd agora nomeará as interfaces seguindo a política:

  1. se essa informação do firmware for aplicável e disponível, voltando a
  2. se essa informação do firmware for aplicável e disponível, voltando a
  3. se aplicável, voltando para
  4. não é usado por padrão, mas está disponível se o usuário optar por isso.
  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 de nome dos dispositivos. Certifique-se de encomendá-lo antes do arquivo de política padrão, por exemplo, nomeando-o /etc/udev/rules.d/70-my-net-names.rules
  • Altere o arquivo de política padrão, por escolher um esquema de nomenclatura diferente, por exemplo, para nomear todos os nomes de interface após seu 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 lá e altere as linhas conforme necessário.
  • Passe o net.ifnames=0 na linha de comando do kernel.
por kyodake 24.10.2015 / 01:23
34

Existe uma maneira mais fácil de ser contada pelo Guia para iniciantes do ArchWiki .

Primeiro, obtenha o endereço MAC dos seus dispositivos

$ ip link

A saída é mostrada por like

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 dos seus dispositivos é o

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

Basta criar o arquivo (basta abrir com direitos de 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 o nome pelo nome desejado por aa: bb: cc: dd: ee: ff com o endereço MAC do dispositivo.

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

    
por JonnyTischbein 27.10.2015 / 14:27
14

Tente isto: Editar 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 seu sistema.

    
por Dênio Robson 12.02.2016 / 02:15
3

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

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

e altere o KERNEL == "" para o que seu kernel está nomeando o dispositivo ao inicializar.

HTH

K.C.

    
por Keith Clinton 07.11.2015 / 03:15
2

Se você tiver uma nova instalação

apt-get remove biosdevname

Então

update-initramfs -u

Verifique se você tem o arquivo ruff do udev net. Em caso afirmativo, remova-o.

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

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

Reinicie

    
por R J 26.11.2015 / 10:41
0

Eu tenho esse trabalho 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"
    
por Mikael Lepistö 19.08.2016 / 11:44