据我所知,Linux中的网络接口主要有4种类型:tun、tap、bridge和physical。
当我在运行 KVM 的机器上进行系统管理时,我通常会在同一台机器上遇到分路器、桥接器和物理接口,但无法区分它们。我看不出ifconfig
结果有任何显着差异ip
。
我如何知道接口是 tun、tap、bridge 还是物理?
注意:我并不是说Linux中没有其他类型的网络接口,但我只知道这4种。
答案1
关于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
答案2
我认为没有简单的方法来区分它们。经过一番摸索,/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
答案3
您可以使用或多或少未记录的-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
...注意tun
最后一行。
您还可以-d
与 一起使用ip l
。
答案4
正如 @ben 所说,ip -d l
提供了有关接口类型的接口的详细信息。不过信息有点乱如果您知道您对什么类型的界面感兴趣另一种可能性是使用ip link show type TYPE
它将列出该类型的所有接口。
在哪里
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |
gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan |
vti | nlmon | team_slave | bond_slave | bridge_slave |
ipvlan | ipvtap | geneve | vrf | macsec | netdevsim | rmnet }