Як я можу визначити, чи є мережевий інтерфейс фізичним (пристрій) чи віртуальним (псевдонім)?


17

У мене є невеликий домашній роутер із запуском OpenWrt (Вид вбудованого Linux для маршрутизаторів). Він має п'ять портів Ethernet, один з міткою WAN і чотири лабораторних локальних мереж від 1 до 4. У ньому є такі мережеві інтерфейси, як визначено ifconfig:

root@TIBERIUS: ~ > ifconfig | grep Link
br-lan    Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan1      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan2      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan3      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan4      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lo        Link encap:Local Loopback
pppoe-wan Link encap:Point-to-Point Protocol
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
wlan0     Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0

Як бачите, досить багато пристроїв, але лише одна MAC-адреса.

Я розумію, що деякі з цих пристроїв є віртуальними. Давайте відкладемо, loі pppoe-wanце - петлевий пристрій і моє підключення PPPoE. Але для решти тих, як я маю змогу сказати, фізичні вони чи віртуальні? Я розумію, що існує норма про іменування для маркування віртуальних інтерфейсів eth0.1, але цього явно тут не дотримуються. Давайте подивимося на вихід ifconfigдвох цих інтерфейсів:

root@TIBERIUS: ~ > ifconfig wan
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15007 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12055 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:13341276 (12.7 MiB)  TX bytes:1831757 (1.7 MiB)

root@TIBERIUS: ~ > ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25799 errors:0 dropped:0 overruns:23 frame:0
          TX packets:25294 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15481996 (14.7 MiB)  TX bytes:15160380 (14.4 MiB)
          Interrupt:4

Крім незрозумілої деталі txqueuelenнаявності ненульового значення для eth0єдиної різниці є те, що eth0є Interruptзапис, який, наскільки я знаю, є функцією апаратного забезпечення. Так це те, як ви вважаєте, що мережевий інтерфейс є фізичним чи ні, шукаючи Interruptзапис ifconfig? Або є кращий спосіб? Простий і простий спосіб з’ясувати, чи мережевий пристрій є фізичним чи віртуальним?

Зауважте, що пов'язане питання є, але хоча воно має прийняту відповідь, воно не є переконливим.

Оновлення

У відповідь на відповідь Дероберта, тут випливає інформація з ls -l /sys/class/net:

br-lan      -> ../../devices/virtual/net/br-lan
eth0        -> ../../devices/platform/ag71xx.0/net/eth0
lan1        -> ../../devices/platform/dsa.0/net/lan1
lan2        -> ../../devices/platform/dsa.0/net/lan2
lan3        -> ../../devices/platform/dsa.0/net/lan3
lan4        -> ../../devices/platform/dsa.0/net/lan4
lo          -> ../../devices/virtual/net/lo
pppoe-wan   -> ../../devices/virtual/net/pppoe-wan
wan         -> ../../devices/platform/dsa.0/net/wan

[Додаток до цього списку: wlan0відображався б так само wlan0 -> ../../devices/platform/ath9k/net/wlan0, але коли я скопіював вищезазначений список, у мене відключена WLAN, через що він не з’явився.]

я б сказав eth0 це єдиний пристрій. Не ясно, що dsa.0таке.

А у відповідь на відповідь Брайана Егі:

root@TIBERIUS: ~ > cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'eth'
        option ifname 'eth0'
        option proto 'none'

config interface 'lan'
        option ifname 'lan1 lan2 lan3 lan4'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.33.1'
        option netmask '255.255.255.0'

config interface 'wan'
        option ifname 'wan'
        option proto 'pppoe'
        option username '…'
        option password '…'

Ви вже відповіли на власне запитання (шукайте специфічні для обладнання елементи, такі як IRQ, txqueue, ...). Питання, яке виникає у мене, - чому ви повинні розмежовувати це у своєму випадку використання?
Нільс

@Nils, я не розумію конфігурації мережі на моєму маршрутизаторному пристрої після того, як я натиснув на нього OpenWrt. Я вважаю це досконало заплутаним. Документи проекту та форум надали деяку допомогу, але недостатньо, а основні питання залишали без відповіді. Одне з таких питань - це порушене тут питання. Тепер мені здається, що мій маршрутизатор має лише один NIC, коли я був впевнений, що у нього є два. Уточнення деталей зменшує плутанину. Ось чому.
Лумі

Чи можете ви розмістити тут невелику фотографію або посилання на фото / документацію для цього маршрутизатора? Можливо, такі речі, як зв'язування / з'єднання / NATING, що приховують справжні MAC ...
Nils

Ви повинні мати змогу побачити кращі деталі та ті, що вам потрібні,lshw -class network
Натан V

@Nils, ось ви перейдете: wiki.openwrt.org/toh/tp-link/tl-wr941nd - @Nathan, лише 4 Мб спалаху вікно досить обмежене і lshwйого немає у списку пакунків. Знаючий та рішучий хлопець може досягти успіху в установці інструментів для розробників tmpfs, але чи варто це доки? Я буду продовжувати своє розуміння мереж Linux за допомогою стандартного ПК. Це буде простіше. Хоча я не правильно розумію цю конфігурацію маршрутизатора, вона працює чудово. Спасибі за вашу допомогу.
Лумі

Відповіді:


19

Ви можете перевірити /sys:

anthony@Zia:/sys/class/net$ ls -l /sys/class/net/
total 0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 br0 -> ../../devices/virtual/net/br0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lan -> ../../devices/pci0000:00/0000:00:1e.0/0000:07:01.0/net/lan
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Dec 11 15:38 tun0 -> ../../devices/virtual/net/tun0

Отже, фактичні пристрої відображаються в / sys / class / net. Зауважте, що псевдоніми (наприклад, lan: 0) цього не роблять (тому ви можете сказати, які псевдоніми). І ви можете чітко побачити, що таке фактичне обладнання (lan), а яке - (br0, lo, tun0).

уточнити

Ви можете сказати, що є реальним у вищезазначеному, оскільки всі віртуальні віртуальні. І lan на шині PCI.

У вашому випадку у вас є шість: eth0, wan і lan1–4. Це досить дивно, оскільки ви говорите, що у вас всього п'ять портів. Я б припустив, що eth0 насправді є провідним для того, щоб перейти на чіп-перемикач, а інші 5 портів - це порти цього комутатора. wlan0, ймовірно, також справжній (був би бездротовий адаптер), хоча він не відображається в / sys….

Отже, я б сказав, що для всіх практичних цілей вашими справжніми портами є wan, lan1–4 та wlan0. br-lan - міст, встановлений для того, щоб усі 4 порти lan функціонували як комутатор (так що ви, можливо, зможете розділити цей комутатор).


Спасибі. Я додав аналогічний висновок до свого питання. Це не так зрозуміло, як вихід, який ви показуєте тут, за допомогою шини PCI або того, що там не відображається; хоча я не дуже розумію вихід, я згоден, це схоже на апаратні ідентифікатори. Що стосується мого результату, розміщеного вище, саме присутність ag71xxзмушує мене думати, що це обладнання, оскільки воно схоже на драйвер.
Лумі

@Lumi відредаговано, щоб спробувати відповісти.
derobert

Це, мабуть, більш практично, ніж моя відповідь.
Брайан Віге

Спасибі. Примітка wlan0була б у списку пристроїв під /sys/class/netшапкою, вона була ввімкнена, коли я скопіював цей список. :) Я зараз додав це вище. Я не згоден з вами щодо кількості пристроїв, я думаю, що їх є лише два, LAN та WLAN. Але це другорядний момент… хороша відповідь, прийнято, дякую!
Лумі

@Lumi використовуйте brctrl delif br-lan lan1(або подібне), щоб скинути порт з мосту. Я підозрюю, що він буде функціонувати як окремий порт (не частина LAN комутатора).
derobert

5

Якщо припустимо, що MAC-адреса не була підробленою , ви можете спробувати використовувати ethtool :

ethtool -P {Network interface name}

" Постійна адреса: 00: 00: 00: 00: 00: 00 " означає, що це віртуальний мережевий інтерфейс.

У наступному циклі bash відображатиметься MAC-адреса для всіх мережевих інтерфейсів:

for i in $(ip -o link show | awk -F': ' '{print $2}'); \
do mac=$(ethtool -P $i) \
&& printf '%-10s %-10s\n' "$i" "$mac"; \
done

lo         Permanent address: 00:00:00:00:00:00
enp5s0f0   Permanent address: 44:1e:a1:73:39:c8
enp4s0f0   Permanent address: 00:9c:02:b0:ef:20
enp5s0f1   Permanent address: 44:1e:a1:73:39:c9
enp4s0f1   Permanent address: 00:9c:02:b0:ef:24
virbr1     Permanent address: 00:00:00:00:00:00
virbr1-nic Permanent address: 00:00:00:00:00:00
virbr0     Permanent address: 00:00:00:00:00:00
virbr0-nic Permanent address: 00:00:00:00:00:00
vnet0      Permanent address: 00:00:00:00:00:00
vnet1      Permanent address: 00:00:00:00:00:00

2

Я б почав, заглянувши /etc/network/config; більшість дистрибутивів мають подібний файл для визначення та налаштування мережевих пристроїв. У debian / Ubuntu це / etc / network / інтерфейси. Якщо ви опублікували вміст цього документа, ми могли б ідентифікувати псевдоніми, зв’язки та мости; решта - ваші фізичні пристрої.

Подивившись на ifconfig вихід, ви можете сказати (як ви вже згадували) про пристрої, які мають переривання (IRQ); багатьом також призначена пам'ять, якої віртуальних інтерфейсів немає.

Ви ніколи не можете судити лише за мак-адресами, оскільки зв'язки ( агрегація посилань ) переможуть мак окремих пристроїв, і мости будуть використовувати ті самі. Отже, якщо у вас є два приєднані та з'єднані пристрої - загальна конфігурація для віртуальних хостів і маршрутизаторів HA - буде чотири пристрої з тим самим mac:

eth0  - physical device 1
eth1  - physical device 2
bond0 - the virtual device that uses either or both of the above
br0   - the bridge that uses bond0 and allows sharing/forwarding across bond0

Очевидно, що псевдоніми, які використовуються у openwrt, не є тими, що були вище, але концепція дотримується; Я використовував їх, тому що це стандартна практика.


Це не враховує інтерфейси, створені іншими способами, оброблені "стандартним" /etcспособом. Наприклад, інтерфейси, створені NetworkManager, там не згадуються.
gertvdijk

@gertvdijk Це правда, хоча openwrt не пакує NetworkManager в ці 4 Мб, тому всі інтерфейси повинні бути в конфігурації.
Брайан Віге

-3

Я думаю, що лише перевірка того, чи є значення /sys/class/net/<interface>/type1 (ARPHRD_ETHER), повинно бути достатньо, щоб зрозуміти, чи пристрій фізичний.

http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30

напр. базове ім'я $ (ім'я dirname grep -l ^1$ /sys/class/net/*/type)


Я бачу 1 для багатьох інтерфейсів (eth, бездротовий зв'язок, міст і vlan, що висить з мосту - так ні)
nhed
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.