web-dev-qa-db-fra.com

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

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. lspci a montré la bonne carte et lsmod a prouvé que le pilote avait été chargé.

Les astuces sur la modification ou la suppression de /etc/udev/rules.d/70-persistent-net.rules n'ont pas abouti (toujours pas de réseau, pas de nouveau fichier), le fameux /lib/udev/write_net_rules n'existait 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é à partir 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, eth0 devient eno16777728, ce qui n'est pas le cas, hum, Nice.

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

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

Édition - question supplémentaire (après réponse acceptée) La dépendance de /etc/network/interfaces à partir du nom de l'interface réelle m'a dérangé. J'ai essayé une nouvelle installation de * ubuntu sur une autre machine virtuelle. À ma grande surprise, /etc/network/interfaces contenait une référence au périphérique de bouclage uniquement. Cependant, avec mon VM original, 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 a la carte d'interface réseau dans /etc/network/interfaces, contrairement à XUbuntu. Peut-être qu'il utilise network-manager ou quelque chose d'autre.

54
JeffRSon

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. Noms incorporant les numéros d'index fournis par le micrologiciel/BIOS pour les périphériques intégrés (exemple: eno1)
  2. Noms incorporant les numéros d’index d’emplacement PCI Express hot plug fournis par le micrologiciel/BIOS (exemple: ens1)
  3. Noms intégrant l'emplacement physique/géographique du connecteur du matériel (exemple: enp2s0)
  4. Noms incorporant l'adresse MAC de l'interface (exemple: enx78e7d1ea46da)
  5. Attribution de noms 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 dénomination 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, éditez-y le fichier et modifiez les lignes si nécessaire.
  • Passez le net.ifnames=0 sur la ligne de commande du noyau.
56
kyodake

Il y a 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é.

38
JonnyTischbein

Essayez ceci: Edit 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.

16
Dênio Robson

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

K.C.

4
Keith Clinton

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

3
R J

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"
2
Mikael Lepistö