Devices

如何判斷網路介面是物理(設備)還是虛擬(別名)?

  • December 7, 2021

我有一個執行 OpenWrt(一種用於路由器的嵌入式 Linux)的小型家用路由器。它有五個乙太網埠,一個標記為 WAN 和四個標記為 LAN 1 到 4。它具有以下定義的網路介面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

如您所見,相當多的設備,但只有一個 MAC 地址。

我知道其中一些設備是虛擬的。讓我們拋開lopppoe-wan,那是環回設備和我的PPPoE連接。但是對於其餘的,我應該如何判斷它們是物理的還是虛擬的?我知道有一個用於標記虛擬介面的命名約定,例如eth0.1,但這裡顯然不遵守。讓我們看看其中ifconfig兩個介面的輸出:

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

除了txqueuelen具有非零的晦澀細節之外eth0,唯一顯著的區別是它eth0有一個Interrupt條目,據我所知,這是一個硬體功能。那麼,您是如何通過在 中查找Interrupt條目來判斷網路介面是否為物理的ifconfig?或者,還有更好的方法?找出網路設備是物理設備還是虛擬設備的簡單直接的方法?

請注意,有一個相關的問題,但雖然它確實有一個公認的答案,但它不是決定性的。

更新

作為對 derobert 的回答,以下資訊來自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

[此列表的附錄:wlan0本來也會出現wlan0 -> ../../devices/platform/ath9k/net/wlan0,但是當我複制上面的列表時,我禁用了 WLAN,這就是它沒有出現的原因。]

我會說eth0是唯一的設備。不清楚是什麼dsa.0

並回复 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 '…'

您可以檢查/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

因此,實際設備顯示在 /sys/class/net 中。請注意,別名(如 lan:0)不會(因此您可以分辨出哪些是別名)。您可以清楚地看到哪些是實際硬體 (lan),哪些不是 (br0, lo, tun0)。

澄清

您可以在上面分辨哪些是真實的,因為虛擬的都是虛擬的。並且 lan 在 PCI 匯流排上。

在您的情況下,您有六個:eth0、wan 和 lan1-4。這很奇怪,因為您說您總共只有五個埠。我猜 eth0 實際上是硬連線到一個交換機晶片,而其他 5 個埠是該交換機上的埠。wlan0 也可能是真實的(可能是無線適配器),儘管它沒有顯示在 /sys… 中。

所以,我想說的是,出於所有實際目的,您的真實埠是 wan、lan1-4 和 wlan0。br-lan 是一個橋接器,用於使所有 4 個 lan 埠用作交換機(因此您可以拆分該交換機)。

引用自:https://unix.stackexchange.com/questions/57309