View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Debian 4.0 etch y los dispositivos de red con nombres estables: udev

Sobre los nombres de los dispositivos de red en Linux


NOTA: Además de esto, hay que hacer un
# rmmod eth1394
# echo blacklist eth1394 >> /etc/modprobe.d/blacklist
para que el interfaz del firewire no coja el puesto de eth0.

Historia

Todo empezó con el tema de que el CommsL13 ya no se usa. Está previsto ponerlo como CentralTCE02 (para dar servicio a más puestos de operador). Pero antes, puestos a probar, quise actualizarlo a Debian 4.0 "Etch" (los equipos los estamos sacando como pre-4.0).

Así pues, bajé los paquetes necesarios, los puse en dicha máquina e hice el "apt-get dist-upgrade" correspondiente.

Después de reiniciar... no tenía ping.

Santiago tenía que ir a Alto del Arenal, así que aprovechando su paseo allá estuvimis intentando diagnosticarla allí, pero no hubo suerte. La máquina arrancaba correctamente, los drivers de red estaban cargados y supuestamente como eth0 y eth1), pero al hacer el "ifconfig -a" no salían eth0 ni eth1, y al intentarlos configurar daba el siguiente error: "error fetching interface information: device not found"

Así que Santiago trajo el PC a la oficina ara investigarlo más a fondo.

Resulta que los dispositivos de red sí se crean, pero con el eth2 y eth3 (aunque en el dmesg diga eth0 y eth1).

Investigando por internet encuentro la razón y la solución...

Razón

Debian 4.0 "Etch" tiene entre sus características que los nombres de los interfaces de red son estables, es decir, si conectas una tarj. de red wifi USB, y se le asigna eth5, se reserva ese eth5 para futuras conexiones de dicha tarj. de red wifi USB. Eso lo hace apuntándolo en un fichero: /etc/udev/rules.d/z25_persistent-net.rules

Como consecuencia, si se cambia el disco duro de máquina, cambian las MACs de las tarjetas de red, y como en dicho fichero estaban apuntadas las del antiguo PC (p.ej. eth0 y eth1), el nuevo PC coge las siguientes disponibles (eth2 y eth3 en nuestro caso) y lo apunta en el fichero.

(Supongo que en la versión pre-4.0 se apuntaban en el fichero pero no se hacía caso del mismo).

Solución

Editar dicho fichero para quitar todas las entradas y que en el siguiente arranque empiece otra vez desde eth0;
# sed -i "/[Pe][Ct][Ih]/d" /etc/udev/rules.d/z25_persistent-net.rules

Información técnica

Una de las novedades de Linux2.6 es udev, que sustituye a dos subsistemas de Linux 2.4: hotplug (encargado de reconocer cuando se enchufan aparatos USB y similares) y devfs (encargado de generar entradas en /dev para los módulos o drivers que se van cargando de forma dinámica).

udev se configura con ficheros situados en /etc/udev/rules.d/ (dichos ficheros han de tener extesión .rules para que udev los cargue).

El contenido de los ficheros se parsea línea a línea, siendo cada línea una regla.

Una regla tiene unas condiciones de "trigger" (p.ej. que sea un dispositivo de red, que la MAC sea tal...) y una serie de acciones (p.ej. ponle el nombre eth0, haz un enlace simbólico con el siguiente nombre, llama a un programa de usuario (!)).

Como una de las acciones posibles es llamar a un programa de usuario, con udev se pueden hacer cosas tan esotéricas poner iconos de discos USB en el escritorio cuando los conectas, bajar las fotos de la cámara automáticamente, etc. Pero también permite cosas tan normales como renombrar dispositivos de red :-o.


Para que siempre tengan el mismo nombre:


Hay diferentes soluciones, tal y como detallan aquí (cache_LogicalInterfaceNames).