Migration depuis les anciens noms d'interface réseau en vue de montée en Debian 10

Tags: #<Tag:0x00007fd6e756b9e8> #<Tag:0x00007fd6e756b920> #<Tag:0x00007fd6e756b858>

Bonjour,

Désolé je vais certainement paraitre pour un noob et le problème a certainement déjà été évoqué 50 fois mais voilà, je galère un peu à préparer mon installation actuelle pour passer en Debian 10.

En effet j’ai un serveur dédié installé à l’origine en Debian 8, mis à jour en 9 sans grand soucis, sauf que j’allais pour migrer en 10 et je suis tombé sur ce point d’attention :
https://www.debian.org/releases/stable/amd64/release-notes/ch-information.fr.html#migrate-interface-names

Le problème étant que je n’y comprend absolument rien et quand j’ai essayé de changer pour les nouveaux noms d’interfaces réseau, mon serveur n’était plus du tout connecté et j’ai dû utiliser un mode de récupération de secours pour revenir à la configuration précédente. Du coup en attendant je n’ai pas fait la montée de version et ça commence à m’embêter.

Bref, pour faire simple, voici l’état des lieux sur ma machine :
La commande $ echo /sys/class/net/[ew]* me retourne logiquement :
/sys/class/net/eth0

J’ai donc utilisé les deux commandes suivantes :

$ sudo rgrep -w eth0 /etc
$ udevadm test-builtin net_id /sys/class/net/eth0 2>/dev/null

Qui me retournent respectivement :

/etc/noderig/config.yaml:   - eth0
/etc/udev/rules.d/70-persistent-net.rules:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
/etc/dhcp/dhclient.conf:#  interface "eth0";
/etc/dhcp/dhclient.conf:#  interface "eth0";
/etc/network/if-up.d/ipv6-routes:# process is parallelized, because eth0 is not up
/etc/network/if-up.d/ipv6-routes:/sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
/etc/network/if-up.d/upstart:   # Ignoring unknown interface eth0=eth0.
/etc/network/interfaces:auto eth0
/etc/network/interfaces:iface eth0 inet static
/etc/network/interfaces:        post-up /sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
/etc/network/interfaces:        pre-down /sbin/ip -family inet6 route del 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
/etc/initramfs-tools/initramfs.conf:# Specify a specific network interface, like eth0
/etc/sysctl.conf:net.ipv6.conf.eth0.autoconf = 0
/etc/sysctl.conf:net.ipv6.conf.eth0.accept_ra = 0

Et :

ID_NET_NAME_MAC=enxXXXXXXX
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
ID_NET_NAME_ONBOARD=eno1
ID_NET_NAME_PATH=enp0s25

Mon fichier /etc/udev/rules.d/70-persistent-net.rules contient :

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x1503 (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Voilà, et là je bloque, je comprend rien à ces histoire de nouveaux noms et ce qu’il faut faire. Dans le doute je n’ai pas lancé la mise à jour car j’ai cru comprendre que le système udev n’était plus supporté en Debian 10…

Merci par avance pour votre aide !

Sans la règle de nommage udev, l’interface s’appellera eno1. Mais je ne vois pas pourquoi la règle udev ne fonctionnerait plus.

on peut très bien fonctionner « à l’ancienne »
https://wiki.debian.org/NetworkInterfaceNames

ceci dit tout fonctionne très bien sans règle udev

ls -alrt  /etc/udev/rules.d/70-persistent-net.rules
ls: impossible d'accéder à '/etc/udev/rules.d/70-persistent-net.rules': Aucun fichier ou dossier de ce type

 echo /sys/class/net/[ew]*
/sys/class/net/enp4s0 /sys/class/net/wlo2

nmcli
wlo2: connecté à E-G
        "Broadcom and subsidiaries BCM4313"
        wifi (wl), CC:52:AF:xx:xx:xx, hw, mtu 1492
        ip4 par défaut
        inet4 192.168.1.68/24
        route4 0.0.0.0/0
        route4 192.168.1.0/24
        route4 169.254.0.0/16

enp4s0: indisponible
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), 98:4B:E1:xx:xx:xx, hw, mtu 1500

lo: non-géré
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

1 J'aime

En fait j’ai du mal à comprendre ce que je dois faire pour avoir le nouveau schéma de nommage et que ça fonctionne au reboot. Comme je le disais, ma précédente tentative s’est soldée par un échec cuisant :smiley: Mon serveur ne se connectait plus au réseau ce qui est quand même peu pratique.

Du coup si je renomme le fichier /etc/udev/rules.d/70-persistent-net.rules pour qu’il soit inactif, je dois bien avoir un changement à faire quelque part ailleurs non ?

Merci pour votre aide !

En fait je me base sur cette info :
image

Donc si je comprend bien si je reste sur eth0 je risque de ne pas pouvoir faire la mise à jour. D’où ma volonté de mettre ça au propre avant :slight_smile:

Pas très gênant si tu peux t’y connecter via une console locale pour faire les corrections nécessaires. D’après l’adresse IPv6 figurant dans des fichiers, le serveur est hébergé chez OVH, je ne sais pas s’il fournit ce service ou seulement un système de dépannage accessible par SSH.

Comme indiqué dans les notes de publication

  • reconstruire l’initramfs qui contient une copie de ce fichier

  • modifier les autres fichiers de configuration ou scripts qui mentionnent le nom de l’interface.

Tu as identifié un certain nombre de ces fichiers dans /etc. Certaines occurrences ne sont que des commentaires génériques (dhclient.conf, upstart, initramfs.conf), pas besoin d’y toucher. Evidemment il faut modifier /etc/network/interfaces et /etc/sysctl.conf.

Notes :

  • Les réglages IPv6 faits dans sysctl.conf pourraient être faits dans /etc/network/interfaces avec les options correspondantes dans la strophe inet6 (cf. man interfaces). Ça fera des occurrences du nom de l’interface en moins.

  • Par précaution, il serait plus sûr d’ajouter de nouvelles strophes pour le nouveau nom de l’interface au lien de renommer l’interface dans les strophes existantes sinon le système risque de coincer lors de l’arrêt, l’interface n’étant pas encore renommée. Il faut seulement remplacer « auto eth0 » par « allow-hotplug eth0 » pour ne pas coincer lors du redémarrage.

A quoi sert le fichier /etc/network/if-up.d/ipv6-routes ? Ce n’est pas un fichier standard de Debian, et la commande contenant eth0 semble faire doublon avec une commande post-up dans /etc/network/interfaces. On peut voir le contenu complet de ces deux fichiers ?

1 J'aime

Merci pour l’aide !

En fait lors de ma précédente tentative, j’avais effectivement renommé toutes les occurrences de eth0 en eno1, renommé le fichier 70-persistent-net.rules pour le rendre inactif, j’avais ensuite recontruit l’initramfs puis redémarré. Le souci étant que mon serveur ssh ne répondait plus en effet. J’ai dû passer par un mode de dépannage car je n’ai pas d’autres accès que SSH.

Comme on dit chat échaudé…

J’avoue que les réglages IPv6 n’ont pas été fait par moi, là encore je ne maitrise pas du tout le sujet :smiley: Mais je vais regarder le man.

Mais c’est intéressant cette histoire de allow-hotplug eth0, je vais tenter !

Voici les informations des fichiers :

/etc/network/if-up.d/ipv6-routes :

#!/bin/sh
# This script sets up the IPv6 connectivity by setting the default route.
# Matching entries in /etc/network/interfaces might not work when the boot
# process is parallelized, because eth0 is not up
# quickly enough.
sleep 5
/sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
/sbin/ip -family inet6 route add default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
exit 0

/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 111.222.333.444
        netmask 255.255.255.0
        network 111.222.333.0
        broadcast 111.222.333.255
        gateway 111.222.333.254

iface et0 inet6 static
        address 2001:XXXX:8:E23c::
        netmask 64
        post-up /sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
        post-up /sbin/ip -family inet6 route add default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0

Merci encore !

D’après ce que je vois là : https://superuser.com/questions/33196/how-to-disable-autoconfiguration-on-ipv6-in-linux

Les règles /etc/sysctl.conf:net.ipv6.conf.eth0.autoconf = 0et /etc/sysctl.conf:net.ipv6.conf.eth0.accept_ra = 0 semblent servir à désactiver l’autoconfiguration. Je suppose que c’est un réglage mis en place par OVH à l’installation du serveur. Je devrait pouvoir mettre net.ipv6.conf.all.autoconf=0 et net.ipv6.conf.all.accept_ra=0 pour que ça marche dans tous les cas.

Je m’étonnais que la recherche avec grep n’ait pas affiché de ligne inet6, voilà l’explication : une faute dans le nom de l’interface « et0 ». Du coup ton serveur n’a pas de configuration IPv6, mais si ça ne te gêne pas je suppose que tu ne t’en sers pas ? Du coup tu peux désactiver le script ipv6-routes dans un premier temps, ça ne risque pas de te gêner.

Comme je l’ai écrit tu peux remplacer les lignes dans sysctl.conf par des options dans cette strophe (après avoir corrigé la faute dans le nom de l’interface) :

accept_ra 0
autoconf 0

Note qu’avec la méthode « static », autoconf est à 0 par défaut.

En fait ça ne marche que pour les interfaces qui existent déjà au moment de l’application des règles. Avec l’asynchronisme et le parallélisme inhérents à systemd, ce n’est pas garanti.

1 J'aime

En fait le fichier /etc/sysctl.conf ne contient que des instructions pour désactiver l’autoconfiguration de l’ipv6 :

# Disable IPv6 autoconf
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.eth0.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.default.accept_ra = 0
net.ipv6.conf.eth0.accept_ra = 0

Ha ! Bien vu. Punaise la bonne typo :slight_smile:

Bon je vais re-tenter l’opération du coup ! Allez on prend son courage !

Merci pour toutes ces précieuses explications.

En fait la typo devait être un reste de ma première tentative mal corrigée…

Tu peux montrer le fichier interfaces avec les corrections avant de redémarrer ?

Yes !

Voilà :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eno1
allow-hotplug eth0

iface eno1 inet static
        address 111.222.333.444
        netmask 255.255.255.0
        network 111.222.333.0
        broadcast 111.222.333.255
        gateway 111.222.333.254

iface eno1 inet6 static
        accept_ra 0
        autoconf 0
        address 2001:XXXX:8:E23c::
        netmask 64
        post-up /sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eno1
        post-up /sbin/ip -family inet6 route add default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eno1

iface eth0 inet static
        address 111.222.333.444
        netmask 255.255.255.0
        network 111.222.333.0
        broadcast 111.222.333.255
        gateway 111.222.333.254

iface eth0 inet6 static
        accept_ra 0
        autoconf 0
        address 2001:XXXX:8:E23c::
        netmask 64
        post-up /sbin/ip -family inet6 route add 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0
        post-up /sbin/ip -family inet6 route add default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del default via 2001:XXXX:8:E2ff:ff:ff:ff:ff
        pre-down /sbin/ip -family inet6 route del 2001:XXXX:8:E2ff:ff:ff:ff:ff dev eth0

Par sécurité je mettrais aussi allow-hotplug au lieu de auto pour eno1, cela évitera une erreur au démarrage au cas où l’interface ne changerait pas de nom.

Pour alléger le fichier tu peux aussi supprimer les lignes network (pas netmask), broadcast et pre-down qui sont toutes inutiles.

1 J'aime

Ok je met allow-hotplug sur les deux. Pour le moment je touche à rien d’autres, je nettoierais après si ça marche :slight_smile:

Ok alors, j’ai pas perdu l’accès au serveur (youpi), mais… la commande echo /sys/class/net/[ew]*
me retourne :

/sys/class/net/eth0

ça devrait être eno1 non ?

ifconfig aussi voit toujours eth0… J’ai du mal à savoir ce qui c’est passé du coup :smiley:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 111.222.333.444  netmask 255.255.255.0  broadcast 111.222.333.255
        inet6 2001:XXXX:8:e23c::  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::XXXX:b9ff:fe4f:15c1  prefixlen 64  scopeid 0x20<link>
        ether aa:bb:cc:dd:ee:ff  txqueuelen 1000  (Ethernet)
        RX packets 5023  bytes 1047749 (1023.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3649  bytes 1136210 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xfe500000-fe520000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Boucle locale)
        RX packets 125  bytes 49845 (48.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 125  bytes 49845 (48.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

edit : @PascalHambourg je ne peux plus poster aujourd’hui (nouvel utilisateur), du coup je te répond sur le précédent :

Yes, j’ai commenté la ligne dans le fichier /etc/udev/rules.d/70-persistent-net.rules.

Puis j’ai regénéré l’initramfs avec la commande :

sudo update-initramfs -u -k all

Enfin j’ai vu que ça pouvait avoir aussi un impact de regénérer grub, du coup j’ai aussi fait ça :

sudo update-grub

Une chance que tu aies laissé la configuration pour eth0.
Tu as bien désactivé la règle udev (comment ?) et regénéré l’initramfs ?
Vu la réponse.
Que dit

cat /proc/cmdline
1 J'aime
BOOT_IMAGE=/boot/vmlinuz-4.9.0-11-amd64 root=/dev/md2 ro