Como saber se uma interface de rede é de toque, tun, ponte ou física?

19

Até onde eu sei, existem 4 tipos principais de interfaces de rede no Linux: tun, tap, bridge e físico.

Quando estou executando o sys admin em máquinas executando o KVM, geralmente encontro interfaces de toque, ponte e físicas na mesma máquina, sem poder diferenciá-las. Não vejo diferenças significativas nos ifconfigresultados, como nos ipresultados.

Como posso saber se uma interface é tun, tap, bridge ou física?

Nota: Não afirmo que não haja outros tipos de interfaces de rede no Linux, mas conheço apenas essas 4.

user368507
fonte

Respostas:

18

Eu não acho que exista uma maneira fácil de distingui-los. Ao bisbilhotar, /sys/class/netencontrei as seguintes distinções:

  • Os dispositivos físicos têm um /sys/class/net/eth0/devicelink simbólico
  • Pontes têm um /sys/class/net/br0/bridgediretório
  • Os dispositivos TUN e TAP têm um /sys/class/net/tap0/tun_flagsarquivo
  • Pontes e interfaces de loopback têm 00:00:00:00:00:00em/sys/class/net/lo/address
mgorven
fonte
Boa idéia para procurar em / sys /
user368507 17/06/2012
Os dispositivos virtuais também podem ter esse devicelink simbólico: ls -l /sys/class/net/lan1/deviceMostra /sys/class/net/lan1/device -> ../../../dsa.0em um roteador executando o OpenWrt (Linux incorporado). Eu descobri que interfaces físicas têm uma entrada de interrupção na saída de ifconfig. É estranho que uma pergunta tão simples sobre uma interface pareça tão difícil de responder. A investigação continua ...
Lumi
Que tal um dispositivo virtual ppp?
Mâtt Frëëman
23

Em relação aos dispositivos TUN e TAP: não basta fazer a verificação acima.

O motivo é que pode haver casos em que criamos um dispositivo TUN e (por erro) o chamamos tap10; ou crie um dispositivo TAP e chame-o de tun10. Então, como posso saber se é um dispositivo tun ou um dispositivo tap, já que os dois obviamente terão entradas "tun_flags"?

A resposta é correr ethtool -i tunOrTapDeviceName.

  • No caso de um dispositivo TAP, obteremos: "bus-info: tap".
  • No caso de um dispositivo TUN, obteremos: "bus-info: tun".

Exemplo

$ 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
Rami Rosen
fonte
Não existe um comando ethtool para descobrir se uma interface é física ou ponte?
precisa
Esta resposta é a solução mais concisa e de propósito geral.
Joshua Miller
@madcode No caso geral, você deseja o drivercampo. pontes serão exibidas driver: bridge. Infelizmente, tun / tap ambos aparecem como driver: tun, quebrando o padrão :).
sourcejedi
Sim, esta é a resposta. O outro diz apenas se o intf é virtual ou não! Você pode nomear uma interface de toque com um nome que não forneça indicação da natureza da interface
MiniMe 16/16
9

Você pode usar a opção mais ou menos não documentada -dpara ip(8), que informa o tipo de determinados dispositivos, incluindo tun, toque e veth:

por exemplo

$ 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 tunna última linha.

Você também pode usar -dcom ip l.

Ben
fonte
O iproute2 é uma ferramenta tão boa. Pena que muitos recursos são difíceis de descobrir.
little-dude
4

Este comando fará o trabalho:

ip tuntap

Exemplo de resultado:

vnet0: tap

ou com detalhes:

ip -details tuntap

Exemplo de resultado:

vnet0: tap
    Attached to processes: qemu-system-x86(2225)
BMWW
fonte