네트워크 인터페이스가 물리적 (장치)인지 가상 (별칭)인지 어떻게 알 수 있습니까? packets:25294 errors:0 dropped:0 overruns:0 carrier:0

OpenWrt (라우터 용 임베디드 Linux 종류)를 실행하는 작은 홈 라우터가 있습니다. 여기에는 5 개의 이더넷 포트 (하나는 WAN으로 표시되고 4는 LAN 1-4로 표시)가 있습니다. 다음과 같이 네트워크 인터페이스가 정의되어 있습니다 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

보시다시피, 많은 장치가 있지만 하나의 MAC 주소 만 있습니다.

나는 그 장치 중 일부가 가상이라는 것을 알고 있습니다. 을 제외 lo하고 pppoe-wan루프백 장치와 PPPoE 연결입니다. 그러나 나머지 사람들에게는 물리적 또는 가상인지 어떻게 알 수 있습니까? 가상 인터페이스에 레이블을 지정하는 명명 규칙이 있음을 이해 eth0.1하지만 분명히 여기에 따르지 않습니다. 다음 ifconfig두 인터페이스 에 대한 출력을 보자 .

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

그렇다의 모호한 상세에서 txqueuelen0이 아닌 데 eth0, 유일하게 눈에 띄는 차이점은이 eth0Interrupt내가 아는 한 하드웨어 기능입니다 항목을. ? 에서 Interrupt항목을 검색 하여 네트워크 인터페이스가 물리적인지 아닌지 알려주는 방법 은 ifconfig무엇입니까? 아니면 더 좋은 방법이 있습니까? 네트워크 장치가 물리적인지 가상인지 확인하는 간단하고 간단한 방법은 무엇입니까?

거기에 참고 관련 질문 만이 허용 대답을 가지고 있지만, 그것이 결정적인 없습니다.

최신 정보

derobert의 답변에 대한 답은 다음에서 파생 된 정보입니다 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

[이 목록의 부록 : wlan0과 함께 표시 wlan0 -> ../../devices/platform/ath9k/net/wlan0되었지만 위 목록을 복사하면 WLAN이 비활성화되어 표시되지 않았습니다.]

나는 eth0유일한 장치 라고 말할 것 입니다. 무엇인지 명확하지 않습니다 dsa.0.

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 '…'



답변

당신은 확인할 수 있습니다 /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

따라서 실제 장치는 / sys / class / net에 표시됩니다. 하는 것으로 별칭 (LAN과 같은 : 0)하지 (당신이 알 수 있도록 별칭있는). 그리고 실제 하드웨어 (lan)와 아닌 하드웨어 (br0, lo, tun0)를 명확하게 볼 수 있습니다.

명확히하기 위해

가상은 모두 가상에 있기 때문에 위의 내용 중 어느 것이 실제인지 알 수 있습니다. LAN은 PCI 버스에 있습니다.

귀하의 경우, eth0, wan 및 lan1-4의 6 개가 있습니다. 총 5 개의 포트만 있다고 말했기 때문에 다소 이상합니다. eth0은 실제로 스위치 칩에 하드 와이어로 연결되어 있으며 다른 5 포트는 해당 스위치의 포트입니다. wlan0은 / sys에 표시되지 않지만 무선 어댑터 일 수도 있습니다.

따라서 모든 실제적인 목적을 위해 실제 포트는 wan, lan1-4 및 wlan0입니다. br-lan은 4 개의 LAN 포트를 모두 스위치로 작동하도록 설정된 브리지입니다 (따라서 해당 스위치를 분할 할 수 있음).


답변

인터페이스 MAC 주소가 스푸핑 되지 않았다고 가정하면 ethtool을 사용해보십시오 .

ethtool -P {Network interface name}

영구 주소 : 00 : 00 : 00 : 00 : 00 : 00 “는 가상 네트워크 인터페이스임을 나타냅니다.

다음 bash 루프는 모든 네트워크 인터페이스에 대한 MAC 주소를 표시합니다.

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


답변

나는 살펴보면서 시작할 것이다 /etc/network/config. 대부분의 배포판에는 네트워크 장치를 정의하고 구성하기위한 유사한 파일이 있습니다. 데비안 / 우분투에서는 / etc / network / interfaces입니다. 그 내용을 게시하려는 경우 별칭, 본드 및 브리지 항목을 식별 할 수 있습니다. 나머지는 물리적 장치입니다.

ifconfig출력 을 살펴보면 인터럽트 (IRQ)가있는 장치에 대해 언급 한대로 알 수 있습니다. 또한 많은 가상 인터페이스에는 메모리가 할당되어 있지 않습니다.

본드 ( 링크 집계 )가 개별 장치의 맥을 재정의하고 브리지 가 동일하게 사용하기 때문에 맥 주소만으로는 판단 할 수 없습니다 . 따라서 HA 가상 호스트 및 라우터에 대한 공통 구성 인 두 개의 장치가 본딩 및 브리지 된 경우 동일한 Mac을 사용하는 4 개의 장치가 있습니다.

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

분명히 openwrt에 사용 된 별칭은 위의 별칭이 아니지만 개념은 그대로 유지됩니다. 나는 표준 연습이기 때문에 이것을 사용했습니다.


답변

나는 값 /sys/class/net/<interface>/type이 1인지 (ARPHRD_ETHER) 확인하면 장치가 물리적 장치인지 이해하기에 충분해야한다고 생각합니다.

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

예. 기본 이름 $ (dirname grep -l ^1$ /sys/class/net/*/type)


답변