Вопрос или проблема
Мой основной Ethernet-интерфейс называется enp2s0
, но некоторые программы требуют, чтобы я назвал его eth0
.
Как я могу его переименовать?
Я пытался создать /etc/udev/rules.d/10-rename-network.rules
(согласно этому посту), создать /etc/udev/rules.d/70-persistent-net.rule
и отредактировать /etc/network/interfaces
.
Содержимое /etc/udev/rules.d/10-rename-network.rules
было следующим:
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="ff:ff:ff:ff:ff:ff", NAME="eth0"
где ff:ff…:ff заменено на mac-адрес enp2s0
.
Используя netplan, который в настоящее время является стандартом.
Файл /etc/netplan/50-cloud-init.yaml
.
Найдите целевые mac/hw адреса с помощью команды lshw:
lshw -C network
Вы увидите некоторый вывод, который выглядит так:
root@ys:/etc# lshw -C network
*-network
description: Ethernet interface
physical id: 2
logical name: eth0
serial: dc:a6:32:e8:23:19
size: 1Gbit/s
capacity: 1Gbit/s
capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=bcmgenet driverversion=5.8.0-1015-raspi duplex=full ip=192.168.0.112 link=yes multicast=yes port=MII speed=1Gbit/s
Теперь вы берете серийный номер
dc:a6:32:e8:23:19
Обратите внимание на опцию set-name.
Это также работает для раздела wifi.
network:
version: 2
ethernets:
eth0:
dhcp4: true
match:
macaddress: <ВАШ MAC ID ЗДЕСЬ>
set-name: eth0
Затем, чтобы протестировать эту конфигурацию, выполните.
sudo netplan try
Когда вы будете довольны этим
sudo netplan apply
Откройте “etc/netplan/01-network-manager-all.yaml” с помощью любого текстового редактора
и скопируйте и вставьте текст из ниже, не забыв вставить ваши собственные “mac-адреса”
# Пусть NetworkManager управляет всеми устройствами в этой системе
network:
version: 2
ethernets:
eth0:
dhcp4: true
match:
macaddress: fc:15:b4:bn:34:g5
set-name: eth0
wlan0:
dhcp4: true
match:
macaddress: 00:22:34:f4:d3:45
set-name: wlan0
и сохраните файл, после этого используйте
netplan try
netplan apply
Версия arm64 Focal Fossa, которая у меня есть, не имеет netplan, она использует nmcli, и изменить параметры командной строки ядра сложно. Я смог создать /etc/udev/rules.d/73-special-net-names.rules
(которая в этой установке переопределяет /usr/lib/udev/rules.d/73-special-net-names.rules
), чтобы изменить имя usb-подключенного Ethernet-порта (после использования lsusb
, чтобы найти id 413c:a102), добавив:
ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="eth0"
и затем перезагрузив.
Существует простой способ сделать это, который использует udev косвенно.
Добавьте файл для каждого интерфейса в формате PRIORITY-DESCRIPTIVE_NAME.link
в /etc/systemd/network/
. Например, 10-eth-internal.link
:
[Match]
PermanentMACAddress=11:11:11:11:11:11
[Link]
Name=eth0
и 10-eth-dock.link
:
[Match]
PermanentMACAddress=22:22:22:22:22:22
[Link]
Name=eth1
Если устройства не подключаются горячо или система иным образом не отображает новые имена, перезагрузите, чтобы они вступили в силу.
Вы сможете проверить ваши изменения с помощью ip link
.
Объяснение
Согласно заявлению о том, почему у нас теперь есть эти некрасивые, но последовательные названия, второй вариант переопределения этих имен очень прост:
Вы создаете свою собственную схему именования, например, называя свои интерфейсы “internet0”, “dmz0” или “lan0”. Для этого создайте свои собственные .link файлы в /etc/systemd/network/, которые выбирают явное имя или лучшую схему именования для одного, нескольких или всех ваших интерфейсов. См. systemd.link(5) для получения дополнительной информации.
Это имеет две основные выгоды:
оно независимо от конфигурации сетевого подключения, так как вам не нужно устанавливать dhcp4
, и не нужно дублировать имя;
и оно возвращается к предсказуемой схеме именования для новых или временных устройств, добавленных в систему.
Вы сохраняете последовательность, но только задаете имена для тех устройств, которые хотите.
Если вы не хотите использовать MAC-адреса, например, при развертывании на системных образах, вы можете сопоставлять по Path=
или другим последовательным идентификаторам (см. документы в цитате).
Вы можете получить эти идентификаторы из вывода udevadm info /sys/class/net/*
.
Это хорошо работает для меня:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
Некоторым может понравиться этот метод больше, чем другие, упомянутые здесь. Он независим от mac-адреса и достаточно прост и низкоуровнев, чтобы хорошо взаимодействовать с инструментами переопределения сети. (Я сделал это на 22.04, но подозреваю, что 20.04 и 24.04 будут работать так же)
Поместите это в /etc/systemd/network/01-eth0.link
[Match]
OriginalName=enp2s0
[Link]
Name=eth0
Затем либо перезагрузите, либо выполните
udevadm trigger --action=add /sys/class/net/enp2s0
Примечание: триггер будет работать только один раз, потому что после этого имя будет изменено на eth0 с точки зрения триггера и файлов .link. Если вы хотите переименовать интерфейс, который уже был переименован, вы можете создать временный файл link и вызвать триггер, но этот путь рискован.
Вы можете добавить другие файлы .link для всех других интерфейсов, чтобы переименовать их в старые привычные имена.
Очевидной альтернативой является использование предложения Уолфа о сопоставлении по MAC-адресу или pci пути, что имеет преимущество повторного применения. Я также повторю его предложение использовать udevadm info /sys/class/net/[interface]
, чтобы проверить текущее состояние управления udev интерфейсом
Другой альтернативный способ сделать это – изменить
GRUB_CMDLINE_LINUX=""
на
GRUB_CMDLINE_LINUX="net.ifnames=0"
в /etc/default/grub, затем выполните update-grub и перезагрузите. Это полностью отключает новую “предсказуемую схему именования”. Мне кажется, что мне больше нравится метод .link, потому что вы можете манипулировать переименованием вещей без перезагрузки и/или изменять только те имена, которые вам важны.
Ответ или решение
Как переименовать сетевой интерфейс в Ubuntu 20.04
Переименование сетевого интерфейса в Ubuntu 20.04 может показаться непростой задачей, но с помощью нескольких шагов вы сможете изменить имя вашего интерфейса. В вашем случае необходимо переименовать интерфейс enp2s0
в eth0
, поскольку это требуется некоторыми программами. Ниже приведены несколько методов, которые можно использовать для достижения этой цели.
Метод 1: Использование netplan
-
Определите MAC-адрес интерфейса:
Сначала вам нужно узнать MAC-адрес вашего интерфейсаenp2s0
. Чтобы сделать это, выполните команду:lshw -C network
Найдите строку
serial
, которая обозначает MAC-адрес вашего интерфейса. -
Редактируйте файл конфигурации netplan:
Откройте файл конфигурации netplan, который находится по пути/etc/netplan/
. Например, вы можете использовать файл50-cloud-init.yaml
, или создать новый файл.network: version: 2 ethernets: eth0: dhcp4: true match: macaddress: <ваш_MAC_адрес> set-name: eth0
Замените
<ваш_MAC_адрес>
на фактический MAC-адрес вашего интерфейса. -
Примените конфигурацию:
Сначала протестируйте изменения:sudo netplan try
Если все в порядке, примените конфигурацию:
sudo netplan apply
Метод 2: Использование udev
Если вы предпочитаете более низкоуровневый способ, вы можете создать правила udev для переименования интерфейса.
-
Создайте файл правил udev:
Создайте файл/etc/udev/rules.d/10-rename-network.rules
(или любое другое название):sudo nano /etc/udev/rules.d/10-rename-network.rules
Добавьте следующую строку, заменив
ff:ff:ff:ff:ff:ff
на ваш фактический MAC-адрес:SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<ваш_MAC_адрес>", NAME="eth0"
-
Примените изменения:
Перезагрузите систему, чтобы изменения вступили в силу.
Метод 3: Использование systemd
В Ubuntu вы также можете использовать конфигурацию systemd
для переименования интерфейсов.
-
Создайте файл .link:
Перейдите в каталог/etc/systemd/network/
и создайте новый файл, например10-eth0.link
:sudo nano /etc/systemd/network/10-eth0.link
Добавьте следующее содержимое, заменив
enp2s0
на ваше текущее имя интерфейса:[Match] OriginalName=enp2s0 [Link] Name=eth0
-
Перезагрузите или примените изменения:
Перезапустите систему или выполните следующую команду, чтобы применить изменения:sudo udevadm trigger --action=add /sys/class/net/enp2s0
Заключение
Переименование сетевого интерфейса в Ubuntu 20.04 может быть выполнено через netplan, udev или systemd. Выберите метод, который кажется вам наиболее удобным и целесообразным для вашей ситуации. Если у вас возникнут какие-либо сложности, обязательно проверяйте логи и воспользуйтесь командами ip link
или systemctl status systemd-networkd
для диагностики.
Запомните, что правильное конфигурирование сетевых интерфейсов поможет не только удовлетворить требования программного обеспечения, но и повысить управляемость сети в целом.