Tengo varias máquinas virtuales ejecutándose en Ubuntu 9.10 a través de KVM + libvirt. Quiero poder averiguar la dirección IP que se ha asignado a cada host sin abrir físicamente una "consola" física para cada máquina e invocar ifconfig
.
Considerar:
rascher @ localhost: ~ $ virsh -c qemu: /// lista del sistema --todos Conexión a uri: qemu: /// system Id Nombre Estado ---------------------------------- 1 máquina1 corriendo 2 machine2 funcionando - máquina3 apagada
Mi configuración de red se ve así:
<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>
Entonces, ¿cómo puedo obtener una lista que diga:
máquina1 dirección IP = 192.168.122.16 dirección IP de machine2 = 192.168.122.238 ...
Jugué con arp
:
rascher @ localhost: ~ $ arp Dirección 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 ...
Pero esto no se asigna a la identificación de una máquina virtual.
¿Hay alguna herramienta (a través de la línea de comando virsh
o virt-*
) que pueda determinar esta información? ¿O necesito tener un script sofisticado que se ejecute en cada VM individual, verifique su propia IP e informe al sistema operativo host?
Tuve el mismo problema, así que creé el siguiente script:
fuente
Lars Kellogg-Stedman ha creado un conjunto de scripts para automatizar parte de este proceso. Lo llama 'virt-utils'.
Lo describe en su publicación de blog aquí: http://blog.oddbit.com/2013/10/04/automatic-dns-entrie/
También tiene un github con algunos de los guiones que escribió, aquí:
https://github.com/larsks/virt-utils
Básicamente puedes ejecutar esto:
y obtendrá una lista de cada máquina virtual por su "nombre de dominio" dentro del administrador de máquina virtual de libvirt. Por ejemplo, en mi máquina tengo 3 vms en ejecución.
Tenga en cuenta que este no es el 'nombre de host' que la VM está utilizando, pero para una gran cantidad de casos de uso, será 'lo suficientemente bueno' y resuelve el problema de tener que 'ifconfig' desde dentro de cada VM en dhcp land.
La publicación en el blog de Lars también muestra una forma de 'actualizar automáticamente' su propio archivo / etc / hosts a medida que libvirt inicia y / o detiene las nuevas máquinas virtuales. Esto le permite hacer cosas como ssh myname @ fedora20vm o ssh myname @ debian6vm sin tener que encontrar las direcciones 192.168.122.x a mano.
He agregado algunas mejoras muy pequeñas, como un script para escupir algunas opciones de ~ / .ssh / config (muy muy útil para usar github en máquinas virtuales, a través del reenvío de agentes), aquí:https://github.com/donbright/virt-utils (¿parece estar eliminado?)También me gustaría señalar que el método de edición de dhclient.conf para 'enviar nombre de host xxxxx' solo funciona en sistemas que realmente usan dhclient.conf de manera estándar. Mageia, por ejemplo, tiene una configuración inusual de cómo funciona su cliente, por lo que las instrucciones simples no necesariamente funcionan. Sin embargo, con el método de Lars, funciona independientemente de la configuración dhcp del sistema operativo invitado, porque no confía en la VM para enviar su nombre de host; está usando los 'nombres de dominio' dentro del administrador de máquina de libvirt.
fuente
al menos en fedora puedes obtener esa información de esta manera:
cat /var/lib/libvirt/dnsmasq/default.leases
tiene una salida similar a:
1412006226 52:54:00:fe:b3:c0 192.168.122.117 coreos0 01:52:54:00:fe:b3:c0
aunque eso es un poco más de lo que pediste
fuente
En Ubuntu, dnsmasq se usa para proporcionar servicios de DNS y DHCP a las máquinas virtuales. Los procesos de dnsmasq en el host almacenan sus arrendamientos en este archivo:
Este es un archivo de texto normal y las líneas pueden ser similares a las siguientes:
Los campos de interés para usted son la tercera y la cuarta columna: el tercer campo contiene la dirección IPv4 de la VM y el cuarto campo contiene un asterisco o el nombre de host de la VM. Esto depende de la respuesta de DHCP enviada por el invitado al proceso del servicio dnsmasq.
fuente
Puede cambiar la
default
definición de red, asignar MAC a IP dentro del xml:Una vez que inicie un invitado, puede enumerar la dirección MAC de todos los invitados a través de
Según el último byte de una dirección MAC, puede inferir la dirección IP de un invitado.
fuente
virsh list --all --mac
no funciona en la versión 3.0.0