Uso de nombres de interfaz de red predecibles con núcleos alternativos

12

Casi constantemente, uso los núcleos del PPA del núcleo de Ubuntu , o los núcleos que he compilado yo mismo, utilizando la configuración del núcleo de Ubuntu.

El problema es que cuando estoy usando el kernel de stock parece que el uso predeterminado es el uso de nombres de interfaz de red predecibles (es decir, "p4p1"), pero cuando uso cualquier kernel alternativo, parece que el método anterior es predeterminado (es decir, "eth0").

Si bien no es realmente relevante para esta pregunta, tuve una falla en el disco duro en mi computadora de prueba y estoy haciendo una nueva instalación de Ubuntu Server 14.04.2.

No he podido determinar cuál es la diferencia entre los núcleos. Sospecho que hay un parámetro de configuración del núcleo, pero no he podido identificar cuál.

Mi pregunta: ¿Cómo puedo hacer que los nombres de interfaz de red predecibles funcionen de manera consistente en todos los núcleos?

Notas adicionales: En algún lugar vi deshabilitar nombres de interfaz de red predecibles para agregar esto a grub:

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

Entonces, pensé que lo contrario podría ayudar:

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

Pero no hizo ninguna diferencia. En realidad, nunca puedo hacer que el kernel no disponible use biosdevname, sin importar la configuración. Y nunca puedo conseguir que el núcleo de valores genere un /etc/udev/rules.d/70-persistent-net.rulesarchivo (aunque eso no es lo que quiero), sin importar la configuración de net.ifnames. Si es así net.ifnames=1, al menos el kernel no disponible no genera un /etc/udev/rules.d/70-persistent-net.rulesarchivo incorrecto .

Extractos de /var/log/udev:
stock 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

Desde Ubuntu PPA kernel 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: He superado temporalmente este problema permitiendo /etc/udev/rules.d/70-persistent-net.rulesque se creara un archivo y luego editándolo para los nombres de dispositivo adecuados. En última instancia, me gustaría deshacerme del archivo.

Doug Smythies
fuente

Respuestas:

33

Debe distinguir entre 3 cosas:

  • Nombres de interfaces predecibles
  • biosdevname
  • 70-persistent.rules udev rule

Usted elige usar una de estas soluciones pero no usa 2 o 3 al mismo tiempo. (De hecho, puedes pero uno tendrá prioridad y enmascarará a los otros)

Una buena introducción a la situación actual es la publicación en la lista de correo de desarrollo de ubuntu

Nombres de interfaz predecibles

Nombres de interfaz predecibles es un udevd cosa desde el V197 genera en/lib/udev/rules.d/80-net-setup-link.rules

systemd usa por defecto el nuevo nombre de interfaz predecible. Sin embargo , a menos que systemd ascendente, en Ubuntu, tenga que optar por usarnet.ifnames=1

No importa la versión del kernel que esté ejecutando. Pero necesita usar la línea de comando del núcleo para configurarlo cambiando la configuración de grub /etc/default/grub, como:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

y correr

sudo update-grub

En 14.04 o 14.10, sin systemd, debería ser suficiente para eliminar 70-persitent-net.rules, como se describe a continuación en la nota.

Biosdevname

biosdevname es un intento de Dell para resolver un problema similar al nombre de interfaz predecible en systemd. Es el valor predeterminado en el servidor ubuntu . Puedes tenerlo instalando el paquetebiosdevname

sudo apt-get install biosdevname

Nota

Puede deshabilitarlo usando la línea de comando del kernel en grub config:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

y correr

sudo update-grub

o simplemente desinstale el paquete.

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

reglas de udev

Este es el valor predeterminado en el escritorio de Ubuntu . La regla udev/lib/udev/rules.d/75-persistent-net-generator.rules crea durante el primer arranque una regla personalizada /etc/udev/rules.d/70-persistent-net.rulescon la dirección MAC de su interfaz para obtener un nombre persistente para su interfaz.

Nota

Si ya está utilizando las reglas de udev, debe eliminar /etc/udev/rules.d/70-persistent-net.rulesy para evitar que se regenere en cada arranque, debe ejecutar

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

Después de eso, si usa systemd , debe optar por un nombre de interfaz predecible, como se describe anteriormente.

solsticio
fuente
1
Gracias por tu respuesta. Mi computadora es una edición de servidor, no una edición de escritorio. Enviaré una edición a su respuesta para tratar la diferencia (biosdevname se instaló de forma predeterminada y, por lo tanto, debe deshabilitarse específicamente a través de grub). El error en mi pensamiento fue que esperaba diferentes nombres de interfaz con net.ifnames=1y biosdevname=0, como se describe en el enlace que proporcionó, pero obtengo los viejos eth0 y eth1. De todos modos, ahora funciona para cualquier núcleo (sin /etc/udev/rules.d/70-persistent-net.rules), después de editarlo /etc/network/interfacespara reflejar los nombres de interfaz adecuados.
Doug Smythies
Estoy en el escritorio ubuntu 15.10, y ya no creo que udev sea el predeterminado. Mis dispositivos de red se nombran wlp4s0y enp0s31f6, y los archivos /etc/udev/rules.d/70-persistent-net.rulesy /lib/udev/rules.d/75-persistent-net-generator.rulesno existen.
Jonathan Hartley
En Ubuntu 16.04 (específicamente systemd 220-7 ), el 75-persistent-net-generator.rulesarchivo está en desuso a favor de net.ifnames.
200_success
4
  1. En Ubuntu Server 16.04LTS todo lo que hice fue ejecutar:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Luego cree el archivo usando

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

    y agregue lo siguiente

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

    :wq para guardar el archivo

  3. luego reinicie y ajuste su /etc/network/interfacesarchivo ... luego reinicie nuevamente

Espero que esto ayude a alguien

Jadey1412
fuente