如何确定网络接口是物理接口(设备)还是虚拟接口(别名)?


17

我有一个运行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 '…'

您已经回答了自己的问题(查找与硬件相关的项目,例如IRQ,txqueue等)。我想到的问题是-为什么需要在用例中加以区分?
Nils 2012年

@Nils,在将OpenWrt刷新到路由器设备后,我对路由器设备的网络配置不了解。我发现这完全令人困惑。项目文档和论坛提供了一些帮助,但还远远不够,并没有解决基本问题。这些问题之一就是这里提出的问题。在我看来,当我确定路由器有两个NIC时,它似乎只有一个。澄清细节可减少混乱。这就是为什么。
Lumi 2012年

您可以在此处放置小照片或指向该路由器的照片/文档的链接吗?可能会有诸如绑定/桥接/ NATting之类的东西隐藏了真正的MAC……
Nils

使用lshw -class network
Nathan V

@Nils,可以使用以下方法:wiki.openwrt.org/toh/tp-link/tl-wr941nd-@Nathan,只有4 MB的闪存,该包装盒非常受限制,lshw不在包装清单中。一个博学多才的人可能会成功地在中安装开发工具tmpfs,但是值得吗?我将通过标准PC进一步了解Linux网络。这将变得更加容易。虽然我对路由器的配置不了解,但它确实可以正常工作。谢谢你的帮助。
Lumi 2012年

Answers:


19

您可以检查/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端口都充当交换机(因此您可以拆分该交换机)。


谢谢。我在问题中添加了类似的输出。它不像您在此处显示的输出那样清晰,PCI总线或那里没有显示什么。尽管我不太了解输出,但我同意它看起来像硬件标识符。就上面发布的输出而言,它的存在ag71xx使我认为它是硬件,因为它看起来像驱动程序。
Lumi 2012年

@Lumi编辑尝试回答。
derobert

这可能比我的回答更实际。
布莱恩·阿吉

谢谢。注意,当我复制列表时wlan0,设备列表中的设备列表中会出现该注释/sys/class/net。:)我现在在上面添加了它。我对设备的数量不同意,我认为只有两种,LAN和WLAN。但这只是次要的一点……好的答案,被接受,谢谢!
拉米

@Lumi使用brctrl delif br-lan lan1(或类似方法)将端口从网桥中删除。我怀疑它会充当一个单独的端口(不是LAN交换机的一部分)。
derobert

5

假设您的接口MAC地址未被欺骗,则可以尝试使用ethtool

ethtool -P {Network interface name}

永久地址:00:00:00:00:00:00 ”将指示它是虚拟网络接口。

以下bash循环将显示所有网络接口的MAC地址:

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

2

我首先看看/etc/network/config; 大多数发行版都有类似的文件来定义和配置网络设备。在debian / Ubuntu中,它是/ etc / network / interfaces。如果要发布这些内容,我们可以识别别名,绑定和桥接条目;剩下的就是您的物理设备。

通过查看ifconfig输出,您可以(如前所述)通过具有中断(IRQ)的设备进行判断。许多虚拟机还分配了内存,而虚拟接口则没有。

您永远无法仅通过mac地址来判断,因为bond(链接聚合)将覆盖各个设备的mac,而网桥将使用相同的地址。因此,如果有两个绑定和桥接的设备(HA虚拟主机和路由器的通用配置),那么将有四个设备具有相同的mac:

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

显然,openwrt中使用的别名不是上面的别名,但是这个概念成立。我使用这些是因为它们是标准做法。


这不考虑以“标准” /etc方式工作的其他方式创建的接口。例如,此处未提及由NetworkManager创建的接口。
gertvdijk 2012年

@gertvdijk是的,尽管openwrt并未将NetworkManager打包到该4MB中,所以所有接口都应位于配置中。
Bryan Agee

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.