Як дізнатись, чи є мережевий інтерфейс 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.