Raspberry Pi 3 - eth0 erróneamente llamado 'enx ...'

28

Mi nuevo dispositivo RPi 3 (yay) se inició recientemente con un ethernet desactivado.

Así que vi /etc/networks/interfacesy vi la línea:

auto eth0
iface eth0 inet dhcp

ifup eth0Lamentablemente, al llamar dio el siguiente mensaje:

eth0 No such device
No hardware found

Así que revisé mi ifconfig -ay vi un dispositivo extraño:

enx*MACADDRESS* Link encap:Ethernet HWaddr **:**:**:**:**:**

Intentar cambiar /etc/networks/interfacesel nombre dio como resultado una red en funcionamiento. ¿Cómo puedo volver a cambiar el nombre de ese dispositivo eth0?

PD: no tengo ningún 70-persistent-net.rulesarchivo para tu información. El sistema operativo es Ubuntu MATE 15.10

Gracias.

Tom Siwik
fuente
Compruebe el archivo> / etc / iftab Estados de la mina: enxb827 .... mac xx: xx: xx: xx: xx: xx arp 1 wlan0 mac xx: xx: xx: xx: xx: xx arp 1

Respuestas:

16

Tuve este problema al ejecutar Debian armhf en Raspberry Pi 2, puede cambiar el nombre de la interfaz creando el archivo /etc/udev/rules.d/70-persistent-net.rules y poner esto en

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:ac:6f:65:31:e5", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

reemplace b8: ac: 6f: 65: 31: e5 con su dirección MAC eth0, reinicie y se convertirá en eth0, es posible que no tenga acceso a Internet después del reinicio porque en / etc / network / interfaces está definiendo una interfaz incorrecta, solo cambie enx * a eth0

Editar: Esto no es un problema, sino un nuevo esquema de nombres de interfaz "Nombres de interfaz predecibles", debe adaptarlo y usarlo en lugar de intentar revertirlo a los anteriores.

SandPox
fuente
3
gracias a @UnSined Miré más allá y encontrado, que he tenido que añadir: ln -s /dev/null /etc/udev/rules.d/80-net-name-slot.rules. Básicamente está deshabilitando la cosa de nombres. Funciona ahora .. gracias!
Tom Siwik
El usuario es @Ficertyn ahora ... claridad para los lectores felices de los documentos de Red Hat
Tom Siwik
1
Tuve que eliminar la KERNEL=="eth*"entrada para que esto funcione.
Roger Dueck
23

Esta solución solo funciona si está viendo un dispositivo de interfaz de red extraño como env{hwdaddress}cuando se ejecuta en $ ifconfig -alugar de eth0. Intenté todas las respuestas comunes sobre agregar reglas, pero solo esta solución funcionó.

Estoy ejecutando una Raspberry Pi 3 con Ubuntu 16.04 preinstalado servidor armhf. En pocas palabras, ejecutando nombres de interfaz de red predecibles$ apt-get update agregados

Edite el siguiente archivo:

$ vim /lib/udev/rules.d/73-usb-net-by-mac.rules

Deberías ver:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

Cambie el NOMBRE al final de la siguiente manera:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
ATTR{address}=="?[014589cd]:*", \
TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
IMPORT{builtin}="net_id", NAME="eth0"

Guardar cambios

Reiniciar. Todo debería funcionar ahora, suponiendo que todo apunta a eth0.

Editar (26/10/2016) Para evitar que futuras actualizaciones sobrescriban esta solución, haga lo siguiente:

cp /lib/udev/rules.d/73-usb-net-by-mac.rules /etc/udev/rules.d/
Luis Godinez
fuente
1
He pasado demasiado, demasiado tiempo tratando de llegar al punto de tener un establo eth0para mi Pi con Ubuntu Server 16.04. Gracias. Una pequeña modificación a su respuesta, que sugeriría que intente, implemente y luego agregue a su respuesta: Copie el 73-usb-net-by-mac.rulesarchivo al /etc/udev/rules.d/directorio y modifique esa; si cambia el que está, /lib/udev/rules.dentonces puede sobrescribirse en una futura actualización del sistema operativo.
Kevin Teljeur
Gracias por el aviso. También pasé 2 días sólidos resolviendo el problema. Tendría el pi configurado para ir con Python3 y OpenCV solo para que Ethernet deje de funcionar en el reinicio debido a la actualización. Me alegra ver que mi respuesta fue de alguna utilidad.
Luis Godinez
1
Me tomó un tiempo descubrir por qué estaba sucediendo, y luego necesitar saber qué hacer y por qué (error de Ubuntu: la corrección como confirmada no parece funcionar, que es una edición en el mismo archivo). Aquí está la batalla en curso: bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379 - Sin embargo, su solución no parece funcionar en mi Raspberry Pi 2. Realmente estoy pensando en obtener una caja x86 en este punto.
Kevin Teljeur
13

raspi-config es el método más fácil.

Si estás en Raspbian, entonces está instalado por defecto. Pero si está en Ubuntu, Mint o Mate, puede instalarlo con el siguiente comando:

sudo apt-get install raspi-config

Entonces puedes configurarlo con raspi-config.

sudo raspi-config
  1. Seleccione "2. Opciones de red"
  2. Seleccione "Nombres de interfaz de red N3"
  3. Seleccione "No". Ahora está deshabilitado los nombres de interfaz de red predecibles.
  4. Haga clic en "Aceptar" y "Finalizar". Luego se reiniciará su raspberry pi.

Hecho.

Almas Dusal
fuente
1
¿Ubuntu Mate (que es lo que está usando el OP) tiene una configuración raspi?
Steve Robillard
Entonces su respuesta no se aplica.
Steve Robillard
1
Pero si buscó en Google el mismo problema con Raspbian, esta pregunta se encontró primero. Lo hice y tomé tiempo para investigar y encontré una solución. Creo que ayuda a alguien. OK edito la respuesta ahora.
Almas Dusal
1
Me confunde ver gente "investigando" mientras la respuesta está claramente escrita en las respuestas aprobadas. Ubuntu, debian, raspbian de todos modos. Instalar la herramienta en Ubuntu Mate tampoco es un problema (incluso instalado de forma predeterminada) raspberrypi.stackexchange.com/a/67084/42528 . Sin embargo, esta es una respuesta sin ninguna explicación de lo que está sucediendo detrás de la cortina. Si bien resuelve el problema, desalienta a las personas a comprender realmente lo que está sucediendo. Sin embargo, haré +1 en esto para todos los holgazanes.
Tom Siwik
1
¡Guay! Esta respuesta fue definitivamente la más fácil y resolvió mi problema para establecer como una dirección IP estática en funcionamiento
Vinilo
5

Esto NO es un "error", es una "característica" " nombre de dispositivo de red coherente ". (No veo nada consistente al respecto).

Probablemente hay muchas formas de "arreglar" esto, pero puede que no funcionen si se cambia el hardware.

Para restaurar el comportamiento anterior, agregue "net.ifnames = 0 biosdevname = 0" al final de cmdline.txt.

Milliways
fuente
Aunque la característica es, bueno, una característica, la forma en que se comporta es un error, específicamente en cómo udev maneja los dispositivos USB de Ethernet. Se ignora net.ifnames=0. No creo que nadie deba seguir las discusiones sobre informes de errores para hacer que un sistema operativo popular funcione con una configuración de hardware común, pero así es la vida. bugs.launchpad.net/ubuntu/+source/systemd/+bug/1593379
Kevin Teljeur
@KevinTeljeur y mi comentario fue sarcasmo : este es un problema común en los sistemas informáticos.
Milliways
Ja, ja, lo siento, después de tantas horas desperdiciadas, y luego de descubrir que se trataba de un error silenciosamente documentado, no puedo detectar ningún sarcasmo de nombres de dispositivos de red consistentes. Comprendí tus comillas, pero la adición de esos encantamientos mágicos en config.txtverdad no funciona en el Pi como un error documentado (tal vez ahora con el lanzamiento de la última compilación de udev finalmente lo hace). Es un error sorprendentemente desconocido que afecta a todos los sistemas con Ethernet en USB.
Kevin Teljeur
4

No lo he encontrado específicamente con la dirección mac como parte del nombre, sin embargo, lo que está experimentando se llama nombre de dispositivo de red consistente.

Este fue un cambio realizado porque es posible, y tal vez incluso probable en algunos sistemas que tienen múltiples tarjetas de red, que las tarjetas saldrían de servicio y usando el esquema de nombres eth0, eth1, etc., terminaría aplicando reglas de enrutamiento y demás a la interfaz incorrecta.

Muchas distribuciones de Linux se han movido a algún tipo de nombre de dispositivo de red consistente, por lo general se verá algo así enp0s1, identificando el bus PCI y el punto de conexión al bus (0 y 1 respectivamente).

Puede obtener más información en https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/ch-Consistent_Network_Device_Naming.html , así como cómo cambiar su sistema a la forma antigua de hacerlo cosas si todavía quieres hacerlo.

Ficertyn
fuente
1
aunque este es un comentario informativo, no ayudó a resolver el problema y tampoco respondió la pregunta (lea el tipo de respuesta manual). Sin embargo, ayudó a encontrar una pequeña solución a la solución anterior. es por eso que se ganó el voto y gracias :)
Tom Siwik
1

Con odroid la creación de este archivo solucionó mi problema

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
1

Tuve el mismo problema en Raspberry Pi 2 con Ubuntu 16.04 y lo que funcionó fue seguir el enlace de #goutam y agregar /etc/udev/rules.d/70-persistent-net.rules con lo siguiente:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
Rodrigo
fuente
1

Encontré esta sugerencia aquí :

Cambie una línea en 70-persistent-net.rules a

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="98:90:96:e0:3c:e9", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME:="eth0"

que está dejando caer el atributo KERNEL y cambiando el NOMBRE de = a: =

Parece forzar cualquier dirección MAC que se encuentre a eth0. Funciona en Raspberry Pi y sistemas de arranque uboot.

usuario855443
fuente
0

Para mí, al ejecutar Debian Unstable en Raspberry Pi 2, el enlace simbólico mencionado en el comentario a la primera respuesta también fue la idea correcta, pero su nombre tenía que ser diferente: ln -vis /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Axel Beckert
fuente
No, mencionaste este nombre de archivo, pero uno diferente en tu comentario, por eso me referí a ese comentario y mencioné que tenía que ser un nombre de archivo diferente para mí.
Axel Beckert
1
Veo. Tenga en cuenta la diferencia entre raspberry pi 3 y raspberry pi 2. A pesar de que técnicamente son casi iguales, esta diferencia de nombres podría ser una de esas cosas para engañar a las personas. Gracias por la aclaración sin embargo.
Tom Siwik
Supongo que esta diferencia en los nombres de archivo proviene de Debian 8 Jessie vs Debian Unstable con una versión más reciente de systemd / udev. El nombre real de la interfaz sin este enlace simbólico podría ser más diferente que solo la dirección MAC. Pero al menos para la interfaz de Ethernet creo que recuerdo haber visto estos enxnombres de interfaz en Raspi 2 y 3. Aunque actualmente no puedo recordar cómo se nombró la interfaz WLAN en el Raspi 3.
Axel Beckert
enx <MAC>, estaba usando Ubuntu Mate, solucionó el problema como se muestra arriba. Cambió a Debian y no tuve que cambiar el nombre. Aunque es raro ... tienes razón.
Tom Siwik
0

simplemente desactive las reglas de udev responsables del proceso de cambio de nombre de la interfaz, es decir

sudo ln -s /dev/null /etc/udev/rules.d/73-usb-net-by-mac.rules

o

sudo touch /etc/udev/rules.d/73-usb-net-by-mac.rules

EDITAR: thx @ sparkie por señalar un error. Siempre mezclo el orden. :)

DarwinsBuddy
fuente
El primer comando mencionado no puede funcionar. Al menos src y dst se mezclan.
sparkie
0

Me doy cuenta de que esta pregunta es antigua, pero he encontrado este problema y ninguna de las soluciones propuestas hasta ahora en esta página resolvió mi problema. Para mí, el truco de la carpeta rules.d no parece hacer nada.

Mi solución fue simplemente escribir un script que vaya en la carpeta init.d para asignar DHCP al puerto ethernet con cable, independientemente del nombre. Esto es importante porque tengo varias unidades Raspberry Pi y todas tuvieron este mismo problema. (Muy frustrante)

Mi problema se agrava porque tengo una carpeta de almacenamiento de red que debe montarse durante el proceso de arranque. Debido a que la interfaz no apareció, este montaje falló y las cosas simplemente fueron de mal en peor para mí.

Aquí está mi solución. Espero que esto ayude a cualquier otra persona que no pueda encontrar unirse usando las respuestas anteriores.

Cree el archivo /etc/init.d/raspi-init-network usando su editor de texto favorito. Me gusta usar vi.

cd /etc/init.d
sudo vi raspi-init-network

Este es el código que pertenece al archivo

#!/bin/sh
### BEGIN INIT INFO
# Provides:          boot-identify-myself
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: identify-myself
# Description:       identify this computer to the main server upon
### END INIT INFO
#
# when using predictible network names for the interfaces,
# the pi doesn't seem to activate the interface correctly so
# this script will force the issue.
#
# it works by getting the interface name of the wired network
# device and using that to initialize dhcp

start() 
{
    interface=`ifconfig -a | grep "encap:Ethernet" | grep -oh -E "^[^ ]+"`
    dhclient $interface
    mount -a
}

stop() 
{
    : # do nothing
}

uninstall() 
{
    : # do nothing
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  uninstall)
    uninstall
    ;;
  retart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|uninstall}"
esac

Asegúrese de que el script sea ejecutable

sudo chmod 755 raspi-init-network

Active el código para que se ejecute durante el proceso de arranque ejecutando el comando update-rc.d.

sudo update-rc.d raspi-init-network defaults 90

Después de esto, no he tenido un solo problema y pude copiar el código a todas mis unidades Pi con los mismos resultados constantes.

NOTA: Si no está montando unidades, puede omitir la línea "mount -a".

TWEAKS: Si está utilizando su wifi, puede cambiar la línea que comienza "interface =" y editar el primer segmento "grep". Este primer grep toma la línea completa de la interfaz que desea utilizar. El segundo grep toma esa línea y solo devuelve el nombre de la interfaz.

Glenn J. Schworak
fuente