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

Tags: #<Tag:0x00007fe4cb642b90> #<Tag:0x00007fe4cb642aa0> #<Tag:0x00007fe4cb6429b0>

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

Je recherchais la présence d’un paramètre net.ifnames=0qui désactiverait le nommage « prévisible » des interfaces réseau, mais non.

Tu peux aussi regarder s’il y a un fichier ou lien symbolique /etc/systemd/network/99-default.link ou /etc/udev/rules.d/80-net-setup-link.rules qui pourrait inhiber ce nommage.

Au passage, je trouve que root=/dev/md2 est une mauvaise idée car les noms de périphérique des ensembles RAID ne sont pas d’une persistance absolue et peuvent changer dans des circonstances particulières (comme les noms de disques /dev/sd*). Définir la racine par son UUID serait plus sûr. Mais c’est une autre histoire.

1 J'aime

Non je n’ai pas de règle net.ifnames=0, mais j’ai vu effectivement la chose indiquée sur quelques pages à ce sujet. Je peux ajouter ça en effet dans /etc/default/grub si j’ai bien compris en mettant ça : GRUB_CMDLINE_LINUX="net.ifnames=0" ?

Edit : Ha non ok je viens de piger, il ne faut surtout pas que j’ajoute net.ifnames=0 , ça n’a d’intérêt justement que si je veux rester en eth0…

J’ai pas de fichier /etc/systemd/network/99-default.link, par contre en effet j’ai bien deux liens symboliques dans /etc/udev/rules.d/ :

lrwxrwxrwx 1 root root    9 oct.  29  2015 80-net-name-slot.rules -> /dev/null
lrwxrwxrwx 1 root root    9 oct.  29  2015 80-net-setup-link.rules -> /dev/null

Je les supprimes ?

Pour l’histoire du UUID du disque je vais me pencher dessus après, mais je note !

Merci encore !

Ça dépend de ce que tu veux. Si tu ajoutes ce paramètre (il faut ensuite exécuter update-grub pour qu’il soit appliqué), cela désactivera le nommage « prévisible » (qui ne semble de toute façon pas appliqué).

D’après le wiki Debian, ce lien inhibe le nommage prévisible. Donc si tu le supprimes, il se peut que cela active le nommage prévisible. Là encore, ça dépend de ce que tu veux.

1 J'aime

Hé bien ça semble être mon objectif à priori, du coup j’essaie ! Merci.

 $ echo /sys/class/net/[ew]*

/sys/class/net/eno1

It’s a win!

Grand merci à toi @PascalHambourg ! Je vais pouvoir faire la mise à jour en Debian 10.

ps: je vais éditer les messages précédents pour retirer les infos perso mais pour l’essentiel c’est une super aide !