Como posso encontrar o IP da VM no KVM (usando Nmap)? Caso contrário, existe alguma função no Libvirt para fazer isso?
Responder1
Exemplo rápido e sujo para KVM no Centos 63 x86_64. Ping curto em segundo plano para todos os endereços IP possíveis que as VMs possam ter neste segmento
for i in {1..249}
do
ping -c 1 -n -q -r -t 1 -s 1 -W 1 192.168.100.$i > /dev/null &
done
Extraia os nomes e endereços MAC das VMs via virsh e extraia o IP da tabela ARP
for name in `virsh list | grep running | awk '{ print $2 }'`
do
printf "\n$name\n "
arp -e | grep "`virsh dumpxml $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" |
awk '{ printf $1 ; printf " " ; printf $3 }'
done
Responder2
Depois de muitas horas sujando as mãos, por acaso me deparei comesseLigação épica.
- Obtenha o endereço MAC da VM no arquivo de configuração da VM (como estou usando o KVM, consultei o arquivo .xml para obter o endereço MAC).
- Em seguida, use arp -a e obtenha todos os endereços MAC e o endereço das interfaces e armazene-os em um arquivo
- Consulte o arquivo para obter o endereço MAC da VM da etapa 1.
Responder3
Eu escrevi um script bash para fazer isso, mas também para filtrar máquinas com o nome "swarm". Você pode remover o filtro ou trocá-lo conforme necessário. (remover | grep "swarm"
) Você pode usar isso como o script completo ou copiar e colar o liner dele:
#!/usr/bin/env bash
# we make assumption that the VM's we want have the word swarm in their name. Edit for different name or to get all unfiltered names
for i in $(virsh list | grep "swarm" | awk '{print $2;}' ); do virsh domifaddr $i | sed 3q | sed '$!d' |awk '{print $4}' ; done;
As partes constituintes são comandos virsh, virsh list
para obter uma lista de todas as VMs e, em seguida, em um loop for chamando domifaddr <VM NAME>
para obter o endereço IP dela. Todo o resto é filtrar o texto apenas para o endereço IP, um por linha. Eu escrevi/executei isso no servidor Ubuntu KVM 15.10
Responder4
Usando o comando virt-cat, você pode consultar todos os arquivos em uma VM. Por exemplo, o arquivo de concessão dhcp:
virt-cat -d seu_domínio /var/lib/dhcp/dhclient.eth0.leases