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


19

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

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

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

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

Ответы:


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

Хорошая идея посмотреть в / 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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.