Il nome dell'interfaccia di rete cambia dopo l'aggiornamento a 15.10 - udev cambia


55

Ho aggiornato una macchina virtuale che esegue il server Ubuntu 15.04 alla nuova stabile 15.10 appena rilasciata.

Non ci sono stati problemi apparenti, ma dopo il riavvio la macchina ha perso la connessione di rete. lspcimostrò la carta corretta e lsmoddimostrò che il driver era stato caricato.

Suggerimenti sulla modifica o la rimozione /etc/udev/rules.d/70-persistent-net.rulesnon sono riusciti (ancora nessuna rete, nessun nuovo file), il famoso /lib/udev/write_net_rulesnon esisteva nemmeno.

Non ho molto indizio su udev e systemd, quindi mi ci è voluto del tempo per trovare in / sys / class / net che il nome dell'interfaccia di rete è cambiato. È diventato ens32, che è stato ribattezzato da eth0. Dopo aver modificato /etc/network/interfacesla comunicazione di rete è stata nuovamente abilitata.

Ma - perché questo accade affatto? E se succede, il file delle interfacce non dovrebbe essere aggiornato automaticamente?

Ora che ho cancellato la scheda di rete virtuale e ne ho creata un'altra, eth0diventa eno16777728, che non è così, ehm, bello.

Questo comportamento (almeno quello della procedura di aggiornamento) dovrebbe essere segnalato come un bug?

Inoltre, /etc/udev/rules.d/70-persistent-net.rulesora è obsoleto? E (anche se solo in parte correlato) che dire /etc/udev/rules.d/70-persistent-cd.rules?)

Modifica - domanda aggiuntiva (dopo la risposta accettata) La dipendenza di /etc/network/interfacesdal nome dell'interfaccia attuale mi ha infastidito. Ho provato una nuova installazione di * Ubuntu in un'altra macchina virtuale. Con mia sorpresa, /etc/network/interfacesconteneva solo un riferimento al dispositivo di loopback. Tuttavia, con la mia VM originale questa modifica ha impedito la creazione della rete. Quindi cos'altro devo cambiare?

Modifica Bene, da un altro test ho scoperto che un nuovo Ubuntu Server ha la scheda di interfaccia di rete /etc/network/interfaces, mentre XUbuntu no. Forse sta usando network-managero qualcos'altro.


Lo stesso bug appare di nuovo in 17.04. Spero solo durante la fase di pre-rilascio.
Avtomaton,

Risposte:


56

In Ubuntu 15.10 (Wily Werewolf), a partire da systemd / udev assegnerà automaticamente nomi di interfaccia di rete prevedibili e stabili per tutte le interfacce Ethernet, Wlan e Wwan locali ( sorgente ).

I seguenti diversi schemi di denominazione per le interfacce di rete sono ora supportati da udev in modo nativo:

  1. I nomi che incorporano il firmware / BIOS hanno fornito i numeri di indice per i dispositivi di bordo (esempio eno1:)
  2. I nomi che incorporano firmware / BIOS forniti PCI Express numeri indice di slot hotplug (esempio: ens1)
  3. Nomi che incorporano la posizione fisica / geografica del connettore dell'hardware (esempio enp2s0:)
  4. Nomi che incorporano l'indirizzo MAC delle interfacce (esempio enx78e7d1ea46da:)
  5. Denominazione ethX classica, imprevedibile, nativa del kernel (esempio:) eth0- obsoleta

Per impostazione predefinita, systemd ora denominerà le interfacce come segue:

  1. se tali informazioni dal firmware sono applicabili e disponibili, tornando a
  2. se tali informazioni dal firmware sono applicabili e disponibili, tornando a
  3. se applicabile, ricadendo a
  4. non viene utilizzato per impostazione predefinita, ma è disponibile se l'utente lo sceglie.
  5. in tutti gli altri casi.

Come lo disabiliti?

Fondamentalmente hai le seguenti opzioni:

  • Crea il tuo schema di denominazione manuale, ad esempio nominando le tue interfacce internet0 o lan0. Per questo crea il tuo file di regole udev e imposta la proprietà name per i dispositivi. Assicurati di ordinarlo prima del file delle politiche predefinito, ad esempio nominandolo/etc/udev/rules.d/70-my-net-names.rules
  • Modificare il file delle politiche predefinito, per selezionare un diverso schema di denominazione, ad esempio per nominare tutti i nomi delle interfacce dopo il loro indirizzo MAC per impostazione predefinita cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules:, quindi modificare lì il file e modificare le linee secondo necessità.
  • Passa alla net.ifnames=0riga di comando del kernel.

6
Questa è la fonte? Puoi aggiungere un link alla pagina ufficiale della nota di rilascio per Ubuntu (sono sicuro che sia da qualche parte, non riesco a trovarlo!)
Rmano,

2
Sì, questa è la fonte.
Kyodake,

4
Ciò che non ha alcun senso è che ha fatto un aggiornamento, non una nuova installazione. Sembra un vero bug di Ubuntu, perché l'aggiornamento dovrebbe lasciare il sistema in uno stato funzionante.
Sarà il

1
@kyodake non esiste una cartella / usr / lib / udev in ubuntu 15.10, c'è / lib / udev
EdiD

1
@EdiD: ok, bug corretto.
Kyodake,

39

C'è un modo più semplice raccontato dalla guida Beginners di ArchWiki .

Per prima cosa ottieni l'indirizzo MAC dei tuoi dispositivi

$ ip link

L'output mostra per mi piace

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000     
          link/ether 20:68:9d:xx:xx:xx brd ff:ff:ff:ff:ff:ff

L'indirizzo MAC dei tuoi dispositivi è il

20:68:9d:xx:xx:xx

Basta creare il file (basta aprirlo con i diritti sudo in un editor di testo)

$ nano /etc/udev/rules.d/10-network.rules    

Aggiungi la seguente riga

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"

Sostituisci il nome con il nome desiderato e aa: bb: cc: dd: ee: ff con l'indirizzo MAC dei tuoi dispositivi.

Ora basta riavviare il computer e il nome del dispositivo dovrebbe essere cambiato.


La soluzione più diretta e semplice! Grazie enormi!
3bdalla,

1
Per garantire che la regola NON si applichi alle interfacce vlan e bridge aggiungi DRIVERS=="?*",dopo ACTION=="add",. Vedi anche askubuntu.com/questions/767786/…
Donn Lee,

16

Prova questo: modifica il tuo /etc/default/grub. Cambia la linea da

GRUB_CMDLINE_LINUX=""

per

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

e, infine, esegui:

# update-grub

come root e riavvia il sistema.


Questo funziona anche per netboot. Ho avuto successo aggiungendo quanto segue all'istruzione append nel mio file append (...) net.ifnames=0 (...)
syslinux.cfg

Questa soluzione funziona perfettamente anche in Ubuntu 16.04!
Nullldata,

Ho dovuto aggiungere i parametri di GRUB sopra (net.ifnames = 0) e rimuovere le regole di ridenominazione udev per far funzionare i vlans, ma ora va tutto bene. Grazie per la soluzione
Albert Veli,

GRAZIE. Sto installando Ubuntu Server 16.04 su un server senza testa e non avevo idea del nome che stava dando all'interfaccia di rete e, di conseguenza, il server non era sulla rete. Ho fatto questo e mi sono assicurato che / etc / network / interfaces avesse "eth0" come nome dell'interfaccia e rimessi l'unità nel server. Ora è online. Le istruzioni per l'installazione di Ubuntu su Acer Aspire H340 sono obsolete per quanto riguarda questo, quindi scriverò qualcosa nella speranza che altri provando lo stesso non perderanno il mio tempo.
MetalMikester,

5

So che potrebbe essere un po 'tardi e l'aggiunta di 10-network.rules sembra aver aiutato, ma non del tutto. Ho dovuto aggiungere il nome del kernel del dispositivo per rinominare. Ecco come ho fatto funzionare il file /etc/udev/rules.d/10-network.rules ...

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"

e cambia il KERNEL == "" in come il tuo kernel sta nominando il dispositivo all'avvio.

HTH

KC


3

Se hai una nuova installazione

apt-get remove biosdevname

Poi

update-initramfs -u

Controlla se hai il file udev net ruels. In tal caso, rimuoverlo.

rm /etc/udev/rules.d/70-persistent-net.rules

Ora modifica / etc / network / interfaces, rinomina le interfacce in eth0, eth1, ... ecc.

Reboot


2

Ho funzionato creando il file:

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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.