Utilisation de noms d'interface réseau prévisibles avec des noyaux alternatifs

12

Presque constamment, j'utilise des noyaux du noyau Ubuntu PPA , ou des noyaux que j'ai compilés moi-même, en utilisant la configuration du noyau Ubuntu.

Le problème est que lorsque j'utilise le noyau d'origine, il semble utiliser par défaut des noms d'interface réseau prévisibles (c'est-à-dire "p4p1"), mais lorsque j'utilise un autre noyau, il semble utiliser par défaut l'ancienne méthode (c'est-à-dire "eth0").

Bien que cela ne soit pas vraiment pertinent pour cette question, j'ai eu une panne de disque dur sur mon ordinateur de test et je fais une nouvelle installation d'Ubuntu Server 14.04.2.

Je n'ai pas pu déterminer quelle est la différence entre les noyaux. Je soupçonne un paramètre de configuration du noyau, mais je n'ai pas pu identifier lequel.

Ma question: comment faire fonctionner les noms d'interface réseau prévisibles de manière cohérente sur tous les noyaux?

Notes supplémentaires: Quelque part, j'ai vu désactiver les noms d'interface réseau prévisibles pour l'ajouter à grub:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

donc, je pensais que le contraire pourrait aider:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

mais cela ne faisait aucune différence. En fait, je ne peux jamais obtenir que le noyau non stocké utilise biosdevname, quel que soit le paramètre. Et je ne peux jamais obtenir du noyau de stock pour générer un /etc/udev/rules.d/70-persistent-net.rulesfichier (même si ce n'est pas ce que je veux), peu importe le réglage de net.ifnames. Si je l'ai net.ifnames=1, alors au moins le noyau non stocké ne génère pas de /etc/udev/rules.d/70-persistent-net.rulesfichier incorrect .

Extraits de /var/log/udev:
stock kernel:

KERNEL[9.216730] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV  [9.241073] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1

Depuis le noyau Ubuntu PPA 4.1RC5:

KERNEL[10.772566] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV  [11.185866] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227

Remarque: J'ai temporairement dépassé ce problème en autorisant la /etc/udev/rules.d/70-persistent-net.rulescréation d' un fichier, puis en le modifiant pour les noms de périphérique appropriés. En fin de compte, je voudrais me débarrasser du fichier.

Doug Smythies
la source

Réponses:

33

Vous devez distinguer 3 choses:

  • Noms d'interfaces prévisibles
  • biosdevname
  • 70-persistent.rules règle udev

Soit vous choisissez d'utiliser l'une de ces solutions mais vous n'utilisez pas 2 ou 3 en même temps. (En fait, vous pouvez mais l'un aura priorité et masquera les autres)

Une bonne introduction à la situation actuelle est la publication sur la liste de diffusion ubuntu dev

Noms d'interface prévisibles

Les noms d'interface prédictibles est une udevd chose depuis V197 généré en/lib/udev/rules.d/80-net-setup-link.rules

systemd utilise par défaut le nouveau nom d'interface prévisible. Cependant , à moins que systemd en amont, dans Ubuntu, vous devez vous inscrire en utilisantnet.ifnames=1

Il n'a pas d' importance la version du noyau que vous utilisez. Mais vous devez utiliser la ligne de commande du noyau pour le configurer en modifiant la configuration de grub /etc/default/grub, comme:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

et courir

sudo update-grub

En 14.04 ou 14.10, sans systemd, il devrait suffire de supprimer 70-persitent-net.rules, comme décrit ci-dessous dans la note.

Biosdevname

biosdevname est une tentative dell de résoudre un problème similaire à celui du nom d'interface prévisible dans systemd. C'est la valeur par défaut sur le serveur Ubuntu . Vous pouvez l'avoir en installant le packagebiosdevname

sudo apt-get install biosdevname

Remarque

Vous pouvez le désactiver en utilisant la ligne de commande du noyau dans la configuration de grub:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

et courir

sudo update-grub

ou désinstallez simplement le package.

sudo apt-get purge biosdevname
sudo update-initramfs -u

règles udev

Il s'agit de la valeur par défaut sur le bureau Ubuntu . La règle udev/lib/udev/rules.d/75-persistent-net-generator.rules crée lors du premier démarrage une règle personnalisée /etc/udev/rules.d/70-persistent-net.rulesavec l'adresse MAC de votre interface pour obtenir un nom persistant pour votre interface.

Remarque

Si vous utilisez déjà des règles udev, vous devez les supprimer /etc/udev/rules.d/70-persistent-net.ruleset éviter qu'elles ne soient régénérées à chaque démarrage que vous devez exécuter

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

Après cela, si vous utilisez systemd , vous devez activer le nom d'interface prévisible, comme décrit ci-dessus.

solstice
la source
1
Merci pour votre réponse. Mon ordinateur est une édition serveur, pas une édition de bureau. Je soumettrai une modification à votre réponse pour faire face à la différence (biosdevname a été installé par défaut et doit donc être spécifiquement désactivé via grub). L'erreur dans ma pensée était que je m'attendais à des noms d'interface différents avec net.ifnames=1et biosdevname=0, comme décrit dans le lien que vous avez donné, mais j'obtiens les anciens eth0 et eth1. Quoi qu'il en soit, cela fonctionne pour n'importe quel noyau maintenant (sans /etc/udev/rules.d/70-persistent-net.rules), après avoir modifié /etc/network/interfacespour refléter les noms d'interface appropriés.
Doug Smythies
Je suis sur le bureau ubuntu 15.10, et je ne pense plus que udev soit la valeur par défaut. Mes périphériques réseau sont nommés wlp4s0et enp0s31f6, et les fichiers /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulesn'existent pas.
Jonathan Hartley
Dans Ubuntu 16.04 (spécifiquement systemd 220-7 ), le 75-persistent-net-generator.rulesfichier est déconseillé en faveur de net.ifnames.
200_success
4
  1. Dans Ubuntu Server 16.04LTS, tout ce que j'ai fait a été exécuté:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Créez ensuite le fichier en utilisant

    sudo vi /etc/systemd/network/10-internet.link
    

    et ajoutez ce qui suit

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq enregistrer le fichier

  3. puis redémarrez et ajustez votre /etc/network/interfacesfichier .. puis redémarrez à nouveau

J'espère que cela aide quelqu'un

Jadey1412
la source