Como ou onde o Linux determina a atribuição de um dispositivo de rede? Especificamente, wlan0
ou wlan1
para dispositivos USB sem fio.
Conectei um TP USB sem fio há um tempo e ele foi atribuído wlan0
. Eu removi isso. Esta semana conectei um dispositivo sem fio USB da Edimax e ele apareceu como wlan1
. Removi-o hoje para experimentar um segundo dispositivo sem fio USB Edimax (comprei dois) e agora aparece wlan2
.
Conheço o suficiente sobre Unix/Linux para saber que isso está sendo configurado em algum lugar, e se eu excluir o arquivo de configuração não utilizado, posso fazer com que o Edimax mais recente se torne wlan0
. Mas como/onde?
Responder1
Udevé o componente do sistema que determina os nomes dos dispositivos no Linux - principalmente nomes de arquivos em /dev
, mas também nomes de interfaces de rede.
As versões do udev de 099 a 196 vêm com regras para registrar os nomes das interfaces de rede e usar sempre o mesmo número para o mesmo dispositivo. Estas regras estão desabilitadas por padrão a partir do udev 174, mas ainda assim podem ser habilitadas pela sua distribuição (por exemplo, o Ubuntu as mantém). Algumas distribuições fornecem conjuntos de regras diferentes.
O script que registra e reserva nomes de interface para uso futuro é o
/lib/udev/rules.d/75-persistent-net-generator.rules
. Ele escreve regras em
/etc/udev/rules.d/70-persistent-net.rules
. Portanto, remova as entradas existentes wlan0
e wlan1
do seu /etc/udev/rules.d/70-persistent-net.rules
e mude wlan2
para wlan0
. Execute udevadm --trigger --attr-match=vendor='Edimax'
(ou qualquer --attr-match
parâmetro que você encontrar que corresponda ao seu dispositivo) para reaplicar as regras ao dispositivo já conectado.
Responder2
Este problema foi resolvido a partir da systemd
v197 com a introdução de nomenclatura persistente para dispositivos de rede.
De acordo com o freedesktopNomes de interface de rede previsíveispágina, o kernel simplesmente atribuiu nomes com base na ordem em que foram testados pelos drivers relevantes:
O esquema clássico de nomenclatura para interfaces de rede aplicado pelo kernel é simplesmente atribuir nomes começando com "eth0", "eth1", ... a todas as interfaces à medida que são testadas pelos drivers. Como a investigação do driver geralmente não é previsível para a tecnologia moderna, isso significa que, assim que múltiplas interfaces de rede estiverem disponíveis, a atribuição dos nomes "eth0", "eth1" e assim por diante geralmente não será mais corrigida e pode muito bem acontecer que " eth0" em uma inicialização acaba sendo "eth1" na próxima.
Se sua distribuição usa o systemd, você pode usar os nomes atribuídos de forma previsível, mas talvez difíceis de manejar wlp0s11
, ou pode escrever uma udev
regra para dar a eles um nome com o qual você se sinta mais confortável, como wifi1
, com base no endereço mac ...
Incluir um arquivo /etc/udev/rules.d/
chamado 10-network-device.rules
:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="22:bb:cc:33:44:dd", NAME="wifi1"