Как узнать, является ли сетевой интерфейс касанием, настройкой, мостом или физическим?

19

Насколько я знаю, в Linux существует 4 основных типа сетевых интерфейсов: tun, tap, bridge и физический.

Когда я выполняю sys admin на машинах под управлением KVM, я обычно сталкиваюсь с tap, bridge и физическими интерфейсами на одной машине, не имея возможности их различить. Я не вижу каких-либо существенных различий в ifconfigрезультатах, как в ipрезультатах.

Как я могу узнать, является ли интерфейс Tun, Tap, Bridge или физическим?

примечание: я не утверждаю, что в Linux нет других типов сетевых интерфейсов, но я знаю только эти 4.

user368507
источник

Ответы:

18

Я не думаю, что есть простой способ отличить их. Посмотрев вокруг, /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
mgorven
источник
Хорошая идея посмотреть в / sys /
user368507
Виртуальные устройства также могут иметь такую deviceсимволическую ссылку: ls -l /sys/class/net/lan1/deviceПоказывает /sys/class/net/lan1/device -> ../../../dsa.0на маршрутизаторе, работающем под OpenWrt (встроенный Linux). Я обнаружил, что физические интерфейсы имеют запись прерывания на выходе ifconfig. Странно, что на такой простой вопрос об интерфейсе так сложно ответить. Расследование продолжается ...
Луми
Как насчет виртуального устройства ppp?
Мэтт Фрэман
23

Относительно устройств TUN и TAP: недостаточно выполнить вышеуказанную проверку.

Причина в том, что могут быть случаи, когда мы создаем устройство TUN и (по ошибке) называем его tap10; или создайте устройство TAP и назовите его tun10. Итак, как я могу узнать, является ли оно устройством tun или устройством прослушивания, так как оба, конечно, будут иметь записи "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
Рами Розен
источник
Разве нет команды ethtool, чтобы определить, является ли интерфейс физическим или мостовым?
MadCode
Этот ответ является более кратким и универсальным решением.
Джошуа Миллер
@madcode В общем случае вы хотите driverполе. мосты покажет driver: bridge. К сожалению, TUN / TAPP оба обнаруживаются как driver: tun, ломая образец :).
sourcejedi
Да, это ответ. Другой только скажет вам, является ли intf виртуальным или нет! Вы можете назвать интерфейс касания именем, которое не указывает на характер интерфейса
MiniMe
9

Вы можете использовать более или менее недокументированную -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.

Бен
источник
iproute2 такой хороший инструмент. Жаль, что многие функции трудно обнаружить.
маленький чувак
4

Эта команда сделает работу:

ip tuntap

Пример результата:

vnet0: tap

или с деталями:

ip-подробности tuntap

Пример результата:

vnet0: tap
    Attached to processes: qemu-system-x86(2225)
BMWW
источник