Come sapere se un'interfaccia di rete è tap, tun, bridge o fisica?


19

Per quanto ne so, ci sono 4 tipi principali di interfacce di rete in Linux: tun, tap, bridge e fisico.

Quando eseguo l'amministratore di sistema su macchine che eseguono KVM, di solito mi imbatto in interfacce tap, bridge e fisiche sulla stessa macchina, senza essere in grado di distinguerle. Non vedo differenze significative nei ifconfigrisultati, come nei iprisultati.

Come posso sapere se un'interfaccia è un tun, tap, bridge o fisico?

nota: non pretendo che non ci siano altri tipi di interfacce di rete in Linux, ma conosco solo questi 4.

Risposte:


18

Non penso che ci sia un modo semplice per distinguerli. Frugando in /sys/class/netho trovato le seguenti distinzioni:

  • I dispositivi fisici hanno un /sys/class/net/eth0/devicecollegamento simbolico
  • I ponti hanno una /sys/class/net/br0/bridgedirectory
  • I dispositivi TUN e TAP hanno un /sys/class/net/tap0/tun_flagsfile
  • Ponti e interfacce di loopback sono 00:00:00:00:00:00in/sys/class/net/lo/address

Buona idea per guardare in / sys /
user368507

Anche i dispositivi virtuali possono avere un simile devicelink simbolico: viene ls -l /sys/class/net/lan1/devicemostrato /sys/class/net/lan1/device -> ../../../dsa.0su un router che esegue OpenWrt (Linux incorporato). Ho scoperto che le interfacce fisiche hanno una voce Interrupt nell'output di ifconfig. È strano che una domanda così semplice su un'interfaccia sembri così difficile da rispondere. L'indagine continua ...
Lumi,

Che ne dici di un dispositivo virtuale ppp?
Mâtt Frëëman,

23

Per quanto riguarda i dispositivi TUN e TAP: non è sufficiente effettuare il controllo sopra.

Il motivo è che potrebbero esserci casi in cui creiamo un dispositivo TUN e (per errore) lo chiamiamo tap10; o crea un dispositivo TAP e chiamalo tun10. Quindi, come posso sapere se si tratta di un dispositivo tun o di un dispositivo tap, dal momento che entrambi ovviamente avranno voci "tun_flags"?

La risposta è correre ethtool -i tunOrTapDeviceName.

  • Nel caso di un dispositivo TAP otterremo: "informazioni sul bus: toccare".
  • Nel caso di un dispositivo TUN otterremo: "bus-info: tun".

Esempio

$ 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

Non esiste un comando ethtool per trovare un'interfaccia fisica o bridge?
madCode

Questa risposta è la soluzione più concisa e di uso generale.
Joshua Miller,

@madcode Nel caso generale si desidera il drivercampo. i ponti mostreranno driver: bridge. Sfortunatamente tun / tap si presentano entrambi come driver: tun, rompendo lo schema :).
FonteJedi

Sì questa è la risposta. L'altro ti dice solo se l'intf è virtuale o no! È possibile
assegnare

9

Puoi usare l' -dopzione più o meno non documentata di ip(8), che ti dice il tipo di alcuni dispositivi tra cui tun, tap & veth:

per esempio

$ 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

... nota tunsull'ultima riga.

Puoi anche usare -dcon ip l.


iproute2 è uno strumento così carino. Peccato che così tante funzioni siano difficili da scoprire.
amico

4

Questo comando farà il lavoro:

IP Tuntap

Esempio di risultato:

vnet0: tap

o con dettagli:

ip -details tuntap

Esempio di risultato:

vnet0: tap
    Attached to processes: qemu-system-x86(2225)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.