web-dev-qa-db-fra.com

CentOS 7 - Renommer l'interface réseau sans redémarrer

Je renomme les interfaces réseau en modifiant les fichiers dans /etc/sysconfig/network-scripts.

  • eth0 -> nic0
  • eth1 -> nic1

Le contenu des scripts réseau ressemble à ceci, après modification:

# 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

Un redémarrage active la nouvelle configuration. Mais comment puis-je activer cette configuration sans redémarrage?

UNE systemctl restart network ne fait pas l'affaire.

Je peux fermer une interface par son ancien nom (ifdown eth0) mais ifup entraîne le message ci-dessous, peu importe si l'ancien ou le nouveau nom a été fourni:

ERREUR: [/ etc/sysconfig/network-scripts/ifup-eth] Le périphérique nic0 ne semble pas être présent, retardant l'initialisation.

/etc/init.d/network status montre cette sortie:

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

ifconfig et ip a affiche les anciens noms d'interface.

24
udondan

Vous pouvez renommer le périphérique à l'aide de la commande ip:

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

Modifier :

Je laisse ce qui suit pour des raisons d'exhaustivité et de postérité (et à des fins d'information), mais j'ai confirmé commentaire de Swill et réponse de Marco Macuzzo qui change simplement le nom et l'appareil de l'interface/etc/sysconfig/network-scripts/ifcfg-eth0 (et renommer le fichier) provoquera le nom correct du périphérique tant que le champ hwaddr = est inclus dans la configuration Je recommande d'utiliser cette méthode à la place après la mise à jour référencée.

Vous pouvez également vous assurer de configurer une règle udev, afin que cela fonctionne également lors du prochain redémarrage. Le chemin pour udev a été déplacé dans CentOS 7 vers /usr/lib/udev/rules.d/60-net.rules mais vous pouvez toujours le gérer de la même manière. Si vous ajouté "net.ifnames = 0 biosdevname = 0" à votre chaîne de démarrage du noya pour revenir à l'ancien schéma de dénomination de vos cartes réseau, vous pouvez supprimer

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

Et remplacez-le par

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

Vous avez besoin d'une entrée par nic. Assurez-vous d'utiliser la bonne adresse MAC et de mettre à jour le champ NAME. Si vous n'avez pas utilisé "net.ifnames = 0 biosdevname = 0", soyez prudent car il pourrait y avoir des conséquences inattendues.

30
James Shewey

En fait, la meilleure réponse, je crois, est la combinaison des deux réponses déjà publiées. Afin de changer le nom de l'appareil sans redémarrer les services réseau, utilisez le ip link commandes suggérées par James Shewey (ip link set <old_device_name> name <new_device_name>).

Pour que les modifications survivent à un redémarrage dans Red Hat Linux, modifiez le fichier correspondant dans /etc/sysconfig/network-scripts/. Renommez le fichier ifcfg_<old_device_name> à ifcfg_<new_device_name> et changez la variable DEVICE à l'intérieur en <new_device_name>. Assurez-vous également que la variable HWADDR est définie et correcte. Il n'est pas nécessaire de toucher aux règles udev, puisque 60-net.rules est en fait là pour lire les fichiers de configuration ifcfg dans /etc/sysconfig/network-scripts.

9
Marco Mazzucco
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
5
TJ Zimmerman

Pour restaurer l'ancienne convention de dénomination, vous devez modifier le /etc/default/grub fichier et ajoutez ce qui suit

net.ifnames=0 biosdevname=0 

à la fin de GRUB_CMDLINE_LINUX variable

3
Mark

La réponse donnée par @James Shewey semble être la bonne façon de le faire.

Si vous souhaitez simplement travailler avec les fichiers de configuration dans /etc/sysconfig/network-scripts puis déclencher un rechargement, décharger et charger le module du noyau comme mentionné par @Tom Hunt dans les commentaires fonctionne aussi:

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

Si vous accédez à la machine à distance, assurez-vous d'exécuter toutes les commandes dans un Nohup ou vous vous verrouillez:

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

Le pilote à recharger dépend bien sûr de votre interface.

2
udondan

J'ai essayé ce qui précède avec Vagrant/VirtualBox et ansible, mais cela n'a pas fonctionné du tout sur mon environnement de développement.

Les anciens noms d'interface ont été conservés quoi que je fasse jusqu'à un redémarrage complet.

J'ai ajouté les règles suivantes dans /etc/udev/rules.d/60-persistent-net.rules (basé sur: https://access.redhat.com/solutions/11264 )

Mon objectif était de donner à l'interface un nom spécifié basé sur l'adresse PCI.

Exemple:

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

Après avoir ajouté ces règles, j'ai exécuté les commandes suivantes:

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

Le message d'erreur était Cannot find device "int0" sur le ip link set * up commande. Et en /var/log/messages J'ai remarqué les messages suivants

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.

Mais ce qui suit a fonctionné en accédant à VM via VirtualBox et en exécutant les commandes suivantes pour supprimer et rajouter le module du noyau.

rmmod e1000 
modprobe e1000

J'ai trouvé cela dans le fil suivant: https://www.centos.org/forums/viewtopic.php?t=54695

La chose étrange que j'ai remarquée est que lsmod me donne (notez le Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 
0
Sander Visser