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.
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:
eno1
)ens1
)enp2s0
)enx78e7d1ea46da
)eth0
) - obsolètePar défaut, systemd nommera désormais les interfaces suivantes:
Comment désactivez-vous cela?
Vous avez essentiellement les options suivantes:
/etc/udev/rules.d/70-my-net-names.rules
.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.net.ifnames=0
sur la ligne de commande du noyau.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é.
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.
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.
K.C.
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
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"