El nombre de la interfaz de red cambia después de la actualización a 15.10 - cambios de udev

55

Actualicé una máquina virtual que ejecuta el servidor Ubuntu 15.04 a la nueva versión estable 15.10.

No hubo problemas aparentes, pero después de reiniciar la máquina perdió su conexión de red. lspcimostró la tarjeta correcta y lsmoddemostró que el controlador había sido cargado.

Las sugerencias sobre la edición o eliminación /etc/udev/rules.d/70-persistent-net.rulesno tuvieron éxito (todavía no hay red, no hay archivo nuevo), el famoso /lib/udev/write_net_rulesni siquiera existía.

No tengo mucha idea con respecto a udev y systemd, por lo que me tomó un tiempo encontrar en / sys / class / net que cambió el nombre de la interfaz de red. Se convirtió ens32, que pasó a llamarse eth0. Después de cambiar la /etc/network/interfacesred, la comunicación se habilitó nuevamente.

Pero, ¿por qué sucede esto? Y si sucede, ¿no debería actualizarse automáticamente el archivo de interfaces?

Ahora que eliminé la tarjeta de red virtual y creé otra, se eth0convierte en eno16777728, lo que no es tan agradable.

¿Debería este comportamiento (al menos el del procedimiento de actualización) informarse como un error?

Además, ¿está /etc/udev/rules.d/70-persistent-net.rulesobsoleto ahora? Y (aunque solo en parte relacionado) ¿qué pasa /etc/udev/rules.d/70-persistent-cd.rules?)

Editar - pregunta adicional (después de la respuesta aceptada) La dependencia del /etc/network/interfacesnombre real de la interfaz me molestó. Intenté una nueva instalación de * ubuntu en otra máquina virtual. Para mi sorpresa, /etc/network/interfacescontenía una referencia al dispositivo loopback solamente. Sin embargo, con mi VM original, este cambio impidió que surgiera la red. Entonces, ¿qué más necesito cambiar?

Editar Bueno, en otra prueba descubrí que un nuevo servidor Ubuntu tiene la tarjeta de interfaz de red /etc/network/interfaces, mientras que XUbuntu no. Tal vez está usando network-managero algo más.

JeffRSon
fuente
El mismo error aparece nuevamente en 17.04. Espero solo durante la etapa de prelanzamiento.
avtomaton

Respuestas:

56

En Ubuntu 15.10 (Wily Werewolf), comenzar con systemd / udev asignará automáticamente nombres de interfaz de red predecibles y estables para todas las interfaces locales de Ethernet, Wlan y Wwan ( fuente ).

Los siguientes esquemas de nomenclatura diferentes para interfaces de red ahora son compatibles con udev de forma nativa:

  1. Nombres que incorporan Firmware / BIOS proporcionan números de índice para los dispositivos de a bordo (ejemplo: eno1)
  2. Nombres que incorporan Firmware / BIOS proporcionado PCI Express números de índice de ranura de conexión en caliente (ejemplo: ens1)
  3. Nombres que incorporan ubicación física / geográfica del conector del hardware (ejemplo: enp2s0)
  4. Nombres que incorporan la dirección MAC de las interfaces (ejemplo: enx78e7d1ea46da)
  5. Nombramiento clásico e impredecible del núcleo ethX nativo (ejemplo:) eth0- obsoleto

Por defecto, systemd ahora nombrará interfaces siguiendo la política:

  1. si esa información del firmware es aplicable y está disponible, recurriendo a
  2. si esa información del firmware es aplicable y está disponible, recurriendo a
  3. si corresponde, volviendo a
  4. no se usa de manera predeterminada, pero está disponible si el usuario lo elige.
  5. en todos los otros casos.

¿Cómo deshabilitas esto?

Básicamente tiene las siguientes opciones:

  • Cree su propio esquema de nomenclatura manual, por ejemplo nombrando sus interfaces internet0 o lan0. Para eso, cree su propio archivo de reglas udev y configure la propiedad de nombre para los dispositivos. Asegúrese de pedirlo antes del archivo de política predeterminado, por ejemplo, nombrándolo/etc/udev/rules.d/70-my-net-names.rules
  • Modifique el archivo de política predeterminado, para elegir un esquema de nomenclatura diferente, por ejemplo, para nombrar todos los nombres de interfaz después de su dirección MAC de forma predeterminada: cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rulesluego edite el archivo allí y cambie las líneas según sea necesario.
  • Pase el net.ifnames=0en la línea de comando del núcleo.
kyodake
fuente
66
¿Es esta la fuente? ¿Puedes agregar un enlace a la página oficial de la nota de lanzamiento de Ubuntu (estoy seguro de que está en algún lugar, no puedo encontrarlo)
Rmano
2
Sí, esta es la fuente.
kyodake
44
Lo que no tiene sentido es que hizo una actualización, no una instalación nueva. Esto suena como un error real de Ubuntu, porque la actualización debería dejar el sistema en funcionamiento.
Se
1
@kyodake no hay una carpeta / usr / lib / udev en ubuntu 15.10, hay / lib / udev
EdiD
1
@EdiD: ok, error corregido.
kyodake
39

Hay una manera más fácil contada por la Guía para principiantes de ArchWiki .

Primero obtenga la dirección MAC de sus dispositivos

$ ip link

La salida se muestra 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

La dirección MAC de sus dispositivos es la

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

Simplemente cree el archivo (simplemente ábralo con derechos sudo en un editor de texto)

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

Agregar línea siguiente

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

Reemplace el nombre con su nombre deseado y aa: bb: cc: dd: ee: ff con la dirección MAC de sus dispositivos.

Ahora solo reinicie su computadora y el nombre del dispositivo debería haber cambiado.

JonnyTischbein
fuente
¡La solución más directa y sencilla! ¡Muchas gracias!
3bdalla
1
Para asegurarse de que la regla NO se aplique a sus interfaces vlan y bridge, agregue DRIVERS=="?*",después ACTION=="add",. Ver también askubuntu.com/questions/767786/…
Donn Lee
16

Prueba esto: edita tu /etc/default/grub. Cambiar la línea de

GRUB_CMDLINE_LINUX=""

a

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

y finalmente corre:

# update-grub

como root y reinicie su sistema.

Dênio Robson
fuente
Esto también funciona para netboot. Tuve éxito al agregar lo siguiente a la declaración adjunta en mi archivo syslinux.cfg: append (...) net.ifnames=0 (...)
carestad
¡Estas soluciones también funcionan perfectamente en Ubuntu 16.04!
Nullldata
Tuve que agregar los parámetros GRUB anteriores (net.ifnames = 0) y eliminar las reglas de cambio de nombre de udev para que vlans funcione, pero ahora todo está bien. Gracias por la solucion.
Albert Veli
GRACIAS. Estoy instalando Ubuntu Server 16.04 en un servidor sin cabeza y no tenía idea de qué nombre le estaba dando a la interfaz de red y, como resultado, el servidor no estaba en la red. Hice esto y me aseguré de que / etc / network / interfaces tuviera "eth0" como nombre de la interfaz y volviera a colocar la unidad en el servidor. Ahora está en línea. Las instrucciones para instalar Ubuntu en el Acer Aspire H340 están desactualizadas en lo que respecta a esto, por lo que escribiré algo con la esperanza de que otros que intenten lo mismo no pierdan tanto tiempo como yo.
MetalMikester
5

Sé que esto puede ser un poco tarde y la adición de 10-network.rules parece haber ayudado, pero no del todo. Tuve que agregar el nombre del núcleo del dispositivo para cambiar el nombre. Así es como conseguí que /etc/udev/rules.d/10-network.rules funcionara ...

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

y cambie el KERNEL == "" a lo que su núcleo nombra al dispositivo cuando se inicia.

HTH

KC

Keith Clinton
fuente
3

Si tienes una instalación nueva

apt-get remove biosdevname

Entonces

update-initramfs -u

Verifique si tiene un archivo udev net ruels. Si es así, retírelo.

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

Ahora edite / etc / network / interfaces, cambie el nombre de las interfaces a eth0, eth1, ... etc.

Reiniciar

RJ
fuente
2

Obtuve esto trabajando creando un archivo:

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ö
fuente