Bagaimana saya bisa tahu apakah antarmuka jaringan bersifat fisik (perangkat) atau virtual (alias)?

17

Saya memiliki router rumah kecil yang menjalankan OpenWrt (Jenis Linux yang tertanam untuk router). Ini memiliki lima port Ethernet, satu berlabel WAN dan empat labeld LAN 1 hingga 4. Ini memiliki Antarmuka Jaringan berikut yang ditentukan sesuai ifconfig:

root@TIBERIUS: ~ > ifconfig | grep Link
br-lan    Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan1      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan2      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan3      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan4      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lo        Link encap:Local Loopback
pppoe-wan Link encap:Point-to-Point Protocol
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
wlan0     Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0

Seperti yang Anda lihat, cukup banyak perangkat, tetapi hanya satu alamat MAC.

Saya mengerti beberapa perangkat itu virtual. Mari kita kesampingkan lodan pppoe-wan, itulah perangkat loopback dan Koneksi PPPoE saya. Tetapi untuk yang lainnya, bagaimana saya bisa tahu apakah itu fisik atau virtual? Saya mengerti ada konvensi penamaan untuk pelabelan Antarmuka virtual seperti eth0.1, tapi itu jelas tidak dipatuhi di sini. Mari kita lihat Output ifconfiguntuk dua antarmuka ini:

root@TIBERIUS: ~ > ifconfig wan
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15007 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12055 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:13341276 (12.7 MiB)  TX bytes:1831757 (1.7 MiB)

root@TIBERIUS: ~ > ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25799 errors:0 dropped:0 overruns:23 frame:0
          TX packets:25294 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15481996 (14.7 MiB)  TX bytes:15160380 (14.4 MiB)
          Interrupt:4

Terlepas dari Detail yang tidak jelas untuk txqueuelenyang bukan nol eth0, satu-satunya perbedaan yang mencolok adalah yang eth0memiliki Interruptentri, yang sejauh yang saya tahu adalah Fitur Perangkat Keras. Jadi, bagaimana Anda memberi tahu Network Interface apakah itu fisik atau bukan, dengan mencari Interruptentri ifconfig? Atau ada cara yang lebih baik? Cara sederhana dan mudah untuk mengetahui apakah perangkat jaringan itu fisik atau virtual?

Perhatikan ada pertanyaan terkait, tetapi meskipun memiliki jawaban yang diterima, itu tidak konklusif.

Memperbarui

Sebagai balasan untuk jawaban derobert, berikut adalah informasi yang berasal dari ls -l /sys/class/net:

br-lan      -> ../../devices/virtual/net/br-lan
eth0        -> ../../devices/platform/ag71xx.0/net/eth0
lan1        -> ../../devices/platform/dsa.0/net/lan1
lan2        -> ../../devices/platform/dsa.0/net/lan2
lan3        -> ../../devices/platform/dsa.0/net/lan3
lan4        -> ../../devices/platform/dsa.0/net/lan4
lo          -> ../../devices/virtual/net/lo
pppoe-wan   -> ../../devices/virtual/net/pppoe-wan
wan         -> ../../devices/platform/dsa.0/net/wan

[Tambahan daftar ini: wlan0akan muncul juga wlan0 -> ../../devices/platform/ath9k/net/wlan0, tetapi ketika saya menyalin daftar di atas, saya menonaktifkan WLAN, itulah mengapa tidak muncul.]

Saya akan katakan eth0adalah satu-satunya perangkat. Tidak jelas apa dsa.0itu.

Dan sebagai balasan untuk jawaban Bryan Agee:

root@TIBERIUS: ~ > cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'eth'
        option ifname 'eth0'
        option proto 'none'

config interface 'lan'
        option ifname 'lan1 lan2 lan3 lan4'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.33.1'
        option netmask '255.255.255.0'

config interface 'wan'
        option ifname 'wan'
        option proto 'pppoe'
        option username '…'
        option password '…'
Lumi
sumber
Anda sudah menjawab pertanyaan Anda sendiri (mencari item spesifik perangkat keras seperti IRQ, txqueue, ...). Pertanyaan yang muncul kepada saya adalah - mengapa Anda perlu membedakannya dalam kasus penggunaan Anda?
Nils
@Nils, saya tidak memiliki pemahaman yang jelas tentang konfigurasi jaringan pada perangkat router saya setelah saya menginstal OpenWrt ke dalamnya. Saya merasa itu benar-benar membingungkan. Dokumen dan forum proyek telah memberikan bantuan, tetapi tidak cukup, dan membiarkan pertanyaan dasar tidak terjawab. Salah satu pertanyaan itu adalah yang diajukan di sini. Sekarang sepertinya bagi saya bahwa router saya hanya memiliki satu NIC ketika saya yakin itu memiliki dua. Klarifikasi detail mengurangi kebingungan. Itu sebabnya.
Lumi
Bisakah Anda meletakkan foto kecil atau tautan ke foto / dokumentasi untuk router itu di sini? Mungkin ada hal-hal seperti bonding / bridging / NATting yang menyembunyikan MAC asli ...
Nils
Anda harus dapat melihat detail yang lebih baik, dan yang Anda butuhkan, menggunakanlshw -class network
Nathan V
@Nils, ini dia: wiki.openwrt.org/toh/tp-link/tl-wr941nd - @Nathan, dengan hanya 4 MB flash, kotaknya agak terbatas, dan lshwtidak ada dalam daftar paket. Seorang pria yang berpengetahuan dan tekad mungkin berhasil menginstal alat dev tmpfs, tetapi apakah itu layak sementara? Saya akan melanjutkan pemahaman saya tentang jaringan Linux dengan menggunakan PC standar. Ini akan menjadi lebih mudah. Meskipun saya tidak memahami konfigurasi router ini dengan benar, itu berfungsi dengan baik. Terima kasih atas bantuan Anda.
Lumi

Jawaban:

19

Anda dapat memeriksa /sys:

anthony@Zia:/sys/class/net$ ls -l /sys/class/net/
total 0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 br0 -> ../../devices/virtual/net/br0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lan -> ../../devices/pci0000:00/0000:00:1e.0/0000:07:01.0/net/lan
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Dec 11 15:38 tun0 -> ../../devices/virtual/net/tun0

Jadi, perangkat aktual ditampilkan di / sys / class / net. Perhatikan bahwa alias (seperti lan: 0) tidak (jadi Anda dapat mengetahui alias mana). Dan Anda dapat dengan jelas melihat mana perangkat keras yang sebenarnya (lan) dan mana yang tidak (br0, lo, tun0).

untuk memperjelas

Anda dapat mengetahui mana yang nyata di atas karena yang virtual semuanya dalam virtual. Dan Lan ada di bus PCI.

Dalam kasus Anda, Anda memiliki enam: eth0, wan, dan lan1–4. Ini agak aneh, karena Anda mengatakan Anda hanya memiliki total lima port. Saya kira eth0 sebenarnya bawaan untuk chip switch-ish, dan 5 port lainnya adalah port pada switch itu. wlan0 mungkin nyata juga (akan menjadi adaptor nirkabel), meskipun tidak ditampilkan di / sys….

Jadi, saya akan mengatakan bahwa untuk semua tujuan praktis, port Anda sebenarnya adalah wan, lan1–4, dan wlan0. br-lan adalah jembatan yang diatur untuk membuat semua 4 port berfungsi sebagai sakelar (jadi Anda mungkin dapat memisahkan sakelar itu).

derobert
sumber
Terima kasih. Saya menambahkan output serupa ke pertanyaan saya. Tidak sejelas output yang Anda tunjukkan di sini, dengan bus PCI atau yang lainnya muncul di sana; walaupun saya tidak terlalu mengerti keluarannya, saya setuju sepertinya pengidentifikasi perangkat keras. Dalam hal output saya diposting di atas, kehadiran ag71xxyang membuat saya berpikir itu adalah perangkat keras, karena terlihat seperti driver.
Lumi
@Lumi diedit untuk mencoba menjawab.
derobert
Ini mungkin lebih praktis daripada tanggapan saya.
Bryan Agee
Terima kasih. Catatan wlan0akan ada di daftar perangkat di bawah /sys/class/nettopi itu diaktifkan ketika saya menyalin daftar. :) Saya sekarang telah menambahkannya di atas. Saya tidak setuju dengan Anda tentang jumlah perangkat, saya pikir hanya ada dua, LAN dan WLAN. Tapi itu poin kecil ... jawaban yang bagus, diterima, terima kasih!
Lumi
@Lumi menggunakan brctrl delif br-lan lan1(atau serupa) untuk menjatuhkan port keluar dari jembatan. Saya menduga itu akan berfungsi sebagai port terpisah (bukan bagian dari switch LAN) kemudian.
derobert
5

Dengan asumsi alamat MAC antarmuka Anda tidak palsu , Anda dapat mencoba menggunakan ethtool :

ethtool -P {Network interface name}

" Alamat permanen: 00: 00: 00: 00: 00: 00 " akan menunjukkan itu adalah antarmuka jaringan virtual.

Bash loop berikut akan menampilkan alamat MAC untuk semua antarmuka jaringan:

for i in $(ip -o link show | awk -F': ' '{print $2}'); \
do mac=$(ethtool -P $i) \
&& printf '%-10s %-10s\n' "$i" "$mac"; \
done

lo         Permanent address: 00:00:00:00:00:00
enp5s0f0   Permanent address: 44:1e:a1:73:39:c8
enp4s0f0   Permanent address: 00:9c:02:b0:ef:20
enp5s0f1   Permanent address: 44:1e:a1:73:39:c9
enp4s0f1   Permanent address: 00:9c:02:b0:ef:24
virbr1     Permanent address: 00:00:00:00:00:00
virbr1-nic Permanent address: 00:00:00:00:00:00
virbr0     Permanent address: 00:00:00:00:00:00
virbr0-nic Permanent address: 00:00:00:00:00:00
vnet0      Permanent address: 00:00:00:00:00:00
vnet1      Permanent address: 00:00:00:00:00:00
Noam Manos
sumber
2

Saya akan mulai dengan melihat ke dalam /etc/network/config; sebagian besar distro memiliki file serupa untuk mendefinisikan dan mengkonfigurasi perangkat jaringan. Di debian / Ubuntu, itu adalah / etc / network / interfaces. Jika Anda memposting konten itu, kami dapat mengidentifikasi entri alias, ikatan, dan jembatan; sisanya akan menjadi perangkat fisik Anda.

Dengan melihat ifconfigoutput, Anda dapat mengetahui (seperti yang Anda sebutkan) oleh perangkat yang mengalami interupsi (IRQ); banyak juga yang memiliki memori yang ditetapkan, yang tidak dimiliki antarmuka virtual.

Anda tidak dapat menilai berdasarkan alamat mac saja, karena bond ( agregasi tautan ) akan menimpa mac dari masing-masing perangkat, dan bridge akan menggunakan yang sama. Jadi, jika Anda memiliki dua perangkat terikat dan dijembatani - konfigurasi umum untuk host dan router virtual HA - akan ada empat perangkat dengan mac yang sama:

eth0  - physical device 1
eth1  - physical device 2
bond0 - the virtual device that uses either or both of the above
br0   - the bridge that uses bond0 and allows sharing/forwarding across bond0

Jelas alias yang digunakan dalam openwrt bukan yang di atas, tetapi konsepnya berlaku; Saya menggunakan ini karena mereka adalah praktik standar.

Bryan Agee
sumber
Ini tidak memperhitungkan antarmuka yang dibuat dengan cara lain, bekerja dengan /etccara 'standar' . Misalnya, antarmuka yang dibuat oleh NetworkManager tidak disebutkan di sana.
gertvdijk
@ gertvdijk Itu benar, meskipun openwrt tidak mengemas NetworkManager ke 4MB itu, jadi semua antarmuka harus dalam konfigurasi.
Bryan Agee
-2

Saya pikir itu hanya memeriksa apakah nilai /sys/class/net/<interface>/typeadalah 1 (ARPHRD_ETHER) harus cukup untuk memahami apakah perangkat itu fisik.

http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30

misalnya. basename $ (dirname grep -l ^1$ /sys/class/net/*/type)

Ubaldo Porcheddu
sumber
Saya melihat 1 untuk banyak antarmuka (eth, nirkabel, bridge, & vlan menggantung dari jembatan - jadi tidak ada)
nhed