Comment savoir si une interface réseau est physique (appareil) ou virtuelle (alias)?

17

J'ai un petit routeur domestique exécutant OpenWrt (sorte de Linux embarqué pour les routeurs). Il a cinq ports Ethernet, un WAN étiqueté et quatre LAN 1 à 4. labeld. Il a les interfaces réseau suivantes définies selon 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

Comme vous pouvez le voir, un certain nombre d'appareils, mais une seule adresse MAC.

Je comprends que certains de ces appareils sont virtuels. Mettons de côté loet pppoe-wan, c'est le périphérique de bouclage et ma connexion PPPoE. Mais pour les autres, comment suis-je censé pouvoir dire s'ils sont physiques ou virtuels? Je comprends qu'il existe une convention de dénomination pour étiqueter les interfaces virtuelles comme eth0.1, mais qui n'est évidemment pas respectée ici. Voyons la sortie de ifconfigpour deux de ces interfaces:

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

Mis à part le détail obscur d' txqueuelenavoir un non-zéro pour eth0, la seule différence frappante est qu'il eth0a une Interruptentrée, qui pour autant que je sache, est une fonctionnalité matérielle. Alors, c'est comme ça que vous dites qu'une interface réseau est physique ou non, en recherchant une Interruptentrée dans ifconfig? Ou existe-t-il une meilleure façon? Un moyen simple et direct de savoir si un périphérique réseau est physique ou virtuel?

Notez qu'il y a une question connexe mais bien qu'elle ait une réponse acceptée, elle n'est pas concluante.

Mise à jour

En réponse à la réponse de Derobert, voici des informations dérivées de 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

[Addendum à cette liste: se wlan0serait également affiché wlan0 -> ../../devices/platform/ath9k/net/wlan0, mais lorsque j'ai copié la liste ci-dessus, le WLAN était désactivé, c'est pourquoi il ne s'est pas affiché .]

Je dirais que eth0c'est le seul appareil. Pas clair ce qui dsa.0est.

Et en réponse à la réponse de Bryan Agee:

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 '…'
Lumi
la source
Vous avez déjà répondu à votre propre question (recherchez des éléments spécifiques au matériel comme IRQ, txqueue, ...). La question qui se pose à moi est - pourquoi avez-vous besoin de différencier cela dans votre cas d'utilisation?
Nils
@Nils, je n'ai pas une compréhension claire de la configuration réseau sur mon périphérique routeur après avoir flashé OpenWrt dessus. Je trouve cela complètement déroutant. Les documents et le forum du projet ont fourni de l'aide, mais pas assez, et laissant les questions de base sans réponse. L'une de ces questions est celle soulevée ici. Il me semble maintenant que mon routeur n'a qu'une seule carte réseau alors que j'étais sûr qu'il en avait deux. La clarification des détails réduit la confusion. C'est pourquoi.
Lumi
Pouvez-vous mettre une petite photo ou un lien vers une photo / documentation pour ce routeur ici? Il pourrait y avoir des choses comme le collage / pontage / NATting qui cachent les vrais MAC ...
Nils
Vous devriez pouvoir voir de meilleurs détails, et ceux dont vous avez besoin, en utilisantlshw -class network
Nathan V
@Nils, c'est parti : wiki.openwrt.org/toh/tp-link/tl-wr941nd - @Nathan, avec seulement 4 Mo de flash, la boîte est plutôt contrainte et lshwne figure pas dans la liste des paquets. Un gars bien informé et déterminé pourrait réussir à installer des outils de développement tmpfs, mais cela en vaut-il la peine? Je vais approfondir ma compréhension des réseaux Linux au moyen d'un PC standard. Ça va être plus facile. Bien que je ne comprenne pas correctement cette configuration de routeur, cela fonctionne bien. Merci de votre aide.
Lumi

Réponses:

19

Vous pouvez vérifier /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

Ainsi, les périphériques réels s'affichent dans / sys / class / net. Notez que les alias (comme lan: 0) ne le font pas (vous pouvez donc savoir quels sont les alias). Et vous pouvez clairement voir quels sont les matériels réels (lan) et ceux qui ne le sont pas (br0, lo, tun0).

clarifier

Vous pouvez dire lesquels sont réels dans ce qui précède, car les virtuels sont tous virtuels. Et LAN est sur le bus PCI.

Dans votre cas, vous en avez six: eth0, wan et lan1–4. C'est plutôt étrange, car vous dites que vous n'avez que cinq ports au total. Je suppose que eth0 est en fait câblé à une puce de commutation, et les 5 autres ports sont des ports sur ce commutateur. wlan0 est probablement réel aussi (ce serait l'adaptateur sans fil), bien qu'il ne s'affiche pas dans / sys….

Donc, je dirais qu'à toutes fins pratiques, vos ports réels sont wan, lan1–4 et wlan0. br-lan est un pont configuré pour que les 4 ports lan fonctionnent comme un commutateur (vous pourrez donc peut-être diviser ce commutateur).

derobert
la source
Merci. J'ai ajouté une sortie similaire à ma question. Ce n'est pas aussi clair que la sortie que vous montrez ici, avec le bus PCI ou autre chose là-bas; bien que je ne comprenne pas vraiment la sortie, je suis d'accord qu'elle ressemble à des identifiants matériels. Dans le cas de ma sortie publiée ci-dessus, c'est la présence de ag71xxcela qui me fait penser que c'est du matériel, car il ressemble à un pilote.
Lumi
@Lumi modifié pour essayer de répondre.
derobert
C'est probablement plus pratique que ma réponse.
Bryan Agee
Merci. Remarque wlan0aurait été présente dans la liste des périphériques sous /sys/class/netchapeau, il a été activé lorsque j'ai copié la liste. :) Je l'ai maintenant ajouté ci-dessus. Je ne suis pas d'accord avec vous sur le nombre d'appareils, je pense qu'il n'y en a que deux, LAN et WLAN. Mais c'est un point mineur… bonne réponse, acceptée, merci!
Lumi
@Lumi utilise brctrl delif br-lan lan1(ou similaire) pour supprimer un port du pont. Je soupçonne qu'il fonctionnera alors comme un port séparé (ne faisant pas partie du commutateur LAN).
derobert
5

En supposant que votre adresse MAC d'interface n'a pas été usurpée , vous pouvez essayer d'utiliser ethtool :

ethtool -P {Network interface name}

" Adresse permanente: 00: 00: 00: 00: 00: 00 " indiquera qu'il s'agit d'une interface réseau virtuelle.

La boucle bash suivante affichera l'adresse MAC pour toutes les interfaces réseau:

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
Noam Manos
la source
2

Je commencerais par regarder dedans /etc/network/config; la plupart des distributions ont un fichier similaire pour définir et configurer les périphériques réseau. Dans debian / Ubuntu, c'est / etc / network / interfaces. Si vous deviez publier le contenu de cela, nous pourrions identifier les entrées d'alias, de lien et de pont; le reste serait vos appareils physiques.

En regardant la ifconfigsortie, vous pouvez voir (comme vous l'avez mentionné) les périphériques qui ont des interruptions (IRQ); beaucoup ont également de la mémoire, contrairement aux interfaces virtuelles.

Vous ne pouvez jamais juger uniquement par les adresses mac, car les liaisons ( agrégation de liens ) remplaceront le mac des appareils individuels et les ponts l'utiliseront. Donc, si vous avez deux appareils liés et pontés - une configuration commune pour les hôtes et routeurs virtuels HA - il y aura quatre appareils avec le même 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

Il est clair que les alias utilisés dans openwrt ne sont pas ceux ci-dessus, mais le concept est valable; Je les ai utilisés car ils sont une pratique standard.

Bryan Agee
la source
Cela ne tient pas compte des interfaces créées d'autres manières, travaillées de la manière «standard» /etc. Par exemple, les interfaces créées par NetworkManager n'y sont pas mentionnées.
gertvdijk
@gertvdijk C'est vrai, bien que openwrt ne comprenne pas NetworkManager dans ce 4 Mo, donc toutes les interfaces devraient être dans la configuration.
Bryan Agee
-2

Je pense que le simple fait de vérifier si la valeur de /sys/class/net/<interface>/typeest 1 (ARPHRD_ETHER) devrait suffire pour comprendre si l'appareil est physique.

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

par exemple. nom de base $ (dirname grep -l ^1$ /sys/class/net/*/type)

Ubaldo Porcheddu
la source
Je vois 1 pour de nombreuses interfaces (eth, sans fil, pont et vlan suspendus à un pont - donc non)
nhed