Tengo un pequeño enrutador doméstico que ejecuta OpenWrt (tipo de Linux incorporado para enrutadores). Tiene cinco puertos Ethernet, uno etiquetado WAN y cuatro etiquetados LAN 1 a 4. Tiene las siguientes interfaces de red definidas según 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
Como puede ver, hay muchos dispositivos, pero solo una dirección MAC.
Entiendo que algunos de esos dispositivos son virtuales. Dejemos de lado lo
y pppoe-wan
, ese es el dispositivo de bucle invertido y mi conexión PPPoE. Pero para el resto de ellos, ¿cómo se supone que debo saber si son físicos o virtuales? Entiendo que hay una convención de nomenclatura para etiquetar interfaces virtuales como eth0.1
, pero eso obviamente no se cumple aquí. Veamos la salida de ifconfig
dos de estas 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
Además del oscuro detalle de txqueuelen
tener un valor distinto de cero eth0
, la única diferencia sorprendente es que eth0
tiene una Interrupt
entrada, que hasta donde yo sé es una característica de hardware. Entonces, ¿es así como sabes que una interfaz de red es física o no, buscando una Interrupt
entrada ifconfig
? ¿O hay un mejor camino? ¿Una forma simple y directa de averiguar si un dispositivo de red es físico o virtual?
Tenga en cuenta que hay una pregunta relacionada, pero si bien tiene una respuesta aceptada, no es concluyente.
Actualizar
En respuesta a la respuesta de derobert, aquí hay información derivada 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
[Anexo a esta lista: wlan0
habría aparecido también wlan0 -> ../../devices/platform/ath9k/net/wlan0
, pero cuando copié la lista anterior tenía WLAN deshabilitada, por lo que no apareció.]
Yo diría que eth0
es el único dispositivo. No está claro qué dsa.0
es.
Y en respuesta a la respuesta 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 '…'
fuente
lshw -class network
lshw
no está en la lista de paquetes. Un tipo bien informado y decidido podría tener éxito en la instalación de herramientas de desarrollotmpfs
, pero ¿valdría la pena? Voy a profundizar mi comprensión de las redes Linux mediante una PC estándar. Esto va a ser más fácil. Si bien no entiendo correctamente esta configuración de enrutador, funciona bien. Gracias por tu ayuda.Respuestas:
Puedes consultar
/sys
:Entonces, los dispositivos reales se muestran en / sys / class / net. Tenga en cuenta que los alias (como lan: 0) no lo hacen (por lo que puede decir cuáles son alias). Y puede ver claramente cuáles son hardware real (lan) y cuáles no (br0, lo, tun0).
para aclarar
Puedes decir cuáles son reales en lo anterior porque los virtuales están todos en virtual. Y lan está en el bus PCI.
En su caso, tiene seis: eth0, wan y lan1–4. Esto es bastante extraño, ya que usted dice que solo tiene cinco puertos en total. Supongo que eth0 está realmente conectado a un chip switch-ish, y los otros 5 puertos son puertos en ese switch. wlan0 probablemente también sea real (sería el adaptador inalámbrico), aunque no se muestra en / sys….
Por lo tanto, diría que, a todos los efectos prácticos, sus puertos reales son wan, lan1–4 y wlan0. br-lan es un puente configurado para hacer que los 4 puertos lan funcionen como un conmutador (por lo que puede dividir ese conmutador).
fuente
ag71xx
eso lo que me hace pensar que es hardware, ya que parece un controlador.wlan0
habría estado presente en la lista de dispositivos debajo de la/sys/class/net
cual se habilitó cuando copié la lista. :) Ahora lo he agregado arriba. No estoy de acuerdo con usted en la cantidad de dispositivos, creo que solo hay dos, LAN y WLAN. Pero ese es un punto menor ... buena respuesta, aceptado, ¡gracias!brctrl delif br-lan lan1
(o similar) para soltar un puerto del puente. Sospecho que funcionará como un puerto separado (no parte del conmutador LAN) entonces.Suponiendo que la dirección MAC de su interfaz no fue falsificada , puede intentar usar ethtool :
" Dirección permanente: 00: 00: 00: 00: 00: 00 " indicará que es una interfaz de red virtual.
El siguiente bucle bash mostrará la dirección MAC para todas las interfaces de red:
fuente
Empezaría por mirar adentro
/etc/network/config
; La mayoría de las distribuciones tienen un archivo similar para definir y configurar dispositivos de red. En debian / Ubuntu, es / etc / network / interfaces. Si publicara el contenido de eso, podríamos identificar entradas de alias, enlace y puente; el resto serían tus dispositivos físicos.Al observar la
ifconfig
salida, puede distinguir (como mencionó) los dispositivos que tienen interrupciones (IRQ); muchos también tienen memoria asignada, que las interfaces virtuales no tienen.Nunca puede juzgar solo por las direcciones mac, ya que los enlaces ( agregación de enlaces ) anularán la mac de los dispositivos individuales, y los puentes usarán lo mismo. Entonces, si tiene dos dispositivos enlazados y en puente, una configuración común para hosts virtuales y enrutadores HA, habrá cuatro dispositivos con la misma Mac:
Claramente, los alias utilizados en openwrt no son los anteriores, pero el concepto es válido; Los usé porque son una práctica estándar.
fuente
/etc
. Por ejemplo, las interfaces creadas por NetworkManager no se mencionan allí.Creo que solo verificar si el valor de
/sys/class/net/<interface>/type
es 1 (ARPHRD_ETHER) debería ser suficiente para entender si el dispositivo es físico.http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30
p.ej. basename $ (dirname
grep -l ^1$ /sys/class/net/*/type
)fuente