Я пытаюсь переименовать сетевой интерфейс на 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, следует ли мне его создать?
Любое понимание того, почему мое имя интерфейса не сохраняется, очень приветствуется.
Согласно 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"
Запись в systemd docs, это связано с новыми Предсказуемыми именами сетевых интерфейсов
В док-дисках сказано, что у вас есть три варианта отключения этого поведения, и, вероятно, третий - самый простой:
Вы отключаете назначение фиксированных имен, так что непредсказуемые имена ядра используются снова. Для этого просто замаскируйте .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 в командной строке ядра
Я пробовал все вышеперечисленное. Ничего не работает. Я постоянно занимался поиском в течение 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.
В примерах теперь явно указано, что вам нужно установить NamePolicy=
:
[Link]
NamePolicy=
Name=eth0
, так что предпочтение отдается Name=eth0
. В противном случае значение по умолчанию NamePolicy
имеет приоритет.
Я протестировал это и могу подтвердить, что проблема устранена.