如何知道网络接口是tap、tun、桥接还是物理接口?

use*_*507 25 networking ip kernel bridge tap

据我所知,Linux 中有 4 种主要的网络接口类型:tun、tap、bridge 和 physical。

当我在运行 KVM 的机器上进行系统管理时,我通常会在同一台机器上遇到 tap、bridge 和物理接口,但无法区分它们。我看不出ifconfig结果有任何显着差异,就像ip结果一样。

我如何知道接口是 tun、tap、bridge 还是物理接口?

注意:我并没有声称 Linux 中没有其他类型的网络接口,但我只知道这 4 种。

小智 27

关于 TUN 和 TAP 设备:仅进行上述检查是不够的。

原因是可能存在我们创建一个 TUN 设备并(错误地)调用它为 tap10 的情况;或创建一个 TAP 设备并将其命名为 tun10。那么,我怎么知道它是 tun 设备还是 tap 设备,因为两者当然都有“tun_flags”条目?

答案是跑ethtool -i tunOrTapDeviceName

  • 如果是 TAP 设备,我们将得到:“bus-info: tap”。
  • 如果是 TUN 设备,我们将得到:“bus-info: tun”。

例子

$ ethtool -i tapfffb93e9-6a
driver: tun
version: 1.6
firmware-version:
bus-info: tap
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
Run Code Online (Sandbox Code Playgroud)


mgo*_*ven 20

我认为没有一种简单的方法可以区分它们。仔细研究,/sys/class/net我发现了以下区别:

  • 物理设备有一个/sys/class/net/eth0/device符号链接
  • 桥梁有一个/sys/class/net/br0/bridge目录
  • TUN 和 TAP 设备有一个/sys/class/net/tap0/tun_flags文件
  • 网桥和环回接口00:00:00:00:00:00/sys/class/net/lo/address


小智 14

您可以使用或多或少未记录的-d选项来ip(8)告诉您某些设备的类型,包括 tun、tap 和 veth:

例如

$ ip -d a
[regular devices]
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 52:54:00:c8:12:ec brd ff:ff:ff:ff:ff:ff promiscuity 0 
tun
Run Code Online (Sandbox Code Playgroud)

...注意tun最后一行。

您也可以-dip l.


BMW*_*MWW 5

此命令将完成以下工作:

ip tuntap

结果示例:

vnet0: tap
Run Code Online (Sandbox Code Playgroud)

或详细信息:

ip -details tuntap

结果示例:

vnet0: tap
    Attached to processes: qemu-system-x86(2225)
Run Code Online (Sandbox Code Playgroud)