¿Cómo o dónde determina Linux la asignación de un dispositivo de red? En concreto, wlan0
o wlan1
para dispositivos USB inalámbricos.
Conecté un TP USB inalámbrico hace un tiempo y se asignó wlan0
. Lo quité. Esta semana conecté un dispositivo inalámbrico USB Edimax y aparece como wlan1
. Lo quité hoy para probar un segundo dispositivo inalámbrico USB Edimax (compré dos) y ahora aparece wlan2
.
Conozco lo suficiente sobre Unix/Linux para saber que esto se está configurando en algún lugar, y si elimino el archivo de configuración no utilizado, puedo hacer que el último Edimax se convierta en wlan0
. ¿Pero cómo/dónde?
Respuesta1
Udeves el componente del sistema que determina los nombres de los dispositivos en Linux, principalmente nombres de archivos en /dev
, pero también nombres de interfaces de red.
Las versiones de udev de 099 a 196 vienen con reglas para registrar los nombres de las interfaces de red y usar siempre el mismo número para el mismo dispositivo. Estas reglas están deshabilitadas de forma predeterminada a partir de udev 174, pero aún así pueden ser habilitadas por su distribución (por ejemplo, Ubuntu las conserva). Algunas distribuciones proporcionan diferentes conjuntos de reglas.
El script que registra y reserva nombres de interfaces para uso futuro es
/lib/udev/rules.d/75-persistent-net-generator.rules
. Escribe reglas en
/etc/udev/rules.d/70-persistent-net.rules
. Así que elimine las entradas wlan0
y existentes wlan1
de su /etc/udev/rules.d/70-persistent-net.rules
, y cámbielas wlan2
a wlan0
. Ejecute udevadm --trigger --attr-match=vendor='Edimax'
(o cualquier --attr-match
parámetro que encuentre que coincida con su dispositivo) para volver a aplicar las reglas al dispositivo ya conectado.
Respuesta2
Este problema se resolvió a partir de la systemd
versión 197 con la introducción de nombres persistentes para dispositivos de red.
Según el escritorio gratuitoNombres de interfaz de red predeciblespágina, el kernel simplemente asignó nombres según el orden en que fueron analizados por los controladores relevantes:
El esquema de nomenclatura clásico para interfaces de red aplicado por el kernel es simplemente asignar nombres que comiencen con "eth0", "eth1", ... a todas las interfaces a medida que los controladores las investigan. Dado que en la tecnología moderna el control de controladores no suele ser predecible, en cuanto están disponibles varias interfaces de red, la asignación de los nombres "eth0", "eth1", etc., por lo general ya no es fija y puede suceder que " eth0" en un arranque termina siendo "eth1" en el siguiente.
Si su distribución usa systemd, puede usar nombres asignados de manera predecible pero quizás difíciles de manejar, como wlp0s11
o puede escribir una udev
regla para darles un nombre con el que se sienta más cómodo, como wifi1
, según la dirección mac...
Incluir un archivo /etc/udev/rules.d/
llamado 10-network-device.rules
:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="22:bb:cc:33:44:dd", NAME="wifi1"