Permitir comunicación entre una máquina virtual y el hipervisor con KVM
Entre las distintas opciones de virtualización para un entorno de desarrollo, como Docker, VirtualBox, etc. podemos elegir KVM. Esta excelente herramienta nos permite tener servidores completos corriendo como máquina virtual, emulando completamente un servidor de producción, lo que permite tener un escenario casi idéntico al que tendremos en el momento del deployment.
El problema es que dependiendo la configuración, es posible que no tengamos acceso de red a las VMs (máquinas virtuales) desde el hipervisor, lo que hace las máquinas virtuales totalmente inútiles como entorno de desarrollo . Esto me ha implicado horas de googleo, lectura de documentación y foros y experimentación infructuosa hasta que dí con la solución.
Lo primero que hay que hacer es crear una red aislada con libvirt, a través de un archivo XML con la configuración de la red, como en el siguiente ejemplo.
1.- Crear un archivo /tmp/isolated.xml
con el contenido:
<network> <name>isolated</name> <ip address='192.168.254.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.254.2' end='192.168.254.254' /> </dhcp> </ip> </network>
Si ya estás usando la red 192.168.254.0/24, podés usar otra.
2.- Definir la red con el comando virsh net-define /tmp/isolated.xml
.
3.- Establecer el inicio automático de la red en virsh usando virsh net-autostart isolated
.
4.- Iniciar la red virsh net-start isolated
.
5.- Editar la configuración de cada VM que use macvtap para su conexión de red y agregar una nueva <interface>
en la sección <devices>
, parecido a lo siguiente:
<interface type='network'> <source network='isolated'/> <model type='virtio'/> </interface>
6.- Apagar y prender las VMs.
Ahora ya se puede “ver” la VM desde el hipervisor sin problemas.
Fuente: RedHat documentation