CentOS 7 - Ganti nama antarmuka jaringan tanpa me-reboot

24

Saya mengganti nama antarmuka jaringan dengan memodifikasi file di /etc/sysconfig/network-scripts.

  • eth0 -> nic0
  • eth1 -> nic1

Konten skrip jaringan terlihat seperti ini, setelah modifikasi:

# cat /etc/sysconfig/network-scripts/ifcfg-nic0
DEVICE=nic0
BOOTPROTO=static
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
USERCTL=no
IPV6INIT=no
MASTER=bond0
SLAVE=yes

Reboot mengaktifkan konfigurasi baru. Tetapi bagaimana cara mengaktifkan konfigurasi ini tanpa me - reboot?

A systemctl restart networktidak melakukan trik.

Saya dapat mematikan satu antarmuka dengan nama lama ( ifdown eth0) tetapi ifupmenghasilkan pesan di bawah ini tidak peduli apakah nama lama atau baru diberikan:

GALAT: [/ etc / sysconfig / network-scripts / ifup-eth] Perangkat nic0 sepertinya tidak ada, menunda inisialisasi.

/etc/init.d/network status menunjukkan output ini:

Configured devices:
lo bond0 nic0 nic1
Currently active devices:
lo eth0 eth1 bond0

Keduanya, ifconfigdan ip atampilkan nama antarmuka lama.

Udondan
sumber
1
Anda dapat mencoba menghapus dan memuat ulang driver perangkat jaringan, jika dikompilasi sebagai modul kernel.
Tom Hunt

Jawaban:

29

Anda dapat mengganti nama perangkat menggunakan perintah ip:

/sbin/ip link set eth1 down
/sbin/ip link set eth1 name eth123
/sbin/ip link set eth123 up

Edit :

Saya meninggalkan di bawah ini demi kelengkapan dan keturunan (dan untuk tujuan informasi), tetapi saya telah mengkonfirmasi komentar swill dan jawaban Marco Macuzzo yang hanya mengubah nama dan perangkat antarmuka / etc / sysconfig / network-scripts / ifcfg- eth0 (dan mengganti nama file) akan menyebabkan perangkat diberi nama dengan benar selama bidang hwaddr = termasuk dalam file konfigurasi. Saya merekomendasikan menggunakan metode ini sebagai ganti setelah pembaruan yang dirujuk.

Anda mungkin juga ingin memastikan bahwa Anda mengonfigurasi aturan udev, sehingga ini juga akan berfungsi pada reboot berikutnya. Jalur untuk udev pindah di CentOS 7 ke /usr/lib/udev/rules.d/60-net.rules tetapi Anda masih dapat mengelolanya dengan cara yang sama. Jika Anda menambahkan "net.ifnames = 0 biosdevname = 0" ke string boot kernel Anda untuk kembali ke skema penamaan lama untuk nics Anda, Anda dapat menghapus

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"

Dan ganti dengan

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:50:56:8e:3f:a7", NAME="eth123"

Anda perlu satu entri per nic. Pastikan untuk menggunakan alamat MAC yang benar dan perbarui bidang NAME. Jika Anda tidak menggunakan "net.ifnames = 0 biosdevname = 0", hati-hati karena mungkin ada konsekuensi yang tidak diinginkan.

James Shewey
sumber
2
Hanya catatan tentang ini. Jika Anda menggunakan CentOS 7.3, maka ini tidak berfungsi. Ini karena masalah ini ( access.redhat.com/solutions/2592561 ). Anda harus menimpa file di /etc/udev/rules.d/90-eno-fix.ruleskarena menimpa semua solusi yang sebelumnya berfungsi untuk mengubah nama perangkat jaringan.
swill
Melihat saran yang Anda referensikan, catatan itu "Masalah ini dapat dihindari dengan memperbarui repositori instalasi untuk menyertakan paket systemd-219-30.el7_3.6 atau lebih baru. Dengan rilis systemd yang lebih baru ini, antarmuka yang terkena dampak diidentifikasi pada saat instalasi paket dan aturan udev dihasilkan secara otomatis sehingga masalah penggantian nama sepenuhnya dihindari. "
James Shewey
Itu adalah masalah ganti nama yang berbeda yang mereka maksud. Mereka berbicara tentang nama yang disingkat karena terlalu panjang (saya pikir). Aturan udev yang disebutkan hard code nama antarmuka ke eno########nilai yang menimpa semua upaya ini untuk mengubah nama menjadi sesuatu seperti eth0. Apakah itu masuk akal? Saya harus memverifikasi pada mesin saya versi mana yang saya gunakan, tapi saya upgrade ke CentOS 7.3 terbaru kemarin, jadi saya pikir saya akan memiliki versi yang disebutkan.
sapu
Metode ini berguna bagi saya untuk menyelesaikan masalah yang berbeda tetapi terkait - sebuah wadah terhenti saat memulai karena kesalahan konfigurasi yang tidak terkait, dan meninggalkan antarmuka yang diubah namanya dari nama sistem ENXFY ke nama wadah eth1. Maka tidak mungkin untuk mencoba kembali memulai wadah karena tidak dapat menemukan antarmuka sampai diganti namanya kembali
Michael Firth
9

Sebenarnya, jawaban terbaik yang saya percaya adalah kombinasi dari dua jawaban yang sudah diposting. Untuk mengubah nama perangkat tanpa memulai kembali layanan jaringan, gunakan ip linkperintah yang disarankan oleh James Shewey ( ip link set <old_device_name> name <new_device_name>).

Untuk membuat perubahan selamat dari reboot di Red Hat Linux, ubah file yang relevan di /etc/sysconfig/network-scripts/. Ubah nama file ifcfg_<old_device_name>menjadi ifcfg_<new_device_name>dan ubah DEVICEvariabel di dalamnya menjadi <new_device_name>. Juga, pastikan HWADDRvariabel diatur dan sudah benar. Tidak perlu menyentuh aturan udev , karena 60-net.rulessebenarnya ada untuk membaca file konfigurasi ifcfg di /etc/sysconfig/network-scripts.

Marco Mazzucco
sumber
3

Untuk mengembalikan konvensi penamaan lama, Anda perlu mengedit /etc/default/grubfile dan menambahkan yang berikut ini

net.ifnames=0 biosdevname=0 

di akhir GRUB_CMDLINE_LINUXvariabel

Menandai
sumber
Atau cukup hapus biosdevnamepaket jika terinstal
GAD3R
3
ip link set ens33 down
ip link set ens33 name eth0
ip link set eth0 up

mv /etc/sysconfig/network-scripts/ifcfg-{ens33,eth0}

sed -ire "s/NAME=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

sed -ire "s/DEVICE=\"ens33\"/NAME=\"eth0\"/" /etc/sysconfig/network-scripts/ifcfg-eth0

MAC=$(cat /sys/class/net/eth0/address)

echo -n 'HWADDR="'$MAC\" >> /etc/sysconfig/network-scripts/ifcfg-eth0
TJ Zimmerman
sumber
1
trik rename yang bagus :) terima kasih sudah berbagi
166_MMX
2

Jawaban yang diberikan oleh @James Shewey tampaknya menjadi cara yang tepat untuk melakukannya.

Jika Anda hanya ingin bekerja dengan file konfigurasi /etc/sysconfig/network-scriptsdan kemudian memicu memuat ulang, membongkar dan memuat modul kernel seperti yang disebutkan oleh @Tom Hunt di komentar juga berfungsi:

service network stop
modprobe -r igb
modprobe igb
service network start

Jika Anda mengakses mesin dari jarak jauh, pastikan Anda menjalankan semua perintah dalam keadaan kosong atau Anda akan mengunci diri:

nohup sh -c "service network stop && modprobe -r igb && modprobe igb ; service network start"

Driver untuk memuat ulang tentu saja tergantung pada antarmuka Anda.

Udondan
sumber
0

Saya mencoba di atas dengan Vagrant / VirtualBox dan memungkinkan, tapi entah bagaimana ini tidak bekerja sama sekali pada lingkungan pengembangan saya.

Nama antarmuka lama dipertahankan apa pun yang saya lakukan sampai restart penuh.

Saya menambahkan aturan berikut di /etc/udev/rules.d/60-persistent-net.rules (berdasarkan: https://access.redhat.com/solutions/112643 )

Tujuan saya adalah memberi antarmuka nama yang ditentukan berdasarkan alamat PCI.

Contoh:

ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:09.0", NAME:="int0"
ACTION=="add", SUBSYSTEM=="net", KERNELS=="0000:00:10.0", NAME:="ext0"

Setelah menambahkan aturan itu saya menjalankan perintah berikut:

ip link set eth0 down
udevadm control --reload-rules
udevadm trigger
ip link set int0 up

Pesan kesalahan ada Cannot find device "int0"di ip link set * upperintah. Dan masuk/var/log/messages saya perhatikan pesan-pesan berikut

Aug 16 17:08:41 localhost ansible-command: Invoked with creates=None executable=None _uses_shell=True strip_empty_ends=True _raw_params=ip link set eth0 down && udevadm control --reload-rules && udevadm trigger && ip link set int0 up#012 removes=None argv=None warn=True chdir=None stdin_add_newline=True stdin=None
Aug 16 17:08:41 localhost NetworkManager[6989]: <info>  [1565975321.5971] device (eth6): state change: disconnected -> unavailable (reason 'carrier-changed', sys-iface-state: 'managed')
Aug 16 17:08:41 localhost systemd-udevd: Network interface NamePolicy= disabled on kernel command line, ignoring.

Tetapi yang berikut ini berhasil dengan mengakses VM melalui VirtualBox dan menjalankan perintah berikut untuk menghapus dan menambahkan kembali modul kernel.

rmmod e1000 
modprobe e1000

Saya menemukan ini di utas berikut: https://www.centos.org/forums/viewtopic.php?t=54695

Hal aneh yang saya perhatikan adalah lsmodmemberi saya (perhatikan Used by)

[vagrant@node-01 ~]$ lsmod
Module                  Size  Used by
e1000                 137586  0 
Sander Visser
sumber
Harap beri tahu kami apa yang tidak berfungsi dengan jawaban yang diterima, dengan pesan kesalahan yang tepat. Dengan begitu mungkin jawabannya bisa ditingkatkan.
Ned64
@ Ned64 Saya menambahkan pesan kesalahan dan sedikit info lebih lanjut
Sander Visser
Yang saya maksud adalah: apa yang terjadi saat Anda mengetik, sebagai root: ip link set eth0 down; ip link set eth0 name int0; ip link set int0 up? Tidak ada udev...perintah!
Ned64