Я пытаюсь переименовать сетевой интерфейс на 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: 33MHz: 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, следует ли его создавать?
Любое понимание того, почему мое имя интерфейса не приживается, очень приветствуется.
В соответствии с 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) была решена путем создания двух файлов в /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-persistent-network.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"
Я пробовал все вышеперечисленное. Ничего не работает. Я постоянно занимаюсь исследованиями в течение 2 недель.
Я нашел ответ, И ЭТО РАБОТАЕТ. Вот:
https://superuser.com/questions/914646/renaming-network-interface-with-systemd
В посте есть ссылка на заметки Леннарта, которые совершенно не помогают. прочтите пост, и вы должны выиграть.
Вот как я заставил это работать:
Шаг 1: sudo nano /etc/udev/rules.d/70-local-net-names.rules
SUBSYSTEM == "net", ACTION == "add", ATTR {address} == "74: da: 38: 68: 55: c1", NAME = "wlan1"
Этот файл необходимо заказать до /usr/lib/udev/rules.d/80-net-setup-link.rules
Это работает в Debian Stretch. Он должен работать и на Ubuntu.
Согласно системным документам, это связано с новым Предсказуемые имена сетевых интерфейсов
Документы говорят, что у вас есть три варианта отключения этого поведения, и, вероятно, третий вариант самый простой:
Вы отключаете назначение фиксированных имен, чтобы снова использовались непредсказуемые имена ядра. Для этого просто замаскируйте файл .link udev для политики по умолчанию: ln -s / dev / null /etc/systemd/network/99-default.link
Вы создаете свою собственную схему именования вручную, например, называя свои интерфейсы «internet0», «dmz0» или «lan0». Для этого создайте свои собственные файлы .link в / etc / systemd / network /, выбрав явное имя или лучшую схему именования для одного, некоторых или всех ваших интерфейсов. См. Systemd.link (5) для получения дополнительной информации.
Вы передаете net.ifnames = 0 в командной строке ядра
В Примеры теперь явно укажите, что вам нужно установить NamePolicy=
:
[Link]
NamePolicy=
Name=eth0
так что Name=eth0
отдает предпочтение. В противном случае по умолчанию NamePolicy
имеет приоритет.
Я проверил это и могу подтвердить, что это решает проблему.