Uso de nomes de interface de rede previsíveis com kernels alternativos

12

Quase sempre, uso kernels do PPA do kernel do Ubuntu , ou kernels que eu mesmo compilei, usando a configuração do kernel do Ubuntu.

O problema é que quando estou usando o kernel padrão, ele parece usar nomes de interface de rede previsíveis (por exemplo, "p4p1"), mas quando eu uso qualquer kernel alternativo, ele parece usar o método antigo (por exemplo, "eth0").

Embora não seja realmente relevante para essa pergunta, tive uma falha no disco rígido no meu computador de teste e estou fazendo uma nova instalação do Ubuntu Server 14.04.2.

Não consegui determinar qual é a diferença entre os kernels. Suspeito de um parâmetro de configuração do kernel, mas não foi possível identificar qual.

Minha pergunta: como posso fazer com que nomes de interface de rede previsíveis funcionem consistentemente em todos os kernels?

Notas adicionais: Em algum lugar, vi desabilitar os nomes previsíveis da interface de rede para adicionar ao grub:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

então, pensei que o oposto poderia ajudar:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

mas não fez diferença. Na verdade, nunca consigo fazer com que o kernel não-estoque use biosdevname, independentemente da configuração. E nunca consigo que o kernel de estoque gere um /etc/udev/rules.d/70-persistent-net.rulesarquivo (mesmo que não seja isso que eu queira), independentemente da configuração de net.ifnames. Se eu tiver net.ifnames=1, pelo menos o kernel não-estoque não gera um /etc/udev/rules.d/70-persistent-net.rulesarquivo incorreto .

Trechos de /var/log/udev:
estoque do kernel:

KERNEL[9.216730] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV  [9.241073] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1

Do kernel do PPA do Ubuntu 4.1RC5:

KERNEL[10.772566] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV  [11.185866] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227

Nota: Eu mudei temporariamente esse problema, permitindo que um /etc/udev/rules.d/70-persistent-net.rulesarquivo fosse criado e, em seguida, editando-o para nomes de dispositivos adequados. Por fim, gostaria de me livrar do arquivo.

Doug Smythies
fonte

Respostas:

33

Você precisa distinguir entre três coisas:

  • Nomes de interfaces previsíveis
  • biosdevname
  • Regra do udev 70-persistent.rules

Você escolhe usar uma dessas soluções, mas não usa 2 ou 3 ao mesmo tempo. (De fato, você pode apenas um ter precedência e mascarar o (s) outro (s))

Uma boa introdução à situação atual é o post na lista de discussão dev do ubuntu

Nomes de interface previsíveis

Nomes de interface previsíveis é um udevd coisa desde V197 gerado em/lib/udev/rules.d/80-net-setup-link.rules

systemd usa por padrão o novo nome de interface previsível. No entanto , a menos que o sistema upd, no Ubuntu, você tenha que optar por usarnet.ifnames=1

Não importa a versão do kernel que você está executando. Mas você precisa usar a linha de comando do kernel para configurá-lo alterando a configuração do grub /etc/default/grub, como:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

e corra

sudo update-grub

Nas versões 14.04 ou 14.10, sem o systemd, deve ser suficiente remover as 70-persitent-net.rules, conforme descrito abaixo na nota.

Biosdevname

biosdevname é uma tentativa da dell de resolver um problema semelhante ao nome de interface previsível no systemd. É o padrão no servidor ubuntu . Você pode obtê-lo instalando o pacotebiosdevname

sudo apt-get install biosdevname

Nota

Você pode desativá-lo usando a linha de comando do kernel no grub config:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

e corra

sudo update-grub

ou simplesmente desinstale o pacote.

sudo apt-get purge biosdevname
sudo update-initramfs -u

regras do udev

Esse é o padrão na área de trabalho do Ubuntu . A regra do udev/lib/udev/rules.d/75-persistent-net-generator.rules cria, durante a primeira inicialização, regras personalizadas /etc/udev/rules.d/70-persistent-net.rulescom endereço MAC da sua interface para obter o nome persistente da sua interface.

Nota

Se você já estiver usando regras do udev, precisará remover /etc/udev/rules.d/70-persistent-net.rulese evitar que ele seja regenerado a cada inicialização que você precisa executar

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

Depois disso, se você usar o systemd , precisará ativar o nome de interface previsível, conforme descrito acima.

solstício
fonte
1
Obrigado pela sua resposta. Meu computador é uma edição para servidor, não para desktop. Vou enviar uma edição à sua resposta para lidar com a diferença (o nome do biosdev foi instalado por padrão e, portanto, precisa ser especificamente desabilitado via grub). O erro no meu pensamento foi que eu esperava nomes de interface diferentes com net.ifnames=1e biosdevname=0, conforme descrito no link que você forneceu, mas recebo os antigos eth0 e eth1. Enfim, ele funciona para qualquer kernel agora (sem /etc/udev/rules.d/70-persistent-net.rules), depois que eu editei /etc/network/interfacespara refletir os nomes de interface adequados.
Doug Smythies
Estou na área de trabalho do ubuntu 15.10 e não acho mais que o udev seja o padrão. Meus dispositivos de rede são nomeados wlp4s0e enp0s31f6, e os arquivos /etc/udev/rules.d/70-persistent-net.rulese /lib/udev/rules.d/75-persistent-net-generator.rulesnão existem.
Jonathan Hartley
No Ubuntu 16.04 (especificamente systemd 220-7 ), o 75-persistent-net-generator.rulesarquivo é preterido em favor de net.ifnames.
200_success
4
  1. No Ubuntu Server 16.04LTS, tudo o que fiz foi executado:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Em seguida, crie o arquivo usando

    sudo vi /etc/systemd/network/10-internet.link
    

    e adicione o seguinte

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq salvar o arquivo

  3. depois reinicie e ajuste seu /etc/network/interfacesarquivo .. depois reinicie novamente

Espero que isso ajude alguém

Jadey1412
fonte