mengganti nama antarmuka jaringan di Ubuntu 16.04 dengan systemd gagal

14

Saya menggunakan Ubuntu 16.04 LTS Server tanpa kepala dengan dua kartu jaringan fisik, yang diberi nama enp5s0f0 dan enp5s0f1.

Saya ingin mengganti nama antarmuka ini, dan mengikuti contoh ini . Karena itu saya membuat file /lib/systemd/network/70-myinterface.link(sumber aslinya tampaknya tidak berfungsi) seperti ini (saya menetapkan alamat mac yang benar):

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

[Link]
Name=dmz0

dan me-reboot server. Sayangnya antarmuka tidak diganti nama, meskipun udevadmmenunjukkan bahwa file konfigurasi saya digunakan:

$ 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

Apakah Anda tahu mengapa penggantian nama tidak berhasil?

muffel
sumber
1
Saya pikir / etc / systemd / network akan menjadi lokasi terbaik untuk membuat file ini.
NGRhodes
@ NGRhodes Saya mengasumsikan kesalahan ketik berdasarkan contoh yang dikutip, tapi siapa yang tahu?
Penatua Geek
Juga, periksa networkmanager tidak berjalan, superuser.com/a/948996/127393 menyarankan networkmanager memiliki prioritas
NGRhodes
Setelah saya menempatkan karunia saya perhatikan bahwa ada file aturan udev baru di 16.04 yang selalu memaksa penamaan tipe alamat MAC untuk adaptor USB sebelum networkd dikonsultasikan (/lib/udev/rules.d/73-usb-net-by -mac.rules). Ini tidak terasa benar sama sekali ... Saya harus menonaktifkan aturannya sepenuhnya, yang membuat file .link berfungsi lagi. Saya tidak yakin apakah itu pilihan yang paling benar. '
Antti Haapala
Menggunakan MACAddress= [Match]tidak berfungsi untuk saya dalam linkfile juga, jadi saya akhirnya menggunakan Path=. Anda harus mencobanya juga. Anda juga dapat memeriksa linkfile mana yang cocok dengan perangkat Anda dengan udevadm test-builtin net_setup_link /sys/class/net/enp5s0f1perintah
webKnjaZ

Jawaban:

8

Ini mungkin atau mungkin tidak membantu .. Saya akan memeriksa /etc/udev/rules.d dan melihat apakah Anda memiliki 70-persistent-net.rules. Anda harus dapat mengubah nama mereka menggunakan file itu

Milik saya terlihat seperti ini:

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

Jika Anda memiliki entri untuk kartu Anda dalam file ini, Anda dapat mengubah nama menjadi apa yang Anda inginkan dengan mengubah "NAME = TheNameYouWant"

John Orion
sumber
Tepat. Saya hendak mengirim jawaban yang saya sebutkan itu menarik, ada beberapa orang yang menggunakan Ubuntu yang mengatakan bahwa metode @muffel untuk mengubah nama jaringan mereka tidak berfungsi. Inilah yang akan saya sarankan ... +1
anonymous2
Di sini harus pergi hadiah.
EKons
5

Opsi yang tidak memerlukan aturan udev (alternatif untuk file .link systemd-networkd.) Yang berfungsi dengan Ubuntu 16.04 serta banyak versi Linux lainnya adalah

Contoh:

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

Dalam contoh di atas, peth0 adalah nama antarmuka asli dan eth0 adalah nama yang diinginkan. Masukkan nama yang saat ini Anda miliki di mana peth0 berada dan nama yang Anda inginkan di mana eth0 berada. Tidak diperlukan reboot atau disarankan. Ulangi proses untuk kartu antarmuka kedua

Diuji pada Ubuntu 16.04 dengan kernel 4.4.0-36-generik # 55-Ubuntu

Sunting: Jika Anda mencari solusi gigih yang selamat dari reboot, lihat Mengubah Nama Antarmuka Jaringan Ubuntu 16.04

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

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

Pengujian.

Catatan: karena metode @ antti-haapala bekerja sebelumnya dan tiba-tiba berhenti, Anda mungkin tertarik untuk mengetahui bahwa "Sebagai kasus khusus, file kosong (ukuran file 0) atau symlink dengan nama yang sama yang menunjuk ke / dev / null menonaktifkan file konfigurasi seluruhnya (itu "bertopeng") ". <-Sumber

Penatua Geek
sumber
Saya sangat berguna atas tanggapan Anda, terima kasih +1 @ElderGeek
1
@Alberto Saya senang itu membantu!
Penatua Geek
sayangnya itu tidak gigih tapi masih +1
delfiler
@delfiler Terima kasih atas komentar Anda. Jika saya memahami Anda dengan benar, Anda mencari solusi yang selamat dari reboot. Apakah saya jelas tentang itu?
Penatua Geek
@delfiler lihat askubuntu.com/questions/767786/…
Penatua Geek
3
  • Ketiga metode penamaan kustom, dijelaskan systemd: Nama Antarmuka Jaringan yang Dapat Diprediksi , terkait dengan aturan udev.

    aturan systemd .link's & udev memiliki prioritas folder. /etcmenimpa /runmenimpa /lib.

    Jadi periksa pengaturan saat ini.

    # 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
    

    Setelah ada perubahan dalam aturan udev ini (menambah / menghapus file override) agar efektif, disk RAM boot harus diperbarui:

    sudo update-initramfs -u
    

    Secara default, ini adalah satu-satunya file yang mungkin Anda temukan

    ~$ 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
    

    Saya telah menguji semuanya di VBox fresh 16.04 instal sebagaimana didokumentasikan dalam tautan di bawah ini, semua metode berfungsi seperti yang diharapkan:

    Ubuntu 16.04 Nama Antarmuka yang Rumit

  • /etc/udev/rules.d/70-persistent-net-rulesberasal dari rilis yang lebih lama digantikan oleh systemd .link's (tetapi tidak dibuat secara otomatis), saya menambahkannya di sini untuk memeriksa keberadaannya untuk masalah khusus tetapi tidak untuk kasus AnttiHaapala .

user.dz
sumber
1

Anda perlu memperbarui initrddengan sesuatu seperti update-initramfs -k all -c, karena udev sudah menerapkan konfigurasi tersebut saat berjalan initrd.

Ubuntu 16.04 tidak memiliki file aturan-70-persisten-net lagi.

Jani Jaakkola
sumber
1
Aneh, sistem 16,04 ini tidak. Ahh tapi ini sistem yang ditingkatkan. Anda benar bahwa itu tidak ada dalam pemasangan baru.
Penatua Geek
0

Saya tidak memiliki reputasi yang cukup untuk berkomentar, tetapi hanya untuk menambahkan jawaban yang ditandai, instalasi bersih dari Ubuntu 16.04 tidak akan memiliki file /etc/udev/rules.d/70-persistent-net.rules hadir. Namun, jika Anda membuatnya secara manual, Anda dapat menambahkan baris seperti yang ditunjukkan pada jawaban di sini dan seharusnya berfungsi seperti yang dilakukan pada versi yang lebih lama, dengan satu perbedaan penting - parameter KERNEL harus ditentukan sebagai nama yang ditugaskan untuk antarmuka secara default. Misalnya, jika sistem menamai antarmuka sebagai "ens160" dan Anda ingin mengubahnya menjadi "eth0", garis tersebut mungkin terlihat seperti:

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

Ini memberi tahu aturan untuk hanya mencocokkan pada antarmuka yang cocok dengan MAC yang ditentukan (dalam parameter ATTR {address}) dan dengan nama kernel yang cocok dengan parameter KERNEL. Atau Anda mungkin bisa menghilangkan parameter KERNEL sama sekali dan itu harusnya berfungsi juga.

EDIT: Dan seperti yang telah disebutkan, jika Anda ingin menggunakan metode file .link maka Anda perlu memperbarui initramfs agar bisa berlaku. Perhatikan juga file .link khusus harus dibuat di / etc / systemd / network dan bukan di / lib / systemd / network (keduanya akan berfungsi tetapi praktik terbaiknya adalah menggunakan / etc / systemd / network karena memang itulah tujuannya - untuk memungkinkan untuk file tautan kustom yang mengesampingkan default di / lib / systemd / network).

dwillis77
sumber