Я использую безголовый сервер 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
У вас есть идеи, почему переименование не сработало?
Это может или не может помочь.. Я проверил бы/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"
Опция, которая не требует правил 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, отключает конфигурационный файл полностью (это "маскируется")". < - источник
Необходимо обновить Ваш initrd
с чем-то как update-initramfs -k all -c
, так как udev уже применяет те конфигурации при выполнении initrd
.
Ubuntu 16.04 больше не имеет 70-persistent-net-rules файла.
Все три пользовательских метода именования, объяснил 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, столь же зарегистрированных в ссылку ниже, все работы методов как ожидалось:
/etc/udev/rules.d/70-persistent-net-rules
от более старых выпусков, замененных systemd .link's (но они не автоматические созданный), я добавил его здесь для проверки его существования на определенные проблемы, но не на случай AnttiHaapala .
У меня нет достаточной репутации, чтобы прокомментировать, но только добавить к отмеченному ответу, чистые установки 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).