предсказуемые имена сетевых интерфейсов в systemd

15

В последних версиях Ubuntu и Debian (stretch) появилась новая схема именования сетевых интерфейсов.

Теперь при обновлении из системы, в которой используются имена в старом стиле, такие как «eth0», я хотел бы знать перед загрузкой, каким будет новое имя.

Как я могу это сделать? Есть ли магический вызов «systemd», который я могу использовать для редактирования / etc / network / interface перед загрузкой (и, следовательно, потерей сетевого подключения)?

Ральф Хильдебрандт
источник
1
Я наткнулся на это, и это лучшее объяснение того, как это работает, я нашел до сих пор: lists.debian.org/debian-user/2017/07/msg01453.html
Нил

Ответы:

7

Доступны две разные схемы: biosdevname против предсказуемого имени сетевого интерфейса.

biosdevname

Biosdevname, по-видимому, используется по умолчанию в Ubuntu. Активируется путем установки пакета biosdevname.

Имя biosdev для интерфейса можно найти с помощью:

biosdevname -i eth0

Предсказуемые имена сетевых интерфейсов

Я считаю, что это стандартная версия в Debian Stretch, но ее необходимо явно включить при обновлении с предыдущих выпусков.

Предсказуемое имя для eth0 можно найти с помощью:

udevadm test-builtin net_id /sys/class/net/eth0 | grep '^ID_NET_NAME_'
ВНП
источник
Хотя фактический ответ о том, как предсказать «перед загрузкой, каким будет новое имя» (согласно ссылке, предоставленной @Neil), заключается в том, что новое имя будет таким же, как и старое , потому что есть еще правила udev, которые настраивают старые имена в /etc/udev/rules.d/70-persistent-net.rules. Ссылка предоставит руководство по миграции, если вы хотите перейти на новую схему именования.
Туомас,
2

Новая схема, очевидно, называется «предсказуемыми именами сетевых интерфейсов», но я не нахожу много документации о том, как на самом деле предсказать имя. Все, что я нашел об этом, в основном указывает на этот комментарий исходного кода (который сам указывает на первую ссылку). Из комментария совершенно не ясно, как узнать, какую схему адресации udev будет использовать для имени сетевого устройства.

По первой ссылке вы можете отключить ее и использовать традиционные имена, добавив net.ifnames=0в командную строку ядра в Grub. В соответствии с этим комментарием может потребоваться создание интерфейса с тегами VLAN, поскольку добавленное расширение сделает имя интерфейса слишком длинным.

В противном случае, возможно, было бы лучше повторно задать вопрос, чтобы объяснить, что вы пытаетесь сделать с именем (например, настроить интерфейс через ansible или что-то подобное).

DerfK
источник
2

Я не уверен, так ли это с обновленными версиями, но на моих старых системах я смог создать пустой файл в нем, /etc/udev/rules.d/80-net-name-slot.rulesи он отключил бы функцию «предсказуемого» именования. Вы также можете создать собственное правило и назвать интерфейсы самостоятельно, основываясь на MAC-адресе или соединениях PCI / USB.

user143311
источник
0

Эта документация может немного помочь. См. Раздел «Что именно изменилось в v197?». Да, я понимаю, что это имеет несколько ограниченную ценность, но может дать вам путь для дальнейших исследований.

Чарльз Бердж
источник