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

14

Я использую безголовый сервер 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

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

муфель-
источник
1
Я бы подумал / etc / systemd / network будет лучшим местом для создания этого файла.
NGRhodes
@NGRhodes Я предполагал опечатку на основе приведенного примера, но кто знает?
Старейшина Гик
Кроме того, проверьте, что сетевой менеджер не работает, superuser.com/a/948996/127393 предлагает сетевой менеджер, имеющий приоритет
NGRhodes
После того, как я разместил награду, я заметил, что в 16.04 есть новый файл правил udev, который всегда вынуждает называть тип MAC-адреса для USB-адаптеров до обращения к сети (/lib/udev/rules.d/73-usb-net-by -mac.rules). Это не совсем правильно ... Мне пришлось полностью отключить его правило, что снова заставило работать файл .link. Хотя я не уверен, что это самый правильный вариант.
Антти Хаапала
Использование MACAddress= [Match]не работает для меня в linkфайлах, так что я в итоге Path=вместо этого. Ты тоже должен попробовать. Также вы можете проверить, какой linkфайл соответствует вашему устройству с помощью udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1команды
webKnjaZ

Ответы:

8

Это может или не может помочь .. Я бы проверил /etc/udev/rules.d и посмотрел, есть ли у вас 70-persistent-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"

Джон Орион
источник
Право на. Я собирался опубликовать ответ, в котором упомянул, что интересно, что есть несколько человек, использующих Ubuntu, которые сказали, что метод @muffel для изменения их сетевого имени не работает. Это было то, что я собирался предложить ... +1
anonymous2
Здесь должна идти щедрость.
EKons
5

Опция, которая не требует правил 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-generic # 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, отключает файл конфигурации целиком («замаскировано») ». <-source

Старейшина Гик
источник
Мне был очень полезен ваш ответ, спасибо +1 @ElderGeek
1
@Alberto Я рад, что это помогло!
Старейшина Компьютерщик
к сожалению, это не является постоянным, но все еще + 1
delfiler
@delfiler Спасибо за ваш комментарий. Если я вас правильно понимаю, вы ищете решение, которое переживет перезагрузку. Я в этом уверен?
Старейшина Гик
@delfiler см. askubuntu.com/questions/767786/…
старейшина Гик
3
  • Все три пользовательских метода именования, объясненные 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 (добавление / удаление файлов переопределения) вступит в силу, загрузочный диск RAM должен быть обновлен:

    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
    

    Я протестировал все из них в VBox fresh 16.04 install, как описано в ссылке ниже, все методы работают как положено:

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

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

user.dz
источник
1

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

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

Яни Яаккола
источник
1
Странно, это делает система 16.04. Ааа, но это обновленная система. Вы правы, что его нет в новой установке.
Старейшина Гик
0

У меня недостаточно репутации, чтобы комментировать, но, чтобы добавить к помеченному ответу, чистые установки Ubuntu 16.04 не будут содержать файл /etc/udev/rules.d/70-persistent-net.rules. Однако, если вы создадите его вручную, вы можете добавить строку, как показано в ответе здесь, и она должна работать так же, как и в более старых версиях, с одним заметным отличием - параметр KERNEL должен быть указан как имя, которое было назначено для интерфейс по умолчанию. Например, если система назвала интерфейс «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 {адрес}), и с именем ядра, соответствующим параметру KERNEL. В качестве альтернативы вы могли бы вообще не указывать параметр KERNEL, и это также должно работать.

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

dwillis77
источник