Das Umbenennen der Netzwerkschnittstelle in Ubuntu 16.04 mit systemd schlägt fehl


14

Ich verwende einen Ubuntu 16.04 LTS-Server ohne Kopf mit zwei physischen Netzwerkkarten mit den Namen enp5s0f0 und enp5s0f1.

Ich möchte diese Schnittstellen umbenennen und folgte diesem Beispiel . Ich habe die Datei daher folgendermaßen erstellt /lib/systemd/network/70-myinterface.link(die ursprüngliche Quelle scheint nicht zu funktionieren) (ich habe die richtige Mac-Adresse eingestellt):

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

[Link]
Name=dmz0

und startete den Server neu. Leider wurde die Oberfläche nicht umbenannt, obwohl sich udevadmzeigt, dass meine Konfigurationsdatei verwendet wird:

$ 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

Hast du eine Idee, warum das Umbenennen nicht funktioniert hat?


1
Ich hätte gedacht, / etc / systemd / network wäre der beste Ort, um diese Datei zu erstellen.
NGRhodes

@NGRhodes Ich habe einen Tippfehler angenommen, der auf dem zitierten Beispiel basiert, aber wer weiß?
Elder Geek

Überprüfen Sie auch Networkmanager nicht ausgeführt wird , superuser.com/a/948996/127393 schlägt Networkmanager Priorität
NGRhodes

Nachdem ich das Kopfgeld platziert hatte, bemerkte ich, dass es in 16.04 eine neue udev-Regeldatei gibt, die immer die MAC-Adressentyp-Benennung für USB-Adapter erzwingt, bevor networkd konsultiert wird (/lib/udev/rules.d/73-usb-net-by -mac.rules). Das fühlt sich überhaupt nicht richtig an ... Ich musste seine Regel komplett deaktivieren, wodurch die .link-Datei wieder funktionierte. Ich bin mir jedoch nicht sicher, ob dies die richtigste Option ist. '
Antti Haapala

Verwenden MACAddress= [Match]funktioniert bei mir auch nicht in linkDateien, daher habe ich Path=stattdessen verwendet. Du solltest es auch versuchen. Auch können Sie überprüfen , welche linkDatei entspricht dem Gerät mit udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1Befehl
webKnjaZ

Antworten:


8

Dies kann oder kann nicht helfen .. Ich würde /etc/udev/rules.d überprüfen und sehen, ob Sie 70-persistent-net.rules haben. Sie sollten in der Lage sein, sie mit dieser Datei umzubenennen

Meins sieht so aus:

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

Wenn Sie die Einträge für Ihre Karten in dieser Datei haben, können Sie den Namen beliebig ändern, indem Sie "NAME = TheNameYouWant" ändern.


Direkt am. Ich wollte gerade eine Antwort posten, in der ich erwähnte, dass es interessanterweise einige Leute gibt, die Ubuntu verwenden, die gesagt haben, dass die Methode von @muffel zum Ändern ihres Netzwerknamens nicht funktioniert hat. Das war , was ich wollte vorschlagen ... +1
anonymous2

Hier sollte das Kopfgeld gehen.
EKons

5

Eine Option, die keine udev-Regeln erfordert (eine Alternative zu systemd-networkd .link-Dateien), die mit Ubuntu 16.04 sowie vielen anderen Linux-Versionen funktioniert, ist

Beispiel:

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

Im obigen Beispiel ist peth0 der ursprüngliche Schnittstellenname und eth0 der gewünschte Name. Stecken Sie den Namen ein, den Sie aktuell haben, wo peth0 ist, und den Namen, den Sie wollen, wo eth0 ist. Es ist kein Neustart erforderlich oder wird empfohlen. Wiederholen Sie den Vorgang für die zweite Schnittstellenkarte

Getestet unter Ubuntu 16.04 mit Kernel 4.4.0-36-generic # 55-Ubuntu

Bearbeiten: Wenn Sie nach einer dauerhaften Lösung suchen, die einen Neustart übersteht, lesen Sie Ändern des Namens der Netzwerkschnittstelle in Ubuntu 16.04

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

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

Testen.

Hinweis: Da die @ antti-haapala-Methode zuvor funktioniert hat und plötzlich gestoppt wurde, könnte Sie Folgendes interessieren: "Als Sonderfall deaktiviert eine leere Datei (Dateigröße 0) oder ein Symlink mit demselben Namen, der auf / dev / null zeigt, die Konfigurationsdatei ganz (es ist "maskiert") ". <-Quelle


Ich war sehr nützlich Ihre Antwort, danke + 1 @ElderGeek

1
@ Alberto Ich bin froh, dass es geholfen hat!
Elder Geek


@delfiler Vielen Dank für Ihren Kommentar. Wenn ich Sie richtig verstehe, suchen Sie nach einer Lösung, die einen Neustart übersteht. Ist mir das klar?
Elder Geek


3
  • Alle drei benutzerdefinierten Benennungsmethoden ( systemd: Predictable Network Interface Names) beziehen sich auf udev-Regeln.

    Die & udev-Regeln von systemd .link haben Ordnerpriorität. /etcüberschreibt /runüberschreibt /lib.

    Überprüfen Sie daher das aktuelle Setup.

    # 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
    

    Nach einer Änderung dieser udev-Regeln (Hinzufügen / Entfernen von Überschreibungsdateien) sollte die Boot-RAM-Disk aktualisiert werden:

    sudo update-initramfs -u
    

    Standardmäßig sind dies die einzigen Dateien, die Sie finden können

    ~$ 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
    

    Ich habe sie alle in der VBox fresh 16.04-Installation getestet, wie im folgenden Link dokumentiert. Alle Methoden funktionieren wie erwartet:

    Ubuntu 16.04 komplizierte Schnittstellennamen

  • /etc/udev/rules.d/70-persistent-net-rulesWird von älteren Releases durch systemd .links ersetzt (diese werden jedoch nicht automatisch erstellt), habe ich es hier hinzugefügt, um zu überprüfen, ob es bestimmte Probleme gibt, nicht jedoch für den Fall von AnttiHaapala .


1

Sie müssen Ihr initrdmit so etwas wie aktualisieren update-initramfs -k all -c, da udev diese Konfigurationen bereits während des Betriebs anwendet initrd.

Ubuntu 16.04 hat keine 70-persistent-net-rules-Datei mehr.


1
Das ist seltsam, dieses 16.04-System tut es. Ahh, aber es ist ein verbessertes System. Sie haben Recht, dass es in einer Neuinstallation nicht vorhanden ist.
Elder Geek

0

Ich habe nicht genug Reputation, um einen Kommentar abzugeben, aber nur um die markierte Antwort zu ergänzen, wird bei Neuinstallationen von Ubuntu 16.04 die Datei /etc/udev/rules.d/70-persistent-net.rules nicht vorhanden sein. Wenn Sie es jedoch manuell erstellen, können Sie eine Zeile hinzufügen, wie in der Antwort hier gezeigt, und es sollte genau wie in älteren Versionen funktionieren, mit einem bemerkenswerten Unterschied: Der KERNEL-Parameter sollte als der Name angegeben werden, der dem zugewiesen wurde Schnittstelle standardmäßig. Wenn das System die Schnittstelle beispielsweise als "ens160" bezeichnet und Sie sie in "eth0" ändern möchten, sieht die Zeile möglicherweise folgendermaßen aus:

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

Dies weist die Regel an, nur auf einer Schnittstelle eine Übereinstimmung zu finden, die mit dem angegebenen MAC (im Parameter ATTR {address}) und mit einem dem Parameter KERNEL entsprechenden Kernelnamen übereinstimmt. Alternativ könnten Sie wahrscheinlich den KERNEL-Parameter ganz weglassen, und das sollte auch funktionieren.

BEARBEITEN: Und wenn Sie, wie bereits erwähnt, die .link-Dateimethode verwenden möchten, müssen Sie initramfs aktualisieren, damit sie wirksam wird. Beachten Sie auch, dass die benutzerdefinierte .link-Datei in / etc / systemd / network und nicht in / lib / systemd / network erstellt werden sollte Lassen Sie benutzerdefinierte Link-Dateien zu, die die Standardeinstellungen in / lib / systemd / network überschreiben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.