перейменування мережевого інтерфейсу в Ubuntu 16.04 при системних збоях


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 буде найкращим місцем для створення цього файлу.
NGRвходить

@NGRhodes Я припускав друкарську помилку на основі наведеного прикладу, але хто знає?
Старійшина Гейк

Крім того, перевірити
мережевий менеджер

Після того, як я розмістив щедроту, я помітив, що в 16.04 є новий файл правила udev, який завжди змушує іменувати тип MAC-адреси для USB-адаптерів перед тим, як звернутися до networkd (/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-стійкі-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 (альтернатива системним мережним файлам .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, вимикає файл конфігурації цілком (це "маскується") ". <-Джерело


Мені була дуже корисна ваша відповідь, дякую + 1 @ElderGeek

1
@Alberto Я радий, що це допомогло!
Старійшина Гік

на жаль, це не наполегливо, але все-таки + 1
delfiler

@delfiler Дякую за Ваш коментар. Якщо я правильно вас розумію, ви шукаєте рішення, яке переживе перезавантаження. Я зрозумів це?
Старійшина Гік


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 встановити, як це зафіксовано у нижченаведеному посиланні, всі методи працюють як слід:

    Складні імена інтерфейсу Ubuntu 16.04

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


1

Вам потрібно оновити initrdщось на зразок update-initramfs -k all -c, оскільки udev застосовує ці конфігурації вже під час роботи initrd.

У Ubuntu 16.04 більше немає файлу 70-стійких мереж-правил.


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 {address}) та з ім'ям ядра, що відповідає параметру KERNEL. Крім того, ви, ймовірно, можете повністю пропустити параметр KERNEL, який також повинен працювати.

EDIT: І як вже було сказано, якщо ви хочете скористатися методом файлу .link, тоді вам потрібно буде оновити initramfs, щоб він набув чинності. Також зауважте, що користувальницький .link-файл повинен бути створений у / etc / systemd / network, а не в / lib / systemd / network (або буде працювати, але найкраща практика - використовувати / etc / systemd / network, оскільки саме для цього є - дозволити користувацькі файли .link, які замінюють параметри за замовчуванням у / lib / systemd / network).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.