web-dev-qa-db-fra.com

Ubuntu 17.04: comment renommer une interface réseau USB basée sur Path? (NON basé sur MAC)

Non, il ne s’agit pas d’un doublon de pourquoi mon adaptateur Wi-Fi n’apparaît-il pas comme suit: wlan0 dans 16.04? , car cela explique comment restaurer le nom eth0, mais pas comment nommer individuellement un nom spécifique. interface.

Je ne veux pas assigner basé sur la correspondance de MAC. Tout ce dont j'ai besoin est d’attribuer un nom en fonction du chemin USB .

Lorsque je connecte un adaptateur réseau USB, Ubuntu 17.04 se voit attribuer un nom d'interface réseau basé sur son MAC, tel que encx000000000000. Maintenant, je voudrais le renommer en quelque chose de plus parlant, basé sur son ID_PATH = pci-000:02:03.0-usb-0:1:1.0. En particulier, je ne souhaite pas établir de correspondance en fonction de l'adresse MAC . La raison en est qu’après le remplacement de l’interface, tout tomberait en panne, mais si quelqu'un remplaçait simplement le matériel d'interface réseau de manière à ce que le nouveau matériel se trouve au même endroit que l'ancien, le système restera bloqué sans nécessiter de support informatique ni de reconfiguration.

J'ai donc créé un fichier /etc/systemd/network/50-my-island.link:

[Match]
Path=pci-000:02:03.0-usb-0:1:1.0
[Link]
Name=island0

Malheureusement, le nom n'est jamais attribué. À l'aide de udevadm info, je peux voir qu'il y a ID_NET_NAME=island0 défini, mais cela ne s'applique pas. Essayer NamePolicy= ou NamePolicy=name dans la section [Link] n'aide pas non plus.

Je suis perdu! Comment attribuer mon nom dans le fichier .link à mon adaptateur réseau USB? Est-ce possible sans recourir à une règle de udev? Pourquoi alors avoir des fichiers .link du tout quand ils ne semblent pas fonctionner dans mon cas? Où ai-je commis une erreur?

6
TheDiveO

Alors j'ai finalement compris moi-même ce qui se passe réellement.

Hélas, le problème que je vois, c'est que la règle udev /lib/udev/rules.d/73-usb-net-by-mac.rules sur Ubuntu/Debian (et donc aussi Raspbian) provoque le renommage des interfaces réseau USB -. Le coupable est ici:

ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \
  ATTR{address}=="?[014589cd]:*", \
  TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \
  TEST!="/etc/systemd/network/99-default.link", \
    IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}"

Notez que cette règle spécifique vérifie la présence de /etc/udev/rules.d/80-net-setup-link.rules; sinon, NAMEsera défini sur un nom basé sur MAC48 et la règle d'installation par défaut ultérieure /lib/udev/rules.d/80-net-setup-link.rules n'aura jamais l'occasion d'assigner NAMEname__. Maintenant c'est triste. Encore.

Afin de pouvoir attribuer des noms définis par l'utilisateur à USB interfaces réseau, nous devons disposer de /etc/udev/rules.d/80-net-setup-link.rules, car il s'agit du jeu de règles que 73-usb-net-by-mac.rules contrôle avant. attribuer NAMEname__.

Cela signifie qu'une simple liaison de /etc/udev/rules.d/80-net-setup-link.rules à /lib/udev/rules.d/80-net-setup-link.rules est nécessaire afin d'éviter que les noms d'interface réseau attribués par l'utilisateur ne soient plus ignorés.

Sudo ln -s /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules

Redémarrer. Terminé.

Veuillez noter que l'un des effets secondaires de la façon dont 73-usb-net-by-mac.rules est configuré consiste en ce que toutes les interfaces réseau basées sur USB prennent "l'ancien" nom "eth0, etc.", à moins d'être explicitement nommé dans un fichier .link.

Je ne sais pas pourquoi les règles ont été écrites telles quelles, car il serait bien d’avoir une dénomination basée sur le MAC pour tous les adaptateurs réseau USB non nommés explicitement. À bien y penser ... non , utiliser des noms basés sur MAC48 n’a aucun sens, à moins d’identifier en permanence tous vos dongles réseau USB les échanger; mais peut-être que les noms basés sur MAC sont utilisés avec des stations d'accueil, où il serait logique de procéder ...?

10
TheDiveO

Selon ce fil et surtout ce paragraphe:

Nom de l’interface réseau personnalisée ... Le nom du fichier de règles doit avoir un préfixe inférieur à "80" pour pouvoir être exécuté avant /lib/udev/rules.d/80-net-setup-link.rules, et devrait avoir un préfixe plus grand que "75" pour qu'il soit exécuté après 75-net-description.rules et que vous puissiez donc utiliser des correspondances sur ID_VENDOR et des propriétés similaires. ...

J'ai créé ce fichier: /etc/udev/rules.d/76-netnames.rules

avec ce contenu

# USB device by path
# get ID_PATH if not present yet
ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
SUBSYSTEM=="net", ACTION=="add", ENV{ID_PATH}=="*-usb-0:1.*", NAME="eth%n"

cela fonctionne bien, sans la solution de contournement que vous avez fournie.

J'ai créé ce fichier dans un fichier preseed.cfg de Debian pour définir la configuration de mon réseau cible dans une installation entièrement automatisée de Debian.
Sur un processeur Intel NUC, mon NIC interne est maintenant nommé eno1 par Debian 9.5 (stretch).

3
Brice Miramont