Woher wissen Sie, ob es sich bei einer Netzwerkschnittstelle um eine Tap-, Tun-, Bridge- oder physische Schnittstelle handelt?

19

Soweit ich weiß, gibt es in Linux vier Haupttypen von Netzwerkschnittstellen: tun, tap, bridge und physical.

Wenn ich Sys Admin auf Computern mit KVM durchführe, stoße ich normalerweise auf Tap-, Bridge- und physische Schnittstellen auf demselben Computer, ohne sie auseinanderhalten zu können. Ich sehe keine signifikanten Unterschiede in den ifconfigErgebnissen, wie auch in den ipErgebnissen.

Woher weiß ich, ob es sich bei einer Schnittstelle um ein Tun, Tap, Bridge oder Physical handelt?

Anmerkung: Ich behaupte nicht, dass es in Linux keine anderen Arten von Netzwerkschnittstellen gibt, aber ich kenne nur diese 4.

user368507
quelle

Antworten:

18

Ich glaube nicht, dass es einen einfachen Weg gibt, sie zu unterscheiden. Beim Stöbern in habe /sys/class/netich folgende Unterschiede festgestellt:

  • Physische Geräte haben einen /sys/class/net/eth0/deviceSymlink
  • Bridges haben ein /sys/class/net/br0/bridgeVerzeichnis
  • TUN- und TAP-Geräte haben eine /sys/class/net/tap0/tun_flagsDatei
  • Bridges und Loopback-Schnittstellen haben 00:00:00:00:00:00in/sys/class/net/lo/address
mgorven
quelle
Gute Idee, in / sys /
user368507
Virtuelle Geräte haben möglicherweise auch einen solchen deviceSymlink: ls -l /sys/class/net/lan1/deviceWird /sys/class/net/lan1/device -> ../../../dsa.0auf einem Router mit OpenWrt (Embedded Linux) angezeigt . Ich habe festgestellt, dass physikalische Interfaces einen Interrupt-Eintrag in der Ausgabe von haben ifconfig. Es ist seltsam, dass eine so einfache Frage zu einem Interface so schwer zu beantworten scheint. Die Untersuchung geht weiter ...
Lumi
Wie wäre es mit einem virtuellen ppp-Gerät?
Mâtt Frëëman
23

In Bezug auf TUN- und TAP-Geräte: Es reicht nicht aus, die obige Prüfung durchzuführen.

Der Grund ist, dass es Fälle geben kann, in denen wir ein TUN-Gerät erstellen und es (aus Versehen) tap10 nennen. Oder erstellen Sie ein TAP-Gerät und nennen Sie es tun10. Wie kann ich also wissen, ob es sich um ein Tun-Gerät oder ein Tap-Gerät handelt, da beide natürlich "tun_flags" -Einträge haben?

Die Antwort ist zu rennen ethtool -i tunOrTapDeviceName.

  • Bei einem TAP-Gerät erhalten wir: "bus-info: tap".
  • Bei einem TUN-Gerät erhalten wir: "bus-info: tun".

Beispiel

$ 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
quelle
Gibt es nicht einen ethtool-Befehl, um herauszufinden, ob es sich um eine physische oder eine Bridge-Schnittstelle handelt?
MadCode
Diese Antwort ist die prägnantere und allgemeinere Lösung.
Joshua Miller
@madcode Im allgemeinen Fall möchten Sie das driverFeld. Brücken werden zeigen driver: bridge. Leider tauchen beide als auf driver: tunund brechen das Muster :).
Sourcejedi
Ja das ist die Antwort. Der andere sagt dir nur, ob die intf virtuell ist oder nicht! Sie können eine Tap-Schnittstelle mit einem Namen benennen, der keinen Hinweis auf die Art der Schnittstelle gibt
MiniMe
9

Sie können die -dOption " Mehr oder weniger undokumentiert " verwenden ip(8), um den Typ bestimmter Geräte anzuzeigen, einschließlich "Tun, Tap & Veth":

z.B

$ 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

... tunin der letzten Zeile vermerken .

Sie können auch -dmit verwenden ip l.

Ben
quelle
iproute2 ist so ein schönes Tool. Schade, dass so viele Funktionen schwer zu entdecken sind.
kleiner Kerl
4

Dieser Befehl erledigt die Arbeit:

ip tuntap

Ergebnis Beispiel:

vnet0: tap

oder mit Details:

ip-details tuntap

Ergebnis Beispiel:

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