Apa standar konvensi penamaan untuk antarmuka Ethernet dan Wi-Fi pada mesin Linux?
Kami sedang mengembangkan alat yang seharusnya hanya menampilkan antarmuka Ethernet dan Wi-Fi dari mesin Linux dan statusnya saat ini.
Sebagai contoh, di bawah ini adalah daftar antarmuka jaringan (baik fisik dan virtual) di mesin Linux (Ubuntu) saya:
docker0
, enp0s25
, lo
,wlp3s0
Ketika saya menjalankan alat, di bawah ini adalah hasil yang saya dapatkan:
enp0s25
, wlp3s0
Kami telah menulis kode dengan logika bahwa semua antarmuka Ethernet selalu dimulai dengan huruf e
dan antarmuka Wi-Fi selalu dimulai dengan huruf w
.
Apakah logikanya benar? Jika tidak, bagaimana kita mengatasi ini?
networking
wifi
network-interface
ethernet
Mohan Raj
sumber
sumber
iwconfig
filter antarmuka WiFi dari yang lain.lshw -class network
mungkin? Cari semua yang adacapabilities: ethernet physical
? Mungkin mencari beberapa kemampuan lain juga?Jawaban:
Antarmuka jaringan dapat dinamai apa saja, jadi apa pun yang Anda lakukan, Anda akan mengalami situasi di mana (1) ada antarmuka jaringan "fisik" dengan nama yang tidak cocok dengan pola Anda, atau (2) ada Antarmuka jaringan "fisik" yang akan cocok dengan pola Anda.
Lebih dari itu, jika saya adalah pengguna alat Anda, saat alat Anda tidak akan memungkinkan saya untuk melakukan sesuatu yang saya inginkan, karena saya memiliki antarmuka jaringan yang "virtual", meskipun untuk tujuan praktis itu harus dipertimbangkan " fisik "di pengaturan saya, saya akan mulai mengutuk keras dan paksa pada aplikasi Anda, dan tidak akan pernah menggunakannya lagi.
Antarmuka jaringan fisik dan virtual semua berbagi API umum adalah satu hal yang membuat Linux sangat fleksibel. Tolong jangan mencoba mengasuh pengguna Anda, dan ambil itu darinya. Pengguna Anda akan berterima kasih.
sumber
ip link set ... name ...
bisa berubah. Dan ya, saya bisa membuat daftar nama antarmuka yang dapat diprediksi sendiri. Jawaban untuk pertanyaan awal adalah "tolong jangan lakukan itu". Karena tidak peduli bagaimana Anda melakukannya, itu tidak akan berhasil.red
,blue
dangreen
.Untuk nama antarmuka yang dapat diprediksi oleh systemd , awalan dapat dilihat di
udev-builtin-net_id.c
:jadi untuk
ethX
penamaan gaya tradisional dan penamaan systemd yang lebih baru, huruf awal e haruslah antarmuka ethernet untuk nama antarmuka yang dibuat secara otomatis. Semua antarmuka wifi harus dimulai dengan w di kedua skema, meskipun tidak semua antarmuka yang dimulai dengan w akan menjadi wifi.Jika alat ini harus bekerja dalam lingkungan yang arbitrer (bukan hanya pada lingkungan internal yang Anda kendalikan), perhatikan bahwa pengguna dapat mengubah nama antarmuka pada sistem linux dengan nama yang arbitrer, seperti [
wan0
,lan0
,lan1
,dmz0
] yang akan mematahkan asumsi tentang huruf awal .sumber
biosdevname
penamaan antarmuka, tempat antarmuka Ethernet dapat dinamai sepertip3p7
. Metode ini adalah pendahulu dari nama sistemd baru yang dapat diprediksi dan meskipun sekarang sudah usang pada distro umum, masih akan ada banyak sistem yang mengambilnya ketika itu adalah default beberapa tahun yang lalu.rename%u
format belum t ada dalam kode sumber sejak 2012. Saya ingin mendesah perangkat lunak Anda menjadi enam tahun kedaluwarsa.Konvensi penamaan adalah bahwa interface LAN diberi nama
eth0
,eth1
... dan bahwa interface WLAN diberi namawlan0
,wlan1
...Apa yang Anda lihat adalah apa yang disebut "nama yang dapat diprediksi" yang diperkenalkan oleh systemd. Dalam praktiknya, mereka sama sekali tidak dapat diprediksi, dan mereka bahkan dapat berubah ketika perangkat keras diubah, yang merupakan masalah yang seharusnya mereka hindari.
Sebagai tebakan, huruf awal mungkin cukup bagus. Beberapa antarmuka, khususnya WLAN, memiliki petunjuk di
/sys/class/net/*/uevent
:Sayangnya, tidak ada
DEVTYPE
antarmuka LAN untuk itu.sumber
Satu peringatan dengan jawaban saya (berlaku untuk sebagian besar yang lain juga): Saya tidak tahu tujuan aplikasi Anda. Jika itu adalah aplikasi sekali pakai untuk memecahkan satu masalah tertentu, atau untuk memahami jaringan yang lebih baik, tidak pernah digunakan lagi, maka mengandalkan huruf pertama dari antarmuka mungkin merupakan opsi cepat dan kotor yang bagus. Jika Anda berencana untuk menulis pesaing berikutnya ke Wireshark atau tcpdump, Anda harus yakin Anda melakukannya dengan benar untuk semua jenis casing tepi.
Dan jika aplikasi yang Anda tulis berada di antara yang ekstrem, hanya Anda (dan pelanggan Anda) yang dapat mengetahui seberapa cermat Anda perlu menerapkan logika Anda.
Yang lain telah menunjukkan bahwa nama-nama itu tidak pernah dapat diandalkan, karena sejumlah alasan. Masalah pamungkas adalah masalah yang sangat umum dalam perangkat lunak: asumsi pengkodean keras alih-alih mengandalkan fakta yang diketahui / didokumentasikan.
Masalah kedua yang belum disebutkan juga didasarkan pada asumsi tentang persyaratan Anda: bahwa daftar antarmuka yang ingin Anda daftarkan selalu persis "antarmuka perangkat keras ethernet" dan "antarmuka wifi".
Masalah ketiga adalah asumsi lain: bahwa semua antarmuka akan jatuh ke dalam kategori yang dapat Anda pikirkan saat ini. Bagaimana dengan Infiniband, seperti yang disebutkan oleh @ user4556274? Bagaimana dengan antarmuka terowongan untuk VPN? Bagaimana dengan antarmuka yang dijembatani? Bagaimana dengan antarmuka dijembatani yang menggabungkan antarmuka fisik dan logis?
Tetapi mungkin ada opsi untuk mencapai apa yang Anda cari. Pertama, tentukan dengan tepat apa yang mencirikan antarmuka yang ingin Anda daftarkan, vs yang tidak.
Dalam kebanyakan kasus, satu karakteristik yang dapat Anda andalkan adalah tabel routing (namun, ini hanya akan berfungsi selama antarmuka sudah aktif, sehingga mungkin bukan yang sebenarnya Anda cari).
Setiap antarmuka yang memiliki rute default (yaitu, rute ke 0.0.0.0) cenderung menjadi yang Anda cari.
Perhatikan bahwa meskipun ini masih didasarkan pada asumsi, hanya asumsi yang lebih andal: dapat dibayangkan bahwa sistem dikonfigurasikan untuk merutekan semua lalu lintas keluar melalui mesin virtual atau wadah buruh pelabuhan (misalnya, jika ada wadah yang menjalankan firewall) ). Dan sebaliknya juga benar: sysadmin berpotensi mengunci lalu lintas di luar dengan menghapus rute default.
Pilihan lain adalah menggunakan perangkat keras yang sebenarnya dan melihat driver yang digunakannya. Anda kemudian dapat mengecualikan driver tertentu yang terkenal
sumber
Apakah Anda secara eksplisit mengecualikan antarmuka terikat atau tim? Default kami di sini adalah menggunakan
bond0
atauteam0
untuk antarmuka utama untuk server kami.Saya pikir Anda perlu memikirkan kembali logika Anda. Mungkin coba ulangi semua antarmuka jaringan yang ditentukan pada sistem yang diberikan, bagilah di antara ethernet, wifi, infiband, serial, dll., Lalu lakukan keajaiban Anda.
sumber
Jangan hardcode, atau pola cocok dengan nama perangkat keras. Ini berlaku untuk semua perangkat. Andalkan alat yang disediakan oleh udev untuk menentukan daftar perangkat dan mengambil tindakan yang sesuai. Lihat 16.7 Penamaan Perangkat yang Persisten , dan kemudian baca seluruh dokumen itu , khususnya 16.2 dan 16.3. Perhatikan bahwa udev adalah agnostik distribusi, dan juga sistem agnostik init, karena udev sekarang merupakan metode yang disukai untuk manajemen perangkat di linux.
Perhatikan bahwa @ user4556274, menyinggung ini dalam jawabannya ketika merujuk
udev-builtin-net-id.c
, yang singkatnya berarti bahwa pencocokan pola yang Anda coba selesaikan adalah bagian bawaanudev
.Mengutip PredictableNetworkInterfaceNames :
sumber
Seperti yang dikatakan orang lain, Anda tidak dapat sepenuhnya bergantung pada namanya.
Dalam kasus saya tampaknya untuk nirkabel
/sys/class/net/<ifacename>/
akan memiliki direktori bernama "nirkabel" di dalamnya jika itu adalah antarmuka nirkabel:sumber