Eu tenho várias VMs em execução no Ubuntu 9.10 via KVM + libvirt. Quero poder descobrir o endereço IP atribuído a cada host sem abrir fisicamente um "console" físico para cada máquina e invocá-lo ifconfig
.
Considerar:
rascher @ localhost: ~ $ virsh -c qemu: /// lista do sistema --todos Conectando ao uri: qemu: /// system ID Nome Estado ---------------------------------- 1 máquina1 em execução 2 machine2 em execução - machine3 desligado
Minha configuração de rede se parece com:
<network>
<name>default</name>
<uuid>1be...</uuid>
<forward mode='route' dev="eth0"/>
<bridge name='virbr0' stp='on' forwardDelay='0' />
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254' />
</dhcp>
</ip>
</network>
Então, como posso obter uma listagem que diz:
endereço IP da máquina1 = 192.168.122.16 endereço IP da máquina2 = 192.168.122.238 ...
Eu brinquei com arp
:
rascher @ localhost: ~ $ arp Endereço HWtype HWaddress Flags Mask Iface 192.168.122.238 éter 00: 16: 36: 00: 61: b0 C virbr0 192.168.122.16 éter 00: 16: 36: 52: e8: 9c C virbr0 ...
Mas isso não é mapeado para o ID de uma máquina virtual.
Existe alguma ferramenta (através da linha de comando virsh
ou virt-*
) que eu possa verificar essas informações? Ou preciso ter algum script sofisticado que seja executado em cada VM individual, verifique seu próprio IP e o reporte ao sistema operacional host?
fonte
Como tive o mesmo problema, criei o seguinte script:
fonte
Lars Kellogg-Stedman criou um conjunto de scripts para automatizar parte desse processo. Ele chama isso de "virt-utils".
Ele descreve isso em sua postagem no blog aqui: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
Ele também tem um github com alguns dos scripts que escreveu, aqui:
https://github.com/larsks/virt-utils
Basicamente, você pode simplesmente executar isso:
e você obterá uma lista de cada máquina virtual com seu "nome de domínio" no gerenciador de máquinas virtuais da libvirt. Por exemplo, na minha máquina, tenho 3 vms em execução.
Observe que este não é o 'nome do host' que a própria VM está usando, mas, para um grande número de casos de uso, será 'bom o suficiente' e resolve o problema de ter que 'ifconfig' de cada VM no território do dhcp.
A publicação no blog de Lars também mostra uma maneira de atualizar automaticamente seu próprio arquivo / etc / hosts quando a libvirt inicia e / ou interrompe novas VMs. Isso permite que você faça coisas como ssh myname @ fedora20vm ou ssh myname @ debian6vm sem precisar encontrar os endereços 192.168.122.x manualmente.
Eu adicionei alguns aprimoramentos muito menores, como um script para citar algumas opções ~ / .ssh / config (muito úteis para usar o github em VMs, via Agent Forwarding), aqui:https://github.com/donbright/virt-utils (parece ter sido excluído?)Também gostaria de observar que o método de editar o dhclient.conf para 'enviar nome do host xxxxx' funciona apenas em sistemas que realmente usam o dhclient.conf de maneira padrão. A Mageia, por exemplo, tem uma configuração incomum de como o dhclient funciona, portanto, as instruções simples não necessariamente funcionam. No entanto, com o método Lars, ele trabalha constantemente com a configuração dhcp do SO convidado, porque ele não depende da VM para enviar seu nome de host - ele está usando os 'nomes de domínio' no gerenciador de máquinas da libvirt.
fonte
pelo menos no fedora você pode obter essas informações desta maneira:
cat /var/lib/libvirt/dnsmasq/default.leases
tem uma saída semelhante a:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
embora isso seja um pouco mais do que você pediu
fonte
No Ubuntu, o dnsmasq é usado para fornecer serviços DNS e DHCP às VMs. Os processos dnsmasq no host armazenam suas concessões neste arquivo:
Este é um arquivo de texto normal e as linhas nele podem ser semelhantes a esta aqui:
Os campos de seu interesse são a terceira e a quarta coluna: o terceiro campo contém o endereço IPv4 da VM e o quarto campo contém um asterisco ou o nome do host da VM. Isso depende da resposta do DHCP enviada pelo convidado ao processo do serviço dnsmasq.
fonte
Você pode alterar a
default
definição de rede, mapear MAC para IP dentro do xml:Depois de iniciar um convidado, você pode listar o endereço MAC de todos os convidados via
De acordo com o último byte de um endereço MAC, é possível inferir o endereço IP de um convidado.
fonte
virsh list --all --mac
não funciona na versão 3.0.0