Carte réseauDans mon bureau, j’ai trois machines qui me servent de bac à sable bare metal pour tester toutes sortes de configurations. Je viens tout juste de changer la machine qui fait office de serveur dans ce trio, et je me suis retrouvé confronté à un problème assez original.

L’installateur de CentOS 7 a identifié les deux interfaces réseau de la machine en tant que enp2s2 et eth1. Après le redémarrage initial, je n’ai pas pu accéder au réseau local, ce que j’ai trouvé quelque peu curieux. Depuis que Red Hat a décidé de changer la politique de nommage des interfaces réseau et que les bons vieux eth0, eth1, eth2 etc. se sont retrouvés avec des noms à coucher dehors comme enp63s0, enp7s4 ou p3p1, je n’ai pas eu le moindre souci en termes de persistance de l’interface.

Après plusieurs redémarrages successifs, j’ai dû me rendre à l’évidence que quelque chose clochait.

  • Mon interface enp2s2 ne bougeait pas.
  • En revanche, l’autre interface était renommée en eth0 ou eth1 de manière erratique.
  • Mystère et boules de gomme.

Avant de migrer vers CentOS en 2017, je chassais l’ours à mains nues sous Slackware, et j’avais l’habitude de renommer mes interfaces réseau en cas de besoin. J’ai donc entrepris de rectifier le tir manuellement ici.

Dans un premier temps, j’édite /etc/default/grub et j’ajoute deux options de kernel pour désactiver le nouveau schéma de nommage des interfaces réseau.

GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"

Je prends en compte les modifications.

# grub2-mkconfig -o /boot/grub2/grub.cfg

Ensuite je crée un fichier /etc/udev/rules.d/70-persistent-net.rules comme ceci.

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1a:a0:10:a7:2f", 
  ATTR{type}=="1", KERNEL=="eth*", NAME="wan0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:27:19:f1:bc:3a", 
  ATTR{type}=="1", KERNEL=="eth*", NAME="lan0"

ImportantAttention, les retours à la ligne figurent uniquement pour des raisons de lisibilité dans le listing. Dans l’original, il s’agit de deux lignes longues qui ne doivent pas comporter la moindre césure.

Au passage, j’ai pu découvrir un bug mystérieux qui n’est apparemment documenté nulle part.

  • Lorsqu’on prend des valeurs traditionnelles comme eth0 ou eth1, ça ne marche pas.
  • En revanche, ça fonctionne très bien avec eth2, eth3, etc.
  • Tant qu’à faire, j’ai choisi des noms parlants pour ma machine qui fait office de passerelle, et j’ai pris wan0 et lan0.

À partir de là, il m’a suffi d’éditer deux fichiers ifcfg-lan0 et ifcfg-wan0, et le tour est joué.

# /etc/sysconfig/network-scripts/ifcfg-wan0
DEVICE=wan0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.2.5
NETMASK=255.255.255.0

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Serveur

1 commentaire

Chris · 27 mars 2020 à 17 h 53 min

On peut aussi éditer le fichier modèle de GRUB /etc/defaut.grub et ajouter les paramètres net.ifnames=0 biosdevname=0 à la fin de la ligne commençant par GRUB_CMDLINE_LINUX= et avant le caractère  » de fin de ligne. Puis reconstruire l’image de démarrage du système avec la commande grub2-mkconfig -o /boot/grub2/grub.cfg. Puis, changer le nom de l’interface dans le fichier de configuration réseau existant avant la commande cd /etc/sysconfig/network-scripts && sed ‘s/ens192/eth0/g’ ifcfg-ens192 > ifcfg-eth0 && rm -f ifcfg-ens192 , puis enfin redémarrer la machine par un init 6. A partir de maintenant, si vous rajouter une interface réseau, elle s’appellera autoomatiquerment eth1, puis eth2, etc… 😉 😉 😉

Les commentaires sont fermés.