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

9

Quase sempre, eu 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, parece usar nomes de interface de rede previsíveis (isto é, "p4p1"), mas quando uso qualquer kernel alternativo, parece usar o método antigo (ie "eth0". ").

Embora não seja realmente relevante para esta questão, 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.

Eu não consegui determinar qual é a diferença entre os kernels. Eu suspeito de um parâmetro de configuração do kernel, mas não consegui identificar qual deles.

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

Notas adicionais: Em algum lugar que eu vi para desativar nomes de interface de rede previsíveis para adicionar isso ao grub:

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

então, achei 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 armazenado use o biosdevname, independentemente da configuração. E eu nunca consigo fazer com que o kernel de estoque gere um arquivo /etc/udev/rules.d/70-persistent-net.rules (mesmo que isso não seja o que eu quero), não importa a configuração de net.ifnames . Se eu tiver net.ifnames=1 , então pelo menos o kernel não armazenado gerará um arquivo /etc/udev/rules.d/70-persistent-net.rules incorreto.

Trechos de /var/log/udev :
estoque 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 4.1 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

Observação: eu passei temporariamente desse problema permitindo que um arquivo /etc/udev/rules.d/70-persistent-net.rules fosse criado e, em seguida, editando-o para nomes de dispositivos apropriados. Por fim, gostaria de me livrar do arquivo.

    
por Doug Smythies 26.05.2015 / 01:56

2 respostas

26

Você precisa distinguir entre três coisas:

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

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

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

Nomes de interface previsíveis

Nomes de interface previsíveis são uma coisa udevd desde que o v197 foi 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 seja upstream, no Ubuntu, você tem que optar usando net.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 execute

sudo update-grub

Em 14.04 ou 14.10, sem systemd, deve ser suficiente remover 70-persitent-net.rules, conforme descrito abaixo na nota.

Biosdevname

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

sudo apt-get install biosdevname

Nota

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

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

e execute

sudo update-grub

ou simplesmente desinstale o pacote.

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

regras do udev

Este é o padrão no desktop do Ubuntu . A regra udev /lib/udev/rules.d/75-persistent-net-generator.rules cria durante a primeira inicialização uma regra personalizada /etc/udev/rules.d/70-persistent-net.rules com o endereço MAC da sua interface para obter um nome persistente para sua interface.

Nota

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

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

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

    
por solsTiCe 26.05.2015 / 17:14
3
  1. No Ubuntu Server 16.04LTS, tudo 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 para salvar o arquivo

  3. em seguida, reinicie e ajuste o arquivo /etc/network/interfaces . Em seguida, reinicialize novamente

Espero que isso ajude alguém

    
por Jadey1412 04.10.2016 / 02:36