Le nom de l'interface réseau change après la mise à jour vers 15.10 - udev change


55

J'ai mis à jour une machine virtuelle exécutant le serveur Ubuntu 15.04 vers la nouvelle version stable 15.10.

Il n'y avait aucun problème apparent, mais après le redémarrage, la machine a perdu sa connexion réseau. lspcimontré la bonne carte et lsmodprouvé que le chauffeur avait été chargé.

Les astuces sur l'édition ou la suppression /etc/udev/rules.d/70-persistent-net.rulesn'ont pas abouti (toujours pas de réseau, pas de nouveau fichier), le célèbre /lib/udev/write_net_rulesn'existe même pas.

Je n'ai pas beaucoup d'indices concernant udev et systemd, il m'a donc fallu un certain temps pour trouver dans / sys / class / net que le nom de l'interface réseau avait changé. Il est devenu ens32, qui a été renommé de eth0. Après avoir changé /etc/network/interfaces, la communication réseau a été réactivée.

Mais pourquoi cela se produit-il? Et si cela se produit, le fichier d'interface ne devrait-il pas être mis à jour automatiquement?

Maintenant que j'ai supprimé la carte réseau virtuelle et en ai créé une autre, eth0devient eno16777728, ce qui n'est pas si, humm, sympa.

Ce comportement (au moins celui de la procédure de mise à niveau) doit-il être signalé comme un bogue?

De plus, est-il /etc/udev/rules.d/70-persistent-net.rulesobsolète maintenant? Et (bien que partiellement lié) qu'en est-il /etc/udev/rules.d/70-persistent-cd.rules?)

Éditer - question supplémentaire (après réponse acceptée) La dépendance de à /etc/network/interfacespartir du nom d'interface actuel m'a dérangé. J'ai essayé une nouvelle installation de * ubuntu sur une autre machine virtuelle. À ma grande surprise, /etc/network/interfacescontenait une référence au périphérique de bouclage uniquement. Cependant, avec ma machine virtuelle d'origine, ce changement a empêché le réseau de se mettre en place. Alors quoi d'autre dois-je changer?

Edit Eh bien, à partir d'un autre test, j'ai constaté qu'un nouveau serveur Ubuntu contient la carte d'interface réseau /etc/network/interfaces, contrairement à XUbuntu. Peut-être qu'il utilise network-managerou autre chose.


Le même bogue apparaît à nouveau en 17.04. Espérons seulement pendant la phase de pré-libération.
Avtomaton

Réponses:


56

Dans Ubuntu 15.10 (Wily Werewolf), commencer par systemd / udev attribuera automatiquement des noms d’interface réseau stables et prévisibles pour toutes les interfaces Ethernet, Wlan et Wwan locales ( source ).

Les différents systèmes de dénomination suivants pour les interfaces réseau sont maintenant supportés par udev en mode natif:

  1. Les noms incorporant firmware / BIOS fourni des numéros d'index pour les périphériques embarqués (exemple: eno1)
  2. Les noms incorporant firmware / BIOS fourni des numéros d'index de sous hotplug PCI Express (exemple: ens1)
  3. Les noms incorporant l' emplacement physique / géographique du connecteur du matériel (exemple: enp2s0)
  4. Les noms incorporant l'adresse MAC des interfaces (exemple: enx78e7d1ea46da)
  5. Dénomination ethX native du noyau classique et imprévisible (exemple eth0:) - obsolète

Par défaut, systemd nommera désormais les interfaces suivantes:

  1. si ces informations du firmware sont applicables et disponibles, retomber sur
  2. si ces informations du firmware sont applicables et disponibles, retomber sur
  3. le cas échéant, retomber sur
  4. n'est pas utilisé par défaut, mais est disponible si l'utilisateur le souhaite.
  5. dans tous les autres cas.

Comment désactivez-vous cela?

Vous avez essentiellement les options suivantes:

  • Créez votre propre schéma de nommage manuel, par exemple en nommant vos interfaces internet0 ou lan0. Pour cela, créez votre propre fichier de règles udev et définissez la propriété name pour les périphériques. Veillez à le commander avant le fichier de stratégie par défaut, par exemple en le nommant./etc/udev/rules.d/70-my-net-names.rules
  • Modifiez le fichier de stratégie par défaut pour choisir un schéma de nommage différent, par exemple pour nommer tous les noms d'interface après leur adresse MAC par défaut cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules:, puis éditez le fichier à cet emplacement et modifiez les lignes si nécessaire.
  • Passez le net.ifnames=0sur la ligne de commande du noyau.

6
Est- ce la source? Pouvez-vous ajouter un lien vers la page officielle des notes de publication pour Ubuntu (je suis sûr que c'est quelque part, je ne le trouve pas!)
Rmano

2
Oui, c'est la source.
Kyodake

4
Ce qui n’a aucun sens, c’est qu’il a effectué une mise à niveau et non une nouvelle installation. Cela ressemble à un véritable bogue Ubuntu, car la mise à niveau devrait laisser le système en état de fonctionner.
Sera

1
@kyodake il n'y a pas de dossier / usr / lib / udev dans ubuntu 15.10, il y a / lib / udev
EdiD

1
@EdiD: ok, bug corrigé.
Kyodake

39

Il existe un moyen plus simple dit par le ArchWiki Beginnersguide .

Commencez par obtenir l'adresse MAC de vos appareils en

$ ip link

La sortie montre comme

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’adresse MAC de votre appareil est le

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

Créez simplement le fichier (ouvrez simplement avec les droits sudo dans un éditeur de texte)

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

Ajouter la ligne suivante

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

Remplacez nom par le nom recherché et aa: bb: cc: dd: ee: ff par l’adresse MAC de votre périphérique.

Maintenant, redémarrez simplement votre ordinateur et le nom du périphérique devrait avoir changé.


La solution la plus directe et simple! Merci massif!
3bdalla

1
Pour vous assurer que la règle ne s'applique PAS à vos interfaces vlan et bridge, ajoutez DRIVERS=="?*",après ACTION=="add",. Voir aussi askubuntu.com/questions/767786/…
Donn Lee

16

Essayez ceci: Editez votre /etc/default/grub. Changer la ligne de

GRUB_CMDLINE_LINUX=""

à

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

et enfin lancer:

# update-grub

en tant que root et redémarrez votre système.


Cela fonctionne aussi pour netboot. J'ai réussi à ajouter les éléments suivants à l'instruction append dans mon fichier syslinux.cfg: append (...) net.ifnames=0 (...)
carestad

Cette solution fonctionne également parfaitement dans Ubuntu 16.04!
Nullldata

J'ai dû ajouter les paramètres GRUB ci-dessus (net.ifnames = 0) et supprimer les règles de changement de nom udev pour que vlans fonctionne, mais tout va bien maintenant. Merci pour la solution.
Albert Veli

MERCI. J'installe Ubuntu Server 16.04 sur un serveur sans interface utilisateur et je ne savais pas quel nom il attribuait à l'interface réseau. Par conséquent, le serveur n'était pas sur le réseau. Je l'ai fait et je me suis assuré que / etc / network / interfaces avait "eth0" comme nom d'interface et que le lecteur était replacé dans le serveur. C'est maintenant en ligne. Les instructions d'installation d'Ubuntu sur l'Acer Aspire H340 sont obsolètes, je vais donc écrire quelque chose dans l'espoir que les autres utilisateurs ne feront pas perdre autant de temps que moi.
MetalMikester

5

Je sais que cela risque d’être un peu tard et que l’ajout des règles de 10 réseaux semble avoir aidé, mais pas complètement. Je devais ajouter le nom du noyau du périphérique à renommer. Voici comment j'ai fait fonctionner les /etc/udev/rules.d/10-network.rules ...

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

et remplacez le KERNEL == "" par ce que votre noyau nomme le périphérique lors de son démarrage.

HTH

KC


3

Si vous avez une nouvelle installation

apt-get remove biosdevname

ensuite

update-initramfs -u

Vérifiez si vous avez un fichier udev net ruels. Si c'est le cas, supprimez-le.

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

Maintenant, éditez / etc / network / interfaces, renommez les interfaces en eth0, eth1, ... etc.

Redémarrer


2

Je travaille en créant un fichier:

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.