cambiar el nombre de la interfaz de red en Ubuntu 16.04 con systemd falla

14

Estoy usando un servidor Ubuntu 16.04 LTS sin cabeza con dos tarjetas de red físicas, que se denominan enp5s0f0 y enp5s0f1.

Me gustaría cambiar el nombre de estas interfaces y seguí este ejemplo . Por lo tanto, creé el archivo /lib/systemd/network/70-myinterface.link(la fuente original no parece funcionar) de esta manera (configuré la dirección mac correcta):

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

y reinició el servidor. Lamentablemente, la interfaz no cambió de nombre, aunque udevadmmuestra que se utiliza mi archivo de configuración:

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

¿Tienes alguna idea de por qué el cambio de nombre no funcionó?

muffel
fuente
1
Pensé que / etc / systemd / network sería la mejor ubicación para crear este archivo.
NGRhodes
@NGRhodes Estaba asumiendo un error tipográfico basado en el ejemplo citado, pero ¿quién sabe?
Élder Geek
También, cheque networkmanager no se está ejecutando, superuser.com/a/948996/127393 sugiere networkmanager prioritarios
NGRhodes
Después de colocar la recompensa, noté que hay un nuevo archivo de reglas de udev en 16.04 que siempre obliga a los nombres de tipo de dirección MAC para adaptadores USB antes de consultar networkd (/lib/udev/rules.d/73-usb-net-by -mac.rules). Esto no se siente del todo bien ... Tuve que desactivar su regla por completo, lo que hizo que el archivo .link volviera a funcionar. Sin embargo, no estoy seguro de si es la opción más correcta.
Antti Haapala
Usar MACAddress= [Match]no funciona para mí también en linkarchivos, así que terminé usando en su Path=lugar. Deberías intentarlo también. También puede verificar qué linkarchivo coincide con su dispositivo con el udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1comando
webKnjaZ

Respuestas:

8

Esto puede o no ayudar ... Comprobaría /etc/udev/rules.d y vería si tiene 70-persistent-net.rules. Debería poder cambiarles el nombre usando ese archivo

El mío se ve así:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Si tiene las entradas para sus tarjetas en este archivo, puede cambiar el nombre a lo que quiera cambiando "NAME = TheNameYouWant"

John Orion
fuente
Tocar el asunto exacto. Estaba a punto de publicar una respuesta en la que mencioné que curiosamente, hay algunas personas que usan Ubuntu que han dicho que el método de @muffel para cambiar el nombre de su red no funcionó. Esto era lo que iba a sugerir ... 1
anonymous2
Aquí debería ir la recompensa.
EKons
5

Una opción que no requiere reglas udev (una alternativa a los archivos systemd-networkd .link) que funciona con Ubuntu 16.04 y muchas otras versiones de Linux es

Ejemplo:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

En el ejemplo anterior, peth0 es el nombre de la interfaz original y eth0 es el nombre deseado. Ingrese el nombre que tiene actualmente donde está peth0 y el nombre que desea donde está eth0. No se requiere reiniciar ni se sugiere. Repita el proceso para la segunda tarjeta de interfaz

Probado en Ubuntu 16.04 con kernel 4.4.0-36-generic # 55-Ubuntu

Editar: si está buscando una solución persistente que sobreviva al reinicio, vea Cambiar el nombre de las interfaces de red Ubuntu 16.04

Fuentes: https://www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

Pruebas.

Nota: dado que el método @ antti-haapala funcionó antes y de repente se detuvo, es posible que le interese saber que "Como un caso especial, un archivo vacío (tamaño de archivo 0) o un enlace simbólico con el mismo nombre apuntando a / dev / null desactiva el archivo de configuración completamente (está "enmascarado") ". <-Fuente

Elder Geek
fuente
He sido muy útil su respuesta, gracias + 1 @ElderGeek
1
@Alberto ¡Me alegra que haya ayudado!
Élder Geek
Por desgracia, no es persistente, pero aún así + 1
delfiler
@delfiler Gracias por tu comentario. Si te entiendo correctamente, estás buscando una solución que sobreviva al reinicio. ¿Estoy claro en eso?
Élder Geek
@delfiler ver askubuntu.com/questions/767786/…
Elder Geek
3
  • Los tres métodos de nombres personalizados, explicados systemd: Nombres de interfaz de red predecibles , están relacionados con las reglas de udev.

    Las reglas de systemd .link's y udev tienen prioridad de carpeta. /etcanula /runanula /lib.

    Así que verifique la configuración actual.

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    Después de que cualquier cambio en estas reglas de udev (agregar / eliminar archivos de anulación) sea efectivo, el disco RAM de arranque debe actualizarse:

    sudo update-initramfs -u
    

    Por defecto, estos son los únicos archivos que puede encontrar

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    Los probé en la nueva instalación de VBox 16.04 como se documenta en el siguiente enlace, todos los métodos funcionan como se esperaba:

    Nombres de interfaz complicados de Ubuntu 16.04

  • /etc/udev/rules.d/70-persistent-net-ruleses de versiones anteriores reemplazadas por systemd .link's (pero no se crean automáticamente), lo agregué aquí para verificar su existencia en busca de problemas específicos, pero no para el caso de AnttiHaapala .

user.dz
fuente
1

Necesita actualizar su initrdcon algo como update-initramfs -k all -c, ya que udev aplica esas configuraciones ya mientras se ejecuta initrd.

Ubuntu 16.04 ya no tiene el archivo 70-persistent-net-rules.

Jani Jaakkola
fuente
1
Eso es extraño, este sistema 16.04 sí. Ahh pero es un sistema actualizado. Tiene razón en que no está presente en una instalación nueva.
Elder Geek
0

No tengo suficiente reputación para comentar, pero solo para agregar a la respuesta marcada, las instalaciones limpias de Ubuntu 16.04 no tendrán el archivo /etc/udev/rules.d/70-persistent-net.rules presente. Sin embargo, si lo crea manualmente, puede agregar una línea como se muestra en la respuesta aquí y debería funcionar igual que en versiones anteriores, con una diferencia notable: el parámetro KERNEL debe especificarse como el nombre asignado al interfaz por defecto. Por ejemplo, si el sistema nombró la interfaz como "ens160" y desea cambiarla a "eth0", la línea podría verse así:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

Esto le dice a la regla que solo coincida en una interfaz que coincida con el MAC especificado (en el parámetro ATTR {dirección}) y con un nombre de kernel que coincida con el parámetro KERNEL. Alternativamente, probablemente podría omitir el parámetro KERNEL por completo y eso también debería funcionar.

EDITAR: Y como ya se mencionó, si desea utilizar el método de archivo .link, deberá actualizar initramfs para que surta efecto. También tenga en cuenta que el archivo .link personalizado debe crearse en / etc / systemd / network y no en / lib / systemd / network (cualquiera de los dos funcionará, pero la mejor práctica es usar / etc / systemd / network ya que para eso está allí: para permitir archivos .link personalizados que anulan los valores predeterminados en / lib / systemd / network).

dwillis77
fuente