CentOS 7 - Netzwerkschnittstelle umbenennen, ohne neu zu starten

24

Ich benenne Netzwerkschnittstellen um, indem ich die Dateien in ändere /etc/sysconfig/network-scripts.

  • eth0 -> nic0
  • eth1 -> nic1

Der Inhalt der Netzwerkskripte sieht nach der Änderung folgendermaßen aus:

# cat /etc/sysconfig/network-scripts/ifcfg-nic0
DEVICE=nic0
BOOTPROTO=static
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
USERCTL=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes

Ein Neustart aktiviert die neue Konfiguration. Aber wie aktiviere ich diese Konfiguration, ohne neu zu starten?

A systemctl restart networkmacht den Trick nicht.

Ich kann eine Schnittstelle mit dem alten Namen ( ifdown eth0) herunterfahren, erhalte jedoch ifupdie folgende Meldung, unabhängig davon, ob der alte oder der neue Name angegeben wurde:

FEHLER: [/ etc / sysconfig / network-scripts / ifup-eth] Gerät nic0 scheint nicht vorhanden zu sein, was die Initialisierung verzögert.

/etc/init.d/network status zeigt diese Ausgabe:

Configured devices:
lo bond0 nic0 nic1
Currently active devices:
lo eth0 eth1 bond0

Beide ifconfigund ip azeigen die alten Schnittstellennamen an.

udondan
quelle
1
Sie können versuchen, die Netzwerkgerätetreiber zu entfernen und neu zu laden, wenn sie als Kernelmodule kompiliert sind.
Tom Hunt

Antworten:

29

Sie können das Gerät mit dem Befehl ip umbenennen:

/sbin/ip link set eth1 down
/sbin/ip link set eth1 name eth123
/sbin/ip link set eth123 up

Bearbeiten :

Ich lasse das Folgende aus Gründen der Vollständigkeit und Nachvollziehbarkeit (und zu Informationszwecken), aber ich habe den Kommentar von swill und die Antwort von Marco Macuzzo bestätigt, dass einfach der Name und das Gerät der Schnittstelle / etc / sysconfig / network-scripts / ifcfg- geändert werden. eth0 (und das Umbenennen der Datei) bewirkt, dass das Gerät korrekt benannt wird , solange das Feld hwaddr = in der Konfigurationsdatei enthalten ist. Ich empfehle diese Methode stattdessen nach dem Update, auf das verwiesen wird.

Möglicherweise möchten Sie auch sicherstellen, dass Sie eine udev-Regel konfigurieren, damit dies auch beim nächsten Neustart funktioniert. Der Pfad für udev wurde in CentOS 7 nach /usr/lib/udev/rules.d/60-net.rules verschoben, Sie können ihn jedoch weiterhin auf die gleiche Weise verwalten. Wenn Sie Ihrer Kernel-Startzeichenfolge "net.ifnames = 0 biosdevname = 0" hinzugefügt haben , um zum alten Benennungsschema für Ihre Netzwerkkarte zurückzukehren, können Sie entfernen

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"

Und ersetzen Sie es durch

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:50:56:8e:3f:a7", NAME="eth123"

Du brauchst einen Eintrag pro NIC. Stellen Sie sicher, dass Sie die richtige MAC-Adresse verwenden und aktualisieren Sie das Feld NAME. Wenn Sie nicht "net.ifnames = 0 biosdevname = 0" verwendet haben, seien Sie vorsichtig, da dies unbeabsichtigte Folgen haben kann.

James Shewey
quelle
2
Nur eine Anmerkung dazu. Wenn Sie CentOS 7.3 verwenden, funktioniert dies nicht. Dies liegt an diesem Problem ( access.redhat.com/solutions/2592561 ). Sie müssen die Datei unter /etc/udev/rules.d/90-eno-fix.rulesüberschreiben, da sie alle zuvor funktionierenden Lösungen zum Umbenennen der Netzwerkgeräte überschreibt.
Swill
In der Empfehlung, auf die Sie verwiesen haben, heißt es: "Dieses Problem kann vermieden werden, indem die Installations-Repositorys so aktualisiert werden, dass sie das Paket systemd-219-30.el7_3.6 oder höher enthalten. In dieser neueren systemd-Version werden betroffene Schnittstellen bei der Paketinstallation und identifiziert Eine udev-Regel wird automatisch generiert, sodass das Umbenennungsproblem vollständig vermieden wird. "
James Shewey
Das ist ein anderes Umbenennungsproblem, auf das sie sich beziehen. Sie reden davon, dass der Name gekürzt wird, weil er zu lang ist (glaube ich). Die erwähnte udev-Regel codiert den Schnittstellennamen in einen eno########Wert, der alle diese Versuche, ihn in so etwas wie umzubenennen, außer Kraft setzt eth0. Ist das sinnvoll? Ich muss auf meinem Computer überprüfen, welche Version ich verwende, aber ich habe gestern ein Upgrade auf die neueste CentOS 7.3-Version durchgeführt, sodass ich denke, dass ich die erwähnte Version haben werde.
Swill
Diese Methode war hilfreich, um ein anderes, aber damit zusammenhängendes Problem zu lösen: Ein Container stürzte beim Start aufgrund eines nicht zusammenhängenden Konfigurationsfehlers ab und die Schnittstelle wurde vom Systemnamen ensXfY in den Containernamen eth1 umbenannt. Es war dann nicht möglich, den Container erneut zu starten, da die Schnittstelle erst wieder gefunden wurde, nachdem sie umbenannt wurde
Michael Firth,
9

Die beste Antwort ist meines Erachtens die Kombination der beiden bereits geposteten Antworten. Verwenden Sie die ip linkvon James Shewey ( ip link set <old_device_name> name <new_device_name>) vorgeschlagenen Befehle , um den Gerätenamen zu ändern, ohne die Netzwerkdienste neu zu starten .

Ändern Sie die entsprechende Datei in, damit die Änderungen nach einem Neustart in Red Hat Linux erhalten bleiben /etc/sysconfig/network-scripts/. Benennen Sie die Datei ifcfg_<old_device_name>in um ifcfg_<new_device_name>und ändern Sie die DEVICEVariable in <new_device_name>. Stellen Sie außerdem sicher, dass die HWADDRVariable festgelegt und korrekt ist. Es ist nicht erforderlich, udev-Regeln zu berühren , da diese 60-net.ruleseigentlich zum Einlesen der ifcfg-Konfigurationsdateien dienen /etc/sysconfig/network-scripts.

Marco Mazzucco
quelle
3

Um die alte Namenskonvention wiederherzustellen, müssen Sie die /etc/default/grubDatei bearbeiten und Folgendes hinzufügen

net.ifnames=0 biosdevname=0 

am Ende der GRUB_CMDLINE_LINUXVariablen

Kennzeichen
quelle
Oder einfach das biosdevnamePaket entfernen , wenn es installiert ist
GAD3R
3
ip link set ens33 down
ip link set ens33 name eth0
ip link set eth0 up

mv /etc/sysconfig/network-scripts/ifcfg-{ens33,eth0}

sed -ire "s/NAME=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

sed -ire "s/DEVICE=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

MAC=$(cat /sys/class/net/eth0/address)

echo -n 'HWADDR="'$MAC\" >> /etc/sysconfig/network-scripts/ifcfg-eth0
TJ Zimmerman
quelle
1
nice
rename
2

Die Antwort von @James Shewey scheint der richtige Weg zu sein.

Wenn Sie nur mit den Konfigurationsdateien in arbeiten /etc/sysconfig/network-scriptsund dann ein Neuladen auslösen möchten, funktioniert das Entladen und Laden des Kernel-Moduls, wie von @Tom Hunt in den Kommentaren erwähnt, ebenfalls:

service network stop
modprobe -r igb
modprobe igb
service network start

Wenn Sie remote auf den Computer zugreifen, stellen Sie sicher, dass Sie alle Befehle in einem Nohup ausführen, da Sie sich sonst aussperren:

nohup sh -c "service network stop && modprobe -r igb && modprobe igb ; service network start"

Der neu zu ladende Treiber hängt natürlich von Ihrer Benutzeroberfläche ab.

udondan
quelle
0

Ich habe das oben genannte mit Vagrant / VirtualBox und ansible versucht, aber irgendwie funktionierte das in meiner Entwicklungsumgebung überhaupt nicht.

Die alten Schnittstellennamen wurden bis zu einem vollständigen Neustart beibehalten.

Ich habe die folgenden Regeln hinzugefügt /etc/udev/rules.d/60-persistent-net.rules(basierend auf: https://access.redhat.com/solutions/112643 )

Mein Ziel war es, der Schnittstelle einen bestimmten Namen zu geben, der auf der PCI-Adresse basiert.

Beispiel:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:09.0", NAME:="int0"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:10.0", NAME:="ext0"

Nach dem Hinzufügen dieser Regeln habe ich die folgenden Befehle ausgeführt:

ip link set eth0 down
udevadm control --reload-rules
udevadm trigger
ip link set int0 up

Die Fehlermeldung befand sich Cannot find device "int0"im ip link set * upBefehl. Und in /var/log/messagesmir sind folgende Meldungen aufgefallen

Aug 16 17:08:41 localhost ansible-command: Invoked with creates=None executable=None _uses_shell=True strip_empty_ends=True _raw_params=ip link set eth0 down && udevadm control --reload-rules && udevadm trigger && ip link set int0 up#012 removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug 16 17:08:41 localhost NetworkManager[6989]: <info>  [1565975321.5971] device (eth6): state change: disconnected -> unavailable (reason 'carrier-changed', sys-iface-state: 'managed')
Aug 16 17:08:41 localhost systemd-udevd: Network interface NamePolicy= disabled on kernel command line, ignoring.

Das Folgende funktionierte jedoch, indem auf die VM über VirtualBox zugegriffen wurde und die folgenden Befehle ausgeführt wurden, um das Kernelmodul zu entfernen und erneut hinzuzufügen.

rmmod e1000 
modprobe e1000

Ich habe dies in folgendem Thread gefunden: https://www.centos.org/forums/viewtopic.php?t=54695

Das Merkwürdige bemerkte ich , war , dass lsmodmir gibt ( man beachte die Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 
Sander Visser
quelle
Bitte teilen Sie uns mit, was bei der akzeptierten Antwort mit genauen Fehlermeldungen nicht funktioniert hat. Auf diese Weise kann die Antwort möglicherweise verbessert werden.
Ned64,
@ Ned64 Ich habe die Fehlermeldung und ein bisschen mehr Infos hinzugefügt
Sander Visser
Was ich meine ist: Was passiert, wenn Sie als root: eingeben ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up? Kein udev...Befehl!
Ned64