Як дізнатись, чи є мережевий інтерфейс tap, tun, bridge чи фізичний?


19

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

Коли я роблю sys admin на машинах, на яких працює KVM, я зазвичай натрапляю на крани, мости та фізичні інтерфейси на одній машині, не маючи можливості їх розрізнити. Я не бачу суттєвих відмінностей в ifconfigрезультатах, як і в ipрезультатах.

Як я можу дізнатися, чи є інтерфейсом тун, кран, міст або фізичний?

Примітка: Я не стверджую, що в 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?
— Mâtt Frëëman

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. На жаль, налаштування / дотик обидва відображаються як driver: tun, порушуючи шаблон :).
— sourcejedi

Так, це відповідь. Інший лише каже вам, якщо intf не віртуальна! Ви можете назвати крановий інтерфейс з ім'ям, яке не вказує на характер інтерфейсу
— MiniMe

9

Ви можете використовувати більш-менш недокументовану -dопцію для ip(8), яка повідомляє вам тип певних пристроїв, включаючи налаштування, натискання та перевірку:

напр

$ 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 - деталізує підключення

Приклад результату:

vnet0: tap
    Attached to processes: qemu-system-x86(2225)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.