Existe uma maneira de determinar qual interface virtual pertence a uma máquina virtual em um host kvm?

7

Estou usando o qemu / kvm com rede interligada. Na máquina host, existem várias interfaces de rede "vnetX" sem IP. Eu estou procurando uma maneira de saber qual vnetX pertence a uma máquina virtual.

Eu tentei combinar os valores do endereço MAC nessas interfaces com os MACs nas máquinas virtuais (ou o XML que os define), mas não corresponde.

Há brctl show que mostra as interfaces vnet que pertencem a uma ponte, mas isso não é uma informação útil.

Existe uma maneira de saber essa relação? Thx !!

    
por theist 06.06.2012 / 16:28

7 respostas

12

Que tal isso (exemplo para vnet13 ):

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

Aqui usamos virsh dumpxml para mostrar propriedades dinâmicas sobre a VM, que não estão disponíveis na definição XML estática da VM em /etc/libvirt/qemu/foo.xml. Qual interfacevnetX está conectada a qual VM é uma propriedade dinâmica. O mesmo vale para os endereços MAC da VM.

    
por 06.06.2012 / 17:07
3

Experimente virsh dumpxml $domain e você verá algo como:

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

o alias name é o que é usado na linha de comando do qemu-kvm, portanto, se você executar ps -ef |grep qemu|grep net1 do meu exemplo, verá a sintaxe de comando real usada para essa interface.

    
por 07.06.2012 / 08:23
1

Cada uma das soluções dadas acima pressupõe que as VMs estão sendo gerenciadas pelo libvirt. É bem possível rodar VMs do QEMU sem isso, nesse caso você não pode usar o virsh ou olhar o XML para encontrar a resposta.

No caso de executar VMs do QEMU a partir de uma linha de comando "bruta":

  1. tcpdump -i tap0 -f 'icmp' (substitua a interface de toque em que você está interessado)

  2. Pingue cada VM de candidato até ver os pacotes no rastreamento. A interface que você está rastreando quando os pacotes ICMP aparecem é a que você está procurando!

Por outro lado, você pode iniciar um ping para uma determinada VM e, em seguida, tcpdump cada interface de toque, por vez, até que um "acenda". Depende se você está interessado em encontrar a VM que corresponda à interface de toque ou à interface de toque que corresponda à VM.

    
por 13.09.2017 / 21:37
0

O endereço MAC das interfaces vnetX pertence ao host, não ao convidado. brctl showmacs br0 mostrará os MACs detectados pela ponte, mas você precisará cruzar a referência do número da porta com a lista de interfaces de brctl show .

    
por 07.06.2012 / 07:52
0

Corresponda endereços IP do cache do Arp para a VM

# 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

Exemplo de saída:

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
    
por 17.11.2016 / 01:48
0

Com base na resposta @daff:

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

Exemplo de saída:

vm1:
    vnet0
vm2:
    vnet1
vm3:
    vnet2
vm4:
    vnet3
    vnet4
vm5:
    vnet5
    
por 16.03.2018 / 16:15
0
for vm in $(virsh list  --state-running --name); do \
echo $vm; \
virsh domifaddr $vm; \
done

Exemplo de saída:

client1

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

vnet2      52:54:00:2c:7a:f0    ipv4         192.168.122.63/24
    
por 27.03.2018 / 12:41