kvm 호스트의 가상 머신에 속하는 가상 인터페이스를 판별하는 방법이 있습니까?


10

브리지 네트워킹을 사용하는 qemu / kvm을 사용하고 있습니다. 호스트 시스템에는 IP가없는 여러 "vnetX"네트워크 인터페이스가 있습니다. 어떤 vnetX가 가상 머신에 속하는지 알 수있는 방법을 찾고 있습니다.

이 인터페이스의 MAC 주소 값을 가상 머신의 MAC (또는이를 정의하는 XML)과 일치 시키려고했지만 일치하지 않습니다.

브리지에 속하는 vnet 인터페이스를 보여주는 brctl show가 있지만 유용한 정보는 아닙니다.

그 관계를 알 수있는 방법이 있습니까? 고마워!!

답변:


14

어떻습니까 (예 vnet13) :

$ VNET=vnet13; for vm in $(virsh list | grep running | awk '{print $2}'); do virsh dumpxml $vm|grep -q "$VNET" && echo $vm; done

여기서는 virsh dumpxml/etc/libvirt/qemu/foo.xml에있는 VM의 정적 XML 정의에서 사용할 수없는 VM에 대한 동적 속성을 표시 하는 데 사용 합니다. 어떤 vnetX인터페이스가 어떤 VM에 연결되어 있는지와 같은 동적 속성입니다. VM의 MAC 주소도 마찬가지입니다.


4
이 약간의 수정을 사용하여 어떤 vm에 어떤 인터페이스가 있는지 나열합니다.for vm in $(virsh list | grep running | awk '{print $2}'); do echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; done
zje

oVirt '노드'를 조사하는 경우 동일한 명령을 사용할 수 있지만 virsh는 '읽기 전용'모드로 실행해야합니다. 각 virsh 호출에 -r 매개 변수를 추가하십시오.
karlacio

6

을 시도 virsh dumpxml $domain하면 다음과 같은 내용이 표시됩니다.

  <interface type='network'>
  <mac address='52:54:00:9d:9d:10'/>
  <source network='default'/>
  <target dev='vnet1'/>
  <model type='e1000'/>
  <alias name='net1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>

alias nameqemu-kvm 명령 행에서 사용되는 것이므로 ps -ef |grep qemu|grep net1, 예제에서 실행 하면이 인터페이스에 사용 된 실제 명령 구문이 표시됩니다.


2

위에 제공된 모든 솔루션은 libvirt에 의해 VM이 관리되고 있다고 가정합니다. 그것없이 QEMU VM을 실행할 수 있습니다.이 경우 virsh를 사용하거나 XML을보고 답을 찾을 수 없습니다.

"원시"명령 행에서 QEMU VM을 실행하는 경우 :

  1. tcpdump -i tap0 -f 'icmp'(관심있는 탭 인터페이스를 대체하십시오)

  2. 추적에 패킷이 표시 될 때까지 각 후보 VM을 ping하십시오. ICMP 패킷이 나타날 때 추적중인 인터페이스는 원하는 인터페이스입니다.

반대로 특정 VM에 대한 핑을 시작한 다음 하나의 "켜질"때까지 각 탭 인터페이스를 차례로 tcpdump 할 수 있습니다. 탭 인터페이스와 일치하는 VM 또는 VM과 일치하는 탭 인터페이스를 찾는 데 관심이 있는지 여부에 따라 다릅니다.


0

vnetX인터페이스 의 MAC 주소 는 게스트가 아닌 호스트에 속합니다. brctl showmacs br0브리지에서 감지 한 MAC을 표시하지만의 인터페이스 목록과 포트 번호를 상호 참조해야합니다 brctl show.


0

Arp 캐시에서 VM으로 IP 주소 일치

# vm mac address list
for vm in $(virsh list | grep running | awk '{print $2}'); do \
  echo -n "$vm "; \
  virsh dumpxml $vm| grep -oP "52:54:[\da-f:]+" ; 
done > vm_mac.list

# vm ip list
arp -i virbr0 | grep '52:' | while read addr ; do \
  ip=$(echo $addr | awk '{print $1}'); \
  mac=$(echo $addr | awk '{print $3}'); \
  vm=$(grep "$mac" vm_mac.list | awk '{print $1}'); \
  echo "$vm $ip $mac"; \
done | sort

샘플 출력 :

vm66 192.168.191.112 52:54:00:ab:e8:cb
vm67 192.168.191.207 52:54:00:88:66:e7
vm67 192.168.191.241 52:54:00:88:66:e7
vm68 192.168.191.197 52:54:00:c5:e1:30
vm69 192.168.191.254 52:54:00:b6:f6:0f
vm70 192.168.191.232 52:54:00:08:7f:49
vm71 192.168.191.113 52:54:00:e7:6f:2b

0

@daff 응답을 기반으로 :

for vm in $(virsh list | grep running | awk '{print $2}'); do echo "$vm: " && virsh dumpxml $vm | grep  "vnet" | sed 's/[^'']*''\([^'']*\)''[^'']*/\t\1/g'; done

출력 예 :

vm1:
    vnet0
vm2:
    vnet1
vm3:
    vnet2
vm4:
    vnet3
    vnet4
vm5:
    vnet5

0
for vm in $(virsh list  --state-running --name); do \
echo $vm; \
virsh domifaddr $vm; \
done

출력 예 :

client1

Nombre     dirección MAC       Protocol     Address
------------------------------------------------------------------------------

vnet2      52:54:00:2c:7a:f0    ipv4         192.168.122.63/24

코드 인용문에 대한 수정 사항을 제출했지만 코드와 함께 설명을 포함해야합니다.
Cory Knutson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.