Интерфейс не переименовывается в systemd

Я пытаюсь переименовать сетевой интерфейс на Ubuntu 16.04 VPS, но не могу этого сделать. Systemd называет мой основной сетевой интерфейс enp0s3. Я хочу переименовать этот интерфейс в eth0.

Согласно документации systemd.link я создал файл с именем /etc/systemd/network/10-eth0.link с следующее содержание:

[Match]
MACAddress=08:00:27:f7:57:e5

[Link]
Name=eth0

MAC-адрес соответствует тому, который указан в выходных данных ip a для интерфейса. Я также переименовал записи enp0s3 в eth0 в файле / etc / network / interfaces . Хотя, когда я перезагружаю машину, интерфейс все еще называется enp0s3.

Мне интересны следующие записи в выводе dmesg :

e1000 0000: 00: 03.0 eth0: (PCI: 33 МГц: 32 бита) 08: 00: 27: f7: 57: e5
e1000 0000: 00: 03.0 eth0: Сетевое подключение Intel (R) PRO / 1000
e1000 0000: 00: 03.0 enp0s3: переименовано из eth0

Таким образом, очевидно, оно начинается как eth0, но затем снова переименовывается в enp0s3. Я не уверен, почему?

Когда я пытаюсь отладить файл ссылок, я получаю следующий результат:

$ sudo udevadm test-builtin net_setup_link /etc/systemd/network/10-eth0.link
calling: test-builtin
=== trie on-disk ===
tool version:          229
file size:         6841778 bytes
header size             80 bytes
strings            1755242 bytes
nodes              5086456 bytes
Load module index
timestamp of 'etc/systemd/network' changed
Parsed configuration file /lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/10-eth0.link
Created link configuration context.
unable to open device '/sys/etc/systemd/network/10-eth0.link'

Unload module index
Unloaded link configuration context.

Строка о невозможности открытия устройства кажется странной. Я не уверен, почему он пытается это сделать, в / sys вообще нет каталога etc, следует ли мне его создать?

Любое понимание того, почему мое имя интерфейса не сохраняется, очень приветствуется.

4
задан 10 March 2017 в 13:16
4 ответа

Согласно https://www.freedesktop.org/software/systemd/man/systemd.link.html, политика именования по умолчанию:

#  /usr/lib/systemd/network/99-default.link
[Link]
NamePolicy=kernel database onboard slot path
MACAddressPolicy=persistent

Поэтому я подозреваю, что вы, возможно, захотите добавить следующую строку в eth0.link:

NamePolicy=mac

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

Каждая из политик может давать сбой, и используется первая успешная политика. Имя не устанавливается напрямую, а экспортируется в udev как свойство "ID_NET_NAME", которое по умолчанию используется правилом udev для установки "NAME". Если имя уже было установлено пользователем, переименование не выполняется

Это просто догадка.

Вы также должны быть в состоянии просто отключить default.link, по крайней мере, для https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

На некоторых openSUSE системах, которые я запускаю, у меня была похожая проблема, которая (в дополнение к тому, что мне пришлось использовать 99-default). link 'trick') был решен путем создания двух файлов в файле /etc/udev/rules.d (см. https://unix.stackexchange.com/questions/118272/80-net-setup-link-no-longer-functions-when-i-downgraded-systemd, https://wiki.archlinux.org/index.php/Network_configuration#Device_names и https://wiki. gentoo.org/wiki/Udev/Upgrade_Guide):

sudo touch /etc/udev/rules.d/80-net-setup-link.rules (или просто убедитесь, что пустой файл с таким именем находится в этом месте)

И

Я создал /etc/udev/rules.d/10-персистент-сеть. rules:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", ATTR{tx_queue_len}="1000"

В вашем случае вы можете использовать этот файл для установки нужного вам имени:

ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="08:00:27:f7:57:e5",NAME="eth0"
6
ответ дан 3 December 2019 в 02:43

Запись в systemd docs, это связано с новыми Предсказуемыми именами сетевых интерфейсов

В док-дисках сказано, что у вас есть три варианта отключения этого поведения, и, вероятно, третий - самый простой:

  1. Вы отключаете назначение фиксированных имен, так что непредсказуемые имена ядра используются снова. Для этого просто замаскируйте .link файл udev для политики по умолчанию: ln -s /dev/null /etc/systemd/network/99-default.link

  2. Вы создаете свою собственную схему именования вручную, например, называя ваши интерфейсы "internet0", "dmz0" или "lan0". Для этого создайте свои собственные .link файлы в /etc/systemd/network/, которые выбирают явное имя или лучшую схему именования для одного, некоторых или всех Ваших интерфейсов. За дополнительной информацией обращайтесь к systemd.link(5).

  3. Вы передаете net.ifnames=0 в командной строке ядра

1
ответ дан 3 December 2019 в 02:43

Я пробовал все вышеперечисленное. Ничего не работает. Я постоянно занимался поиском в течение 2 недель.

Я нашел ответ, И ЭТО РАБОТАЕТ. Здесь:

https://superuser.com/questions/914646/renaming-network-interface-with-systemd

Сообщение содержит ссылку на заметки Леннарта, которые совсем не помогают. прочтите сообщение, и вы должны выиграть.

Вот как я заставил это работать:

Шаг 1: sudo nano /etc/udev/rules.d/70-local-net-names.rules[12115 visibleSUBSYSTEM=="net ", ACTION ==" add ", ATTR {address} ==" 74: da: 38: 68: 55: c1 ", NAME =" wlan1 "

Этот файл необходимо заказать до /usr/lib/udev/rules.d/80-net-setup-link.rules[12117 providedЭто работает в Debian Stretch . Он также должен работать в Ubuntu.

2
ответ дан 3 December 2019 в 02:43

В примерах теперь явно указано, что вам нужно установить NamePolicy=:

[Link]
NamePolicy=
Name=eth0

, так что предпочтение отдается Name=eth0. В противном случае значение по умолчанию NamePolicy имеет приоритет.

Я протестировал это и могу подтвердить, что проблема устранена.

0
ответ дан 30 March 2020 в 21:30

Теги

Похожие вопросы