Woran erkenne ich, ob eine Netzwerkschnittstelle physisch (Gerät) oder virtuell (Alias) ist?

17

Ich habe einen kleinen Heimrouter, auf dem OpenWrt ausgeführt wird (eine Art eingebettetes Linux für Router). Es verfügt über fünf Ethernet-Ports, einen WAN-Port und vier Labeld LAN-Ports (1 bis 4). Die folgenden Netzwerkschnittstellen sind wie folgt definiert 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

Wie Sie sehen, eine ganze Reihe von Geräten, aber nur eine MAC-Adresse.

Ich verstehe, dass einige dieser Geräte virtuell sind. Lassen Sie uns beiseite legen lound pppoe-wandas ist das Loopback-Gerät und meine PPPoE-Verbindung. Aber wie soll ich für die anderen feststellen können, ob sie physisch oder virtuell sind? Ich verstehe, dass es eine Namenskonvention für die Kennzeichnung virtueller Schnittstellen gibt eth0.1, die hier jedoch offensichtlich nicht eingehalten wird. Sehen wir uns die Ausgabe von ifconfigfür zwei dieser Schnittstellen an:

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

Abgesehen von dem obskuren Detail txqueueleneiner Nicht-Null für eth0, ist der einzige auffällige Unterschied, dass eth0es einen InterruptEintrag gibt, der meines Wissens ein Hardware-Feature ist. Stellen Sie also fest, dass eine Netzwerkschnittstelle physisch ist oder nicht, indem Sie nach einem InterruptEintrag in suchen ifconfig? Oder gibt es einen besseren Weg? Eine einfache und unkomplizierte Methode, um herauszufinden, ob ein Netzwerkgerät physisch oder virtuell ist?

Beachten Sie, dass es eine verwandte Frage gibt, die zwar eine akzeptierte Antwort enthält, jedoch nicht abschließend ist.

Aktualisieren

Als Antwort auf die Antwort von derobert finden Sie hier Informationen, die abgeleitet wurden von 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

[Nachtrag zu dieser Liste: wlan0wäre auch aufgetaucht wlan0 -> ../../devices/platform/ath9k/net/wlan0, aber als ich die obige Liste kopierte, hatte ich WLAN deaktiviert, weshalb es nicht aufgetaucht ist.]

Ich würde sagen, eth0ist das einzige Gerät. Unklar was dsa.0ist.

Und als Antwort auf Bryan Agees Antwort:

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
quelle
Sie haben bereits Ihre eigene Frage beantwortet (suchen Sie nach hardwarespezifischen Elementen wie IRQ, txqueue, ...). Die Frage, die sich mir stellt, ist: Warum müssen Sie das in Ihrem Anwendungsfall differenzieren?
Nils
@Nils, ich verstehe die Netzwerkkonfiguration auf meinem Routergerät nicht genau, nachdem ich OpenWrt darauf geflasht habe. Ich finde es durch und durch verwirrend. Die Projektdokumente und das Forum haben einige Hilfe geliefert, aber nicht genug, und die grundlegenden Fragen bleiben unbeantwortet. Eine dieser Fragen ist die hier aufgeworfene. Es scheint mir jetzt, dass mein Router nur eine Netzwerkkarte hat, als ich sicher war, dass er zwei hat. Die Klärung von Details verringert die Verwirrung. Deshalb.
Lumi
Können Sie hier ein kleines Foto oder einen Link zu einem Foto / einer Dokumentation für diesen Router einfügen? Es könnte Dinge wie Bonding / Bridging / NATting geben, die die echten MACs verbergen ...
Nils
Sie sollten in der Lage sein, bessere Details zu sehen und die, die Sie benötigen, mitlshw -class network
Nathan V
@Nils, hier gehts: wiki.openwrt.org/toh/tp-link/tl-wr941. - @Nathan, mit nur 4 MB Flash, ist die Box eher eingeschränkt und lshwnicht in der Paketliste. Ein sachkundiger und entschlossener Kerl könnte erfolgreich Entwickler-Tools installieren tmpfs, aber würde es sich lohnen? Ich werde mein Verständnis von Linux-Netzwerken mithilfe eines Standard-PCs vertiefen. Das wird einfacher. Obwohl ich diese Routerkonfiguration nicht richtig verstehe, funktioniert sie einwandfrei. Danke für Ihre Hilfe.
Lumi

Antworten:

19

Sie können überprüfen /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

Tatsächliche Geräte werden also in / sys / class / net angezeigt. Beachten Sie, dass Aliase (wie lan: 0) dies nicht tun (damit Sie erkennen können, welche Aliase sind). Und Sie können deutlich erkennen, welche Hardware (LAN) tatsächlich vorhanden ist und welche nicht (BR0, LO, TUN0).

um klarzustellen

Sie können erkennen, welche oben real sind, da die virtuellen alle virtuell sind. Und LAN ist auf dem PCI-Bus.

In Ihrem Fall haben Sie sechs: eth0, wan und lan1–4. Dies ist ziemlich seltsam, da Sie sagen, dass Sie insgesamt nur fünf Ports haben. Ich vermute, eth0 ist tatsächlich fest mit einem Switch-ish-Chip verdrahtet, und die anderen 5 Ports sind Ports an diesem Switch. wlan0 ist wahrscheinlich auch real (wäre der WLAN-Adapter), obwohl es in / sys nicht angezeigt wird….

Also, ich würde sagen, dass für alle praktischen Zwecke Ihre realen Ports wan, lan1–4 und wlan0 sind. br-lan ist eine Bridge, die so eingerichtet ist, dass alle 4 LAN-Ports als Switch fungieren (sodass Sie diesen Switch möglicherweise aufteilen können).

derobert
quelle
Vielen Dank. Ich habe meiner Frage eine ähnliche Ausgabe hinzugefügt. Es ist nicht so klar wie die Ausgabe, die Sie hier anzeigen, mit PCI-Bus oder was nicht dort oben angezeigt wird. Obwohl ich die Ausgabe nicht wirklich verstehe, stimme ich zu, dass sie wie Hardware-IDs aussieht. In dem Fall, in dem meine Ausgabe oben veröffentlicht wurde ag71xx, lässt mich das Vorhandensein von Hardware denken, da es wie ein Treiber aussieht.
Lumi
@Lumi bearbeitet, um zu versuchen, zu antworten.
Derobert
Dies ist wahrscheinlich praktischer als meine Antwort.
Bryan Agee
Vielen Dank. Hinweis wlan0wäre in der Geräteliste vorhanden /sys/class/netgewesen, wenn sie beim Kopieren der Liste aktiviert worden wäre. :) Ich habe es jetzt oben hinzugefügt. Ich bin nicht einverstanden mit Ihnen über die Anzahl der Geräte, ich denke, es gibt nur zwei, LAN und WLAN. Aber das ist ein kleiner Punkt ... gute Antwort, akzeptiert, danke!
Lumi
@Lumi benutze brctrl delif br-lan lan1(oder ähnliches), um einen Port aus der Brücke zu werfen . Ich vermute, es wird dann als separater Port (nicht Teil des LAN-Switch) funktionieren.
Derobert
5

Angenommen, Ihre Schnittstellen-MAC-Adresse wurde nicht gefälscht , können Sie versuchen, ethtool zu verwenden :

ethtool -P {Network interface name}

" Permanente Adresse: 00: 00: 00: 00: 00: 00 " zeigt an, dass es sich um eine virtuelle Netzwerkschnittstelle handelt.

Die folgende Bash-Schleife zeigt die MAC-Adresse für alle Netzwerkschnittstellen an:

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
quelle
2

Ich würde anfangen, indem ich hineinschaue /etc/network/config; Die meisten Distributionen haben eine ähnliche Datei zum Definieren und Konfigurieren von Netzwerkgeräten. In debian / Ubuntu ist es / etc / network / interfaces. Wenn Sie den Inhalt davon veröffentlichen würden, könnten wir Alias-, Bond- und Bridge-Einträge identifizieren. Der Rest wäre Ihre physischen Geräte.

Wenn Sie sich die ifconfigAusgabe ansehen, können Sie (wie bereits erwähnt) feststellen, welche Geräte Interrupts (IRQs) haben. Vielen ist auch Speicher zugewiesen, virtuellen Schnittstellen nicht.

Sie können nie allein nach Mac-Adressen urteilen, da Anleihen ( Link-Aggregation ) den Mac einzelner Geräte überschreiben und Bridges dieselben verwenden. Wenn Sie also zwei Geräte verbunden und überbrückt haben - eine übliche Konfiguration für virtuelle HA-Hosts und -Router -, gibt es vier Geräte mit demselben 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

Es ist klar, dass die in openwrt verwendeten Aliase nicht die oben genannten sind, aber das Konzept gilt; Ich habe diese verwendet, weil sie Standard sind.

Bryan Agee
quelle
Dies gilt nicht für Schnittstellen, die auf andere Art und Weise erstellt wurden und nach dem 'Standard'- /etcPrinzip gearbeitet haben. Beispielsweise werden von NetworkManager erstellte Schnittstellen dort nicht erwähnt.
gertvdijk
@gertvdijk Das stimmt, obwohl openwrt NetworkManager nicht in diese 4 MB packt, sollten sich alle Schnittstellen in der Konfiguration befinden.
Bryan Agee
-2

Ich denke, dass das Überprüfen, ob der Wert /sys/class/net/<interface>/type1 (ARPHRD_ETHER) ist, ausreichen sollte, um zu verstehen, ob es sich bei dem Gerät um ein physisches Gerät handelt.

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

z.B. basename $ (dirname grep -l ^1$ /sys/class/net/*/type)

Ubaldo Porcheddu
quelle
Ich sehe 1 für viele Schnittstellen (eth, Wireless, Brücke, & vlan hängen von einer Brücke - so no)
nhed