Apakah ada cara untuk menukar antarmuka jaringan ( eth1 <-> eth0 ) setelah instalasi sistem.
Debian 6.0 saya yang baru menginstal kartu jaringan PCI yang ditetapkan sebagai " eth0 " dan motherboard perangkat jaringan terintegrasi sebagai " eth1 " secara default. Masalahnya adalah saya ingin menggunakan perangkat terintegrasi sebagai antarmuka jaringan default ( eth0 ).
Saya sudah mengedit:
/etc/udev/rules.d/70-persistent-net.rules
untuk menukar nama dan semuanya tampaknya ok dan jaringan berfungsi tetapi program masih mencoba untuk menggunakan kartu jaringan PCI (yang sekarang " eth1 ") sebagai antarmuka standar. Misalnya iftop sekarang mencoba untuk menggunakan " eth1 " sebagai perangkat default seperti yang digunakan " eth0 " sebelum swap.
Apakah ini murni masalah perangkat lunak karena aplikasi mencoba menggunakan perangkat yang pertama kali ditemukan sebagai perangkat default terlepas dari penamaan antarmuka mereka atau apakah ada cara untuk memperbaikinya dengan mengkonfigurasi OS?
sunting: Saya menulis aplikasi kecil untuk mencetak iflist dan perangkat PCI ( eth1 ) muncul sebelum " eth0 ". Ada ide bagaimana menukar pesanan perangkat.
sunting: Saya menemukan utas tentang masalah yang sama dan saya mencoba semua yang mereka sarankan dan tidak ada solusi yang bekerja kecuali untuk menukar nama "hampir".
sumber
Jawaban:
Saya menjawab pertanyaan saya sendiri sekarang karena saya akhirnya menemukan solusi untuk masalah ini.
Saya menemukan bahwa mungkin untuk memesan ulang perangkat dengan membongkar driver dan kemudian memuatnya dalam urutan yang benar.
Metode pertama (bruteforce):
Jadi metode pertama yang saya buat adalah mudah untuk memaksa driver memuat ulang dengan skrip init.d.
Skrip init berikut dirancang untuk Debian 6.0, tetapi prinsip yang sama harus bekerja pada hampir semua distribusi menggunakan skrip init.d yang tepat.
Maka skrip harus ditambahkan ke direktori runlevel yang tepat. Ini dapat dilakukan dengan mudah di Debian dengan perintah " update-rc.d ". Sebagai contoh:
update-rc.d reorder-nics start S
Metode kedua (Lebih baik saya pikir):
Saya juga menemukan cara yang sedikit lebih elegan (setidaknya untuk sistem Debian & Ubuntu).
Pertama, pastikan kernel tidak memuat driver NIC secara otomatis. Ini dapat dilakukan dengan membuat file daftar hitam di
/etc/modprobe.d/
. Saya membuat file dengan nama "disable-nics.conf
". Perhatikan bahwa file dalam/etc/modprobe.d/
harus memiliki.conf
akhiran. Penamaan modul/etc/modprobe.d/blacklist.conf
juga tidak memengaruhi modul autoloading oleh kernel, jadi Anda harus membuat file Anda sendiri.Kemudian jalankan ' depmod -ae ' sebagai root
Buat initrd Anda dengan ' update-initramfs -u '
Dan akhirnya menambahkan nama driver dalam urutan yang benar ke file / etc / modules .
Perubahan harus mulai berlaku setelah booting berikutnya.
Reboot tidak perlu; mudah untuk berpindah perangkat dengan perintah berikut (sebagai root, tentu saja):
Beberapa tautan bermanfaat yang saya temukan saat mencari solusinya:
sumber
Anda dapat menggunakan
netdev=
parameter baris perintah kernel (Anda perlu memberikannya ke kernel di grub) untuk menginstruksikan kernel untuk menautkan irq yang diberikan ke antarmuka yang diberikan, misalnya:netdev=irq=2,name=eth0
sumber
forcedeth 0000:00:04.0: ifname eth1, PHY OUI 0x57d @ 1, addr 40:40:00:40:40:40
. Ini bukan masalah yang terlalu serius, tetapi ini benar-benar mengganggu saya karena yang terintegrasi adalah kartu 1GB dan itu harus menjadi perangkat default.Anda kemungkinan harus masuk ke setiap file konfigurasi program yang terpengaruh dan mengubah 'eth1' menjadi 'eth0.' Default program-program tersebut adalah setup ketika mereka diinstal atau dijalankan pertama kali dengan NIC yang terdeteksi saat ini.
Saya menggunakan Linux sebagai router, dan mengalami masalah ini saat menggunakan skrip. Saya sekarang memiliki script fragmen bagus disebut
netconf
bahwa saya sumber dalam untuk script lain setiap kali saya harus menggunakan nama NIC, file ini memberi saya lokasi sentral untuk menentukan mereka (yaituLAN_IFACE=eth0
,WAN_IFACE=eth1
, dll)sumber
Anda tidak dapat mengubah antarmuka mana yang digunakan secara default di aplikasi seperti
iftop
. Mereka memanggil fungsi C libraryif_nameindex
dan menggunakan elemen pertama dalam array yang dikembalikan secara default. Libc GNUif_nameindex
di Linux adalah pembungkus tipis di sekitarSIOCGIFCONF
ioctl . Itu mengembalikan antarmuka dalam urutan tetap, berdasarkan pada urutan di mana driver jaringan diinisialisasi dan urutan di mana setiap driver mendeteksi setiap perangkat.Jika Anda benar-benar tidak ingin harus meneruskan
-i
keiftop
dan program serupa, Anda dapat membuat pembungkus kecil di sekitarif_nameindex
yang menata ulang elemen dalam daftar yang dikembalikan, denganLD_PRELOAD
. Saya akan menyebutnya lebih banyak masalah daripada nilainya.sumber
if_nameindex
fungsi juga. Mungkin saya tinggalkan saja untuk saat ini. Untungnya beberapa aplikasi benar-benar memeriksa nama antarmuka. Di sisi lain beberapa aplikasi bahkan tidak memiliki opsi konfigurasi standar, jadi saya hanya perlu menggunakan opsi -i. Saya hanya ingin tahu mengapa opsi pemuatan kernelnetdev=irq=22,name=eth0
tidak berfungsi? Saya pikir mungkin untuk mengubah urutan NIC saat startup kernel.for_each_netdev
makro), antarmuka disebutkan dalam urutan di mana driver dimuat (kira-kira). Antarmuka Anda mungkin menggunakan driver yang berbeda, jadi Anda harus mengatur agar driver dimuat sesuai urutan yang Anda inginkan. Saya berharap ini menjadi sulit, terutama jika Anda ingin tweak Anda bekerja di seluruh upgrade kernel.Jika mereka memiliki driver yang berbeda, setidaknya pada hari Anda dapat memasukkan ke dalam salah satu file konfigurasi modul:
Itu pengetahuan yang lumayan tua tetapi mungkin bisa membantu.
sumber
Lihatlah paket 'ifrename'. Ini memungkinkan Anda mengganti nama nama antarmuka berdasarkan berbagai informasi seperti alamat MAC antarmuka, driver, interrupt ..., dikonfigurasi dalam file / etc / iftab.
Beberapa contoh dari halaman manual:
sumber