Eu tenho um pequeno roteador doméstico executando o OpenWrt (tipo de Linux incorporado para roteadores). Possui cinco portas Ethernet, uma rotulada WAN e quatro rotuladas LAN 1 a 4. Possui as seguintes interfaces de rede definidas conforme 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 você pode ver, vários dispositivos, mas apenas um endereço MAC.
Entendo que alguns desses dispositivos são virtuais. Vamos deixar de lado lo
e pppoe-wan
esse é o dispositivo de loopback e minha conexão PPPoE. Mas para o restante deles, como devo saber se eles são físicos ou virtuais? Entendo que existe uma convenção de nomenclatura para rotular interfaces virtuais como eth0.1
, mas isso obviamente não é respeitado aqui. Vamos ver a saída de ifconfig
para duas dessas 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
Além do detalhe obscuro de txqueuelen
ter um diferente de zero eth0
, a única diferença marcante é que eth0
tem uma Interrupt
entrada, que, até onde eu sei, é um recurso de hardware. Então é assim que você diz que uma interface de rede é física ou não, procurando uma Interrupt
entrada ifconfig
? Ou há um jeito melhor? Uma maneira simples e direta de descobrir se um dispositivo de rede é físico ou virtual?
Observe que há uma pergunta relacionada, mas, embora tenha uma resposta aceita, não é conclusiva.
Atualizar
Em resposta à resposta de derobert, aqui estão as informações derivadas 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
[Adendo a esta lista: wlan0
teria aparecido tão bem quanto wlan0 -> ../../devices/platform/ath9k/net/wlan0
, mas quando copiei a lista acima, a WLAN foi desativada, e é por isso que ela não apareceu.]
Eu diria que eth0
é o único dispositivo. Não está claro o que dsa.0
é.
E em resposta à resposta 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 '…'
fonte
lshw -class network
lshw
não está na lista de pacotes. Um cara experiente e determinado pode ter sucesso na instalação de ferramentas de desenvolvimentotmpfs
, mas valeria a pena? Vou aprofundar minha compreensão das redes Linux por meio de um PC padrão. Isso vai ser mais fácil. Embora eu não entenda corretamente essa configuração do roteador, ela funciona bem. Obrigado pela ajuda.Respostas:
Você pode verificar
/sys
:Portanto, os dispositivos reais são exibidos em / sys / class / net. Observe que os aliases (como lan: 0) não são (para que você possa saber quais são os aliases). E você pode ver claramente quais são os hardwares reais (lan) e quais não são (br0, lo, tun0).
esclarecer
Você pode dizer quais são reais nas opções acima, porque as virtuais são todas virtuais. E lan está no barramento PCI.
No seu caso, você tem seis: eth0, wan e lan1–4. Isso é bastante estranho, pois você diz que possui apenas cinco portas no total. Eu acho que eth0 é realmente conectado a um chip switch-ish, e as outras 5 portas são portas nesse switch. wlan0 provavelmente também é real (seria o adaptador sem fio), embora não esteja sendo exibido em / sys….
Então, eu diria que, para todos os propósitos práticos, suas portas reais são wan, lan1–4 e wlan0. br-lan é uma ponte configurada para fazer com que todas as 4 portas lan funcionem como um comutador (para que você possa dividir esse comutador).
fonte
ag71xx
disso que me faz pensar que é hardware, pois parece um driver.wlan0
estaria presente na lista de dispositivos sob a/sys/class/net
qual foi ativada quando eu copiei a lista. :) Agora eu adicionei acima. Não concordo com você no número de dispositivos, acho que existem apenas dois, LAN e WLAN. Mas isso é um ponto secundário ... boa resposta, aceita, obrigado!brctrl delif br-lan lan1
(ou similar) para soltar uma porta da ponte. Eu suspeito que funcionará como uma porta separada (não faz parte do switch LAN).Supondo que o endereço MAC da interface não tenha sido falsificado , você pode tentar usar o ethtool :
" Endereço permanente: 00: 00: 00: 00: 00: 00 " indicará que é uma interface de rede virtual.
O seguinte loop bash exibirá o endereço MAC para todas as interfaces de rede:
fonte
Eu começaria olhando
/etc/network/config
; a maioria das distros possui um arquivo semelhante para definir e configurar dispositivos de rede. No debian / Ubuntu, é / etc / network / interfaces. Se você postasse o conteúdo disso, poderíamos identificar entradas de alias, vínculos e pontes; o resto seriam seus dispositivos físicos.Observando a
ifconfig
saída, você pode dizer (como mencionado) pelos dispositivos que possuem interrupções (IRQs); muitos também têm memória atribuída, o que interfaces virtuais não.Você nunca pode julgar apenas pelos endereços MAC, pois os vínculos ( agregação de link ) substituirão o mac de dispositivos individuais e as pontes usarão o mesmo. Portanto, se você tiver dois dispositivos ligados e em ponte - uma configuração comum para hosts e roteadores virtuais de alta disponibilidade - haverá quatro dispositivos com o mesmo mac:
Claramente, os aliases usados no openwrt não são os mencionados acima, mas o conceito é válido; Eu usei isso porque eles são uma prática padrão.
fonte
/etc
. Por exemplo, as interfaces criadas pelo NetworkManager não são mencionadas lá.Eu acho que apenas verificar se o valor de
/sys/class/net/<interface>/type
1 (ARPHRD_ETHER) deve ser suficiente para entender se o dispositivo é físico.http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30
por exemplo. basename $ (dirname
grep -l ^1$ /sys/class/net/*/type
)fonte