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

24

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émarrer?

A systemctl restart networkne fait pas l'affaire.

Je peux fermer une interface par son ancien nom ( ifdown eth0) mais ifupentraîne un 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

Les deux ifconfiget ip aaffichent les anciens noms d'interface.

udondan
la source
1
Vous pouvez essayer de supprimer et de recharger les pilotes de périphérique réseau, s'ils sont compilés en tant que modules du noyau.
Tom Hunt

Réponses:

29

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 quitte le ci - dessous pour un souci d'exhaustivité et de la postérité (et à titre d' information,) mais j'ai confirmé le commentaire de pâtée et la réponse de Marco Macuzzo que le simple changement du nom et périphérique de l'interface / etc / sysconfig / network-scripts / ifcfg- eth0 (et renommer le fichier) entraînera le nom correct du périphérique tant que le champ hwaddr = est inclus dans le fichier de configuration. Je recommande d'utiliser cette méthode à la place après la mise à jour référencée.

Vous pouvez également vous assurer que vous configurez une règle udev, afin que cela fonctionne également au 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 avez ajouté "net.ifnames = 0 biosdevname = 0" à votre chaîne de démarrage du noyau 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.

James Shewey
la source
2
Juste une note à ce sujet. Si vous utilisez CentOS 7.3, cela ne fonctionne pas. Cela est dû à ce problème ( access.redhat.com/solutions/2592561 ). Vous devrez remplacer le fichier à /etc/udev/rules.d/90-eno-fix.rulescar il remplace toutes les solutions fonctionnant précédemment pour renommer les périphériques réseau.
swill
En regardant l'avis que vous avez référencé, il note "Ce problème peut être évité en mettant à jour les référentiels d'installation pour inclure le package systemd-219-30.el7_3.6 ou version ultérieure. Avec cette version plus récente de systemd, les interfaces affectées sont identifiées lors de l'installation du package et une règle udev est générée automatiquement afin d'éviter tout problème de changement de nom. "
James Shewey
Il s'agit d'un problème de changement de nom différent auquel ils font référence. Ils parlent de raccourcir le nom parce qu'il est trop long (je pense). La règle udev mentionnée en dur code le nom de l'interface à une eno########valeur qui remplace toutes ces tentatives pour le renommer en quelque chose comme eth0. Cela a-t-il du sens? Je devrai vérifier sur ma machine la version que j'utilise, mais j'ai mis à niveau vers le dernier CentOS 7.3 hier, donc je pense que j'aurai la version mentionnée.
swill
Cette méthode m'a été utile pour résoudre un problème différent mais connexe - un conteneur s'est écrasé lors du démarrage en raison d'une erreur de configuration non liée et a laissé l'interface renommée du nom système ensXfY au nom du conteneur eth1. Il n'était alors pas possible de réessayer de démarrer le conteneur car il ne pouvait pas trouver l'interface jusqu'à ce qu'il soit renommé
Michael Firth
9

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 les ip linkcommandes 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>en ifcfg_<new_device_name>et changez la DEVICEvariable à l'intérieur en <new_device_name>. Assurez-vous également que la HWADDRvariable est définie et correcte. Il n'est pas nécessaire de toucher aux règles udev , car il 60-net.rulesest en fait là pour lire les fichiers de configuration ifcfg /etc/sysconfig/network-scripts.

Marco Mazzucco
la source
3

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

net.ifnames=0 biosdevname=0 

à la fin de la GRUB_CMDLINE_LINUXvariable

marque
la source
Ou supprimez simplement le biosdevnamepaquet s'il est installé
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
la source
1
belle astuce de renommage :) merci pour le partage
166_MMX
2

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-scriptspuis déclencher un rechargement, le déchargement et le chargement du module du noyau comme mentionné par @Tom Hunt dans les commentaires fonctionne également:

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.

udondan
la source
0

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/112643 )

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 la ip link set * upcommande. Et /var/log/messagesj'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 à la machine virtuelle 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 cela lsmodme donne (notez le Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 
Sander Visser
la source
Veuillez nous indiquer ce qui n'a pas fonctionné avec la réponse acceptée, avec des messages d'erreur exacts. De cette façon, la réponse peut peut-être être améliorée.
Ned64
@ Ned64 J'ai ajouté le message d'erreur et un peu plus d'informations
Sander Visser
Ce que je veux dire, c'est: que se passe-t-il lorsque vous tapez, en tant que root ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up:? Aucune udev...commande!
Ned64