переименование сетевого интерфейса в Ubuntu 16.04 с помощью systemd завершается неудачно

Я использую безголовый сервер Ubuntu 16.04 LTS с двумя физическими сетевыми картами, которые называются enp5s0f0 и enp5s0f1.

Я хотел бы переименовать эти интерфейсы, и следовал этому примеру . Поэтому я создал файл /lib/systemd/network/70-myinterface.link (исходный источник не работает) следующим образом (я установил правильный MAC-адрес):

[Match]
MACAddress=12:34:56:78:9a:bc

[Link]
Name=dmz0

и перезагрузил сервер. К сожалению, интерфейс не был переименован, хотя udevadm показывает, что используется мой файл конфигурации:

$ udevadm info /sys/class/net/enp5s0f1
P: /devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: DEVPATH=/devices/pci0000:00/0000:00:02.0/0000:01:00.0/0000:02:02.0/0000:05:00.1/net/enp5s0f1
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=80003ES2LAN Gigabit Ethernet Controller (Copper)
E: ID_MODEL_ID=0x1096
E: ID_NET_DRIVER=e1000e
E: ID_NET_LINK_FILE=/lib/systemd/network/70-myinterface.link  <-- my file
E: ID_NET_NAME_MAC=enx123456789abc
E: ID_NET_NAME_PATH=enp5s0f1
E: ID_OUI_FROM_DATABASE=Intel Corporation
E: ID_PATH=pci-0000:05:00.1
E: ID_PATH_TAG=pci-0000_05_00_1
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_VENDOR_ID=0x8086
E: IFINDEX=3
E: INTERFACE=enp5s0f1
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/enp5s0f1
E: TAGS=:systemd:
E: USEC_INITIALIZED=1900192

У вас есть идеи, почему переименование не сработало?

14
задан 7 June 2016 в 00:16

5 ответов

Это может или не может помочь.. Я проверил бы/etc/udev/rules.d и видел бы, есть ли у Вас 70 персистентных net.rules. Необходимо смочь переименовать их использующий ту Шахту файла

, похож на это:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="e0:cb:ee:d7:ff:9a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

, Если у Вас есть записи для Ваших карт в этом файле, можно изменить имя на то, что когда-либо Вы хотите путем изменения "NAME=TheNameYouWant"

6
ответ дан 7 June 2016 в 00:16

Опция, которая не требует правил udev (альтернатива systemd-networkd .link файлы), который работает с Ubuntu 16.04, а также многими другими версиями Linux,

Пример:

ifconfig peth0 down  
ip link set peth0 name eth0  
ifconfig eth0 up 

В примере выше peth0 исходное имя интерфейса, и eth0 является желаемым именем. Включите имя, которое Вы в настоящее время имеете, где peth0 и имя, которое Вы хотите, где eth0. Никакая перезагрузка не требуется или предлагается. Повторите процесс для второй интерфейсной платы

Протестированный на Ubuntu 16.04 с ядром, 4.4.0-36-универсальным # с 55 Ubuntu

Редактирование: при поиске персистентного решения, которое выживает, перезагрузка см. Менять имя Сетевых интерфейсов Источники Ubuntu 16.04

: https://www.freedesktop.org/software/systemd/man/systemd.link.html

http://kernelpanik.net/rename-a-linux-network-interface-without-udev/

Тестирование.

Примечание: так как @antti-haapala метод работал прежде и внезапно остановился, Вам могло бы быть интересно знать, что "Как особый случай, пустой файл (размер файла 0) или символьная ссылка с тем же именем, указывающим/dev/null, отключает конфигурационный файл полностью (это "маскируется")". < - источник

5
ответ дан 7 June 2016 в 00:16

Необходимо обновить Ваш initrd с чем-то как update-initramfs -k all -c, так как udev уже применяет те конфигурации при выполнении initrd.

Ubuntu 16.04 больше не имеет 70-persistent-net-rules файла.

1
ответ дан 7 June 2016 в 00:16
  • Все три пользовательских метода именования, объяснил systemd: Предсказуемые Названия Сетевого интерфейса , связаны с правилами udev.

    & systemd .link; правила udev имеют приоритет папки. /etc переопределения /run переопределения /lib.

    Так проверяют текущую установку.

    # links
    ls -l /*/systemd/network/
    
    # rule that read links
    ls -l /*/udev/rules.d/80-net-setup-link.rules
    
    # rule that check for /etc/.../80-net-setup-link.rules & net.ifnames
    ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    

    После любого изменения в этих правилах udev (добавляющий/удаляющий файлы переопределения), чтобы быть эффективным, псевдодиск начальной загрузки должен быть обновлен:

    sudo update-initramfs -u
    

    По умолчанию, это единственные файлы, которые можно найти

    ~$ ls -l /*/systemd/network/
    /etc/systemd/network/:
    total 0
    
    /lib/systemd/network/:
    total 12
    -rw-r--r-- 1 root root 404 Jul 12 17:28 80-container-host0.network ##(virtual-interface)
    -rw-r--r-- 1 root root 482 Jul 12 17:28 80-container-ve.network ##(virtual-interface)
    -rw-r--r-- 1 root root  80 Jul 12 17:28 99-default.link
    
    
    ~$ ls -l /*/udev/rules.d/80-net-setup-link.rules
    -rw-r--r-- 1 root root 292 Jul 12 17:28 /lib/udev/rules.d/80-net-setup-link.rules
    
    ~$ ls -l /*/udev/rules.d/73-usb-net-by-mac.rules
    -rw-r--r-- 1 root root 551 Jul 12 16:37 /lib/udev/rules.d/73-usb-net-by-mac.rules
    

    , я протестировал всех их в новых 16.04 установках VBox, столь же зарегистрированных в ссылку ниже, все работы методов как ожидалось:

    Ubuntu 16.04 Сложные Имена интерфейса

  • /etc/udev/rules.d/70-persistent-net-rules от более старых выпусков, замененных systemd .link's (но они не автоматические созданный), я добавил его здесь для проверки его существования на определенные проблемы, но не на случай AnttiHaapala .

3
ответ дан 7 June 2016 в 00:16

У меня нет достаточной репутации, чтобы прокомментировать, но только добавить к отмеченному ответу, чистые установки Ubuntu 16.04 не будут иметь/etc/udev/rules.d/70-persistent-net.rules файл существующий. Однако при создании его вручную можно добавить строку как показано в ответе здесь, и это должно работать точно так же, как это сделало в более старых версиях с заметными различиями - параметр ЯДРА должен быть указан как имя, которое было присвоено интерфейсу по умолчанию. Например, если бы система назвала интерфейс как "ens160", и Вы хотите изменить его на "eth0", то строка могла бы быть похожей:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="ens160", NAME="eth0"

Это говорит правилу только соответствовать в интерфейсе, соответствующем указанному MAC (в ATTR {адрес} параметр) и с именем ядра, соответствующим параметру ЯДРА. Кроме того, Вы могли, вероятно, опустить параметр ЯДРА в целом, и это должно работать также.

РЕДАКТИРОВАНИЕ: И, как уже упомянуто, если Вы хотите использовать .link метод файла затем, необходимо будет обновить initramfs для него для вступления в силу. Также обратите внимание, что пользовательский .link файл должен быть создан в/etc/systemd/network а не в/lib/systemd/network (любой будет работать, но лучшая практика должна использовать/etc/systemd/network, так как это - то, что там для - для обеспечения пользовательских .link файлов, которые переопределяют значения по умолчанию в/lib/systemd/network).

0
ответ дан 29 September 2019 в 13:42

Другие вопросы по тегам:

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