Нет, это не дубликат того, Почему мой адаптер Wi-Fi не обнаруживается как wlan0 в 16,04?, поскольку это объясняет, как восстановить eth0
именование, но не, как индивидуально назвать определенный интерфейс.
Я не хочу присваиваться на основе соответствия MAC. Все, в чем я нуждаюсь, должно присвоить имя на основе пути USB.
Когда я включаю сетевой адаптер USB, на Ubuntu 17.04 ему присваивают название сетевого интерфейса на основе его MAC, такой как encx000000000000
. Теперь я хотел бы переименовать его к чему-то больше сообщения, на основе его ID_PATH =pci-000:02:03.0-usb-0:1:1.0
. В частности, я не хочу соответствовать на основе MAC-адреса. Объяснение - то, что после интерфейсной замены все сломались бы, но если кто-то просто заменит аппаратные средства сетевого интерфейса так, чтобы новые аппаратные средства были в том же месте как старое, система подвернет на, не нуждаясь в IT и поддержке реконфигурирования.
Таким образом, я создал файл /etc/systemd/network/50-my-island.link
:
[Match]
Path=pci-000:02:03.0-usb-0:1:1.0
[Link]
Name=island0
К сожалению, имя никогда не присваивается. Используя udevadm info
Я вижу, что существует ID_NET_NAME=island0
набор, но это не применяется. Попытка NamePolicy=
или NamePolicy=name
под [Link]
раздел не помогает также.
Я заблудился! Как я могу присвоить свое имя в .link файле к моему сетевому адаптеру USB? Действительно ли это возможно вообще, не обращаясь к некоторому правилу udev? Почему, затем имея .link файлы вообще, когда они, кажется, не работают в моем случае? Где я совершал ошибку?
Итак, я наконец-то понял, что происходит на самом деле.
Увы, я вижу проблему в том, что переименование сетевых интерфейсов на основе USB не работает, на самом деле вызвано правилом udev /lib/udev/rules.d/73-usb-net-by-mac.rules
в Ubuntu / Debian (и, следовательно, также в Raspbian). Виновник здесь:
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}"
Обратите внимание, как это конкретное правило проверяет наличие / etc
/udev/rules.d/80-net-setup-link.rules
; если это не так, то для NAME
будет задано имя на основе MAC48 и более позднее правило установки по умолчанию / lib
/udev/rules.d/80-net-setup-link .rules
никогда не получит возможность назначить ИМЯ
. Вот это печально. Опять же.
Чтобы разрешить возможность назначать пользовательские имена сетевым интерфейсам USB , нам необходимо иметь / etc
/udev/rules.d/80-net -setup-link.rules
, так как это набор правил 73-usb-net-by-mac.rules
, который проверяется перед назначением ИМЯ
.
Это означает это просто ссылка с /etc/udev/rules.d/80-net-setup-link.rules
на /lib/udev/rules.d/80-net-setup-link.rules
необходимо, чтобы имена сетевых интерфейсов, назначенные пользователем, больше не игнорировались.
sudo ln -s /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules
Перезагрузка. Готово.
Обратите внимание, что побочный эффект способа настройки 73-usb-net-by-mac.rules
приводит к тому, что все сетевые интерфейсы на основе USB принимают «старое» именование eth0
и так далее, если это явно не указано в файле .link
.
Я не знаю, почему правила были написаны такими, какие они есть, так как было бы хорошо имеют имена на основе MAC для всех сетевых адаптеров USB, которые не указаны явно. Если подумать ... нет , использование имен на основе MAC48 не имеет никакого смысла,если вы случайно не пометили все свои сетевые USB-ключи и постоянно меняете их местами; но, возможно, имена на основе MAC используются с док-станциями, где это действительно имеет смысл ...?
согласно этому потоку. и особенно этот пункт:
Наименование пользовательского сетевого интерфейса ... Имя файла правил должно имеют префикс меньше "80", так что он работает до того. /lib/udev/rules.d/80-net-setup-link.rules, и должны иметь префикс больше, чем "75", так что он работает после 75-сетевого описания.правил и Таким образом, вы можете использовать совпадения по ID_VENDOR и аналогичным свойствам. ...
Я создал этот файл : /etc/udev/rules.d/76-netnames.rules
с этим содержимым
# 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"
он работает нормально, без обходного пути, который вы предоставили.
Я создал этот файл в файле debian preseed.cfg, чтобы установить мою целевую сетевую конфигурацию в полностью автоматизированной установке Debian.
.
Делая это на Intel NUC, моя внутренняя сетевая карта теперь называется eno1
в Debian 9.5 (stretch)