le changement de nom de l'interface réseau dans Ubuntu 16.04 avec systemd échoue

14

J'utilise un serveur sans tête Ubuntu 16.04 LTS avec deux cartes réseau physiques, qui sont nommées enp5s0f0 et enp5s0f1.

Je voudrais renommer ces interfaces et suivre cet exemple . J'ai donc créé le fichier /lib/systemd/network/70-myinterface.link(la source d'origine ne semble pas fonctionner) comme ceci (j'ai défini la bonne adresse mac):

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

et redémarré le serveur. Malheureusement, l'interface n'a pas été renommée, même si cela udevadmmontre que mon fichier de configuration est utilisé:

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

Savez-vous pourquoi le changement de nom n'a pas fonctionné?

muffel
la source
1
Je pense que / etc / systemd / network serait le meilleur emplacement pour créer ce fichier.
NGRhodes
@NGRhodes Je supposais une faute de frappe basée sur l'exemple cité, mais qui sait?
Elder Geek
Vérifiez également que networkmanager n'est pas en cours d'exécution, superuser.com/a/948996/127393 suggère que networkmanager a la priorité
NGRhodes
Après avoir placé la prime, j'ai remarqué qu'il existe un nouveau fichier de règles udev en 16.04 qui force toujours la dénomination du type d'adresse MAC pour les adaptateurs USB avant que networkd ne soit consulté (/lib/udev/rules.d/73-usb-net-by -mac.rules). Cela ne me semble pas correct du tout ... J'ai dû désactiver complètement sa règle, ce qui a permis au fichier .link de fonctionner à nouveau. Mais je ne sais pas si c'est l'option la plus correcte.
Antti Haapala
L'utilisation MACAddress= [Match]ne fonctionne pas aussi pour moi dans les linkfichiers, donc j'ai fini par l'utiliser à la Path=place. Vous devriez aussi essayer. Vous pouvez également vérifier quel linkfichier correspond à votre appareil avec la udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1commande
webKnjaZ

Réponses:

8

Cela peut ou peut ne pas aider .. Je voudrais vérifier /etc/udev/rules.d et voir si vous avez 70-persistent-net.rules. Vous devriez pouvoir les renommer en utilisant ce fichier

Le mien ressemble à ceci:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Si vous avez les entrées pour vos cartes dans ce fichier, vous pouvez changer le nom en ce que vous voulez en changeant le "NAME = TheNameYouWant"

John Orion
la source
Oui. J'étais sur le point de poster une réponse dans laquelle j'ai mentionné que de manière intéressante, il y a quelques personnes utilisant Ubuntu qui ont dit que la méthode de @muffel pour changer le nom de leur réseau ne fonctionnait pas. Ce fut ce que je vais suggérer ... 1
anonymous2
Ici devrait aller la prime.
EKons
5

Une option qui ne requiert pas de règles udev (une alternative aux fichiers systemd-networkd .link) qui fonctionne avec Ubuntu 16.04 ainsi que de nombreuses autres versions de Linux est

Exemple:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

Dans l'exemple ci-dessus, peth0 est le nom de l'interface d'origine et eth0 est le nom souhaité. Branchez le nom que vous avez actuellement où se trouve peth0 et le nom que vous voulez où se trouve eth0. Aucun redémarrage n'est requis ou suggéré. Répétez le processus pour la deuxième carte d'interface

Testé sur Ubuntu 16.04 avec le noyau 4.4.0-36-generic # 55-Ubuntu

Modifier: Si vous recherchez une solution persistante qui survit au redémarrage, voir Changer le nom des interfaces réseau Ubuntu 16.04

Sources: https://www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

Essai.

Remarque: étant donné que la méthode @ antti-haapala a fonctionné avant et s'est soudainement arrêtée, vous pourriez être intéressé de savoir que "Dans un cas particulier, un fichier vide (taille de fichier 0) ou un lien symbolique avec le même nom pointant vers / dev / null désactive le fichier de configuration entièrement (il est "masqué") ". <-Source

Elder Geek
la source
J'ai été très utile votre réponse, merci + 1 @ElderGeek
1
@Alberto Je suis content que cela ait aidé!
Elder Geek
malheureusement ce n'est pas persistant mais toujours + 1
delfiler
@delfiler Merci pour votre commentaire. Si je vous comprends bien, vous recherchez une solution qui survit à un redémarrage. Suis-je clair là-dessus?
Elder Geek
@delfiler voir askubuntu.com/questions/767786/…
Elder Geek
3
  • Les trois méthodes de dénomination personnalisées, a expliqué systemd: Noms d'interface réseau prévisibles , sont liées aux règles udev.

    Les règles & udev de systemd .link ont ​​la priorité sur les dossiers. /etcremplace les /runsubstitutions /lib.

    Vérifiez donc la configuration actuelle.

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    Après toute modification de ces règles udev (ajout / suppression de fichiers de substitution) pour être efficace, le disque RAM de démarrage doit être mis à jour:

    sudo update-initramfs -u
    

    Par défaut, ce sont les seuls fichiers que vous pouvez trouver

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    Je les ai tous testés dans la nouvelle installation de VBox 16.04 comme indiqué dans le lien ci-dessous, toutes les méthodes fonctionnent comme prévu:

    Noms d'interfaces compliquées d'Ubuntu 16.04

  • /etc/udev/rules.d/70-persistent-net-rulesprovient d'anciennes versions remplacées par systemd .link (mais elles ne sont pas créées automatiquement), je l'ai ajouté ici pour vérifier son existence pour des problèmes spécifiques mais pas pour le cas d' AntiHaapala .

user.dz
la source
1

Vous devez mettre à jour votre initrdavec quelque chose comme update-initramfs -k all -c, car udev applique déjà ces configurations lors de l'exécution initrd.

Ubuntu 16.04 n'a plus de fichier 70-persistent-net-rules.

Jani Jaakkola
la source
1
C'est étrange, ce système 16.04 le fait. Ahh mais c'est un système amélioré. Vous avez raison, il n'est pas présent dans une nouvelle installation.
Elder Geek
0

Je n'ai pas assez de réputation pour commenter, mais juste pour ajouter à la réponse marquée, les installations propres d'Ubuntu 16.04 n'auront pas le fichier /etc/udev/rules.d/70-persistent-net.rules présent. Cependant, si vous le créez manuellement, vous pouvez ajouter une ligne comme indiqué dans la réponse ici et cela devrait fonctionner comme dans les versions antérieures, avec une différence notable - le paramètre KERNEL doit être spécifié comme le nom attribué au interface par défaut. Par exemple, si le système a nommé l'interface "ens160" et que vous souhaitez la changer en "eth0", la ligne pourrait ressembler à:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

Cela indique à la règle de ne correspondre que sur une interface correspondant au MAC spécifié (dans le paramètre ATTR {adresse}) et avec un nom de noyau correspondant au paramètre KERNEL. Alternativement, vous pouvez probablement omettre complètement le paramètre KERNEL et cela devrait également fonctionner.

EDIT: Et comme déjà mentionné, si vous souhaitez utiliser la méthode du fichier .link, vous devrez mettre à jour initramfs pour qu'elle prenne effet. Notez également que le fichier .link personnalisé doit être créé dans / etc / systemd / network et non dans / lib / systemd / network (l'un ou l'autre fonctionnera mais la meilleure pratique consiste à utiliser / etc / systemd / network car c'est à cela qu'il sert - à autoriser les fichiers .link personnalisés qui remplacent les valeurs par défaut dans / lib / systemd / network).

dwillis77
la source