KVM está estrechamente relacionado con el software de emulación QEMU. Este último suele ofrecer funciones de virtualización de hardware, mientras que Linux KVM se encarga de gestionar la asignación de recursos a los sistemas invitados. Por eso, es habitual toparse también con el término KVM/QEMU. Puesto que KVM es un componente esencial de Linux, no puede integrarse en dispositivos Windows. Sin embargo, Windows sí puede ejecutarse mediante la solución de virtualización, al igual que la mayoría de sistemas Unix, como Linux, Solaris y BSD. KVM está incluido por defecto en la mayoría de distribuciones Linux, pero debe ser activado primero.
Virtualización de hardware
Con el término virtualización de hardware se hace referencia a tecnologías que ponen a disposición componentes de hardware a través de un software con independencia de su soporte físico. El ejemplo clásico de la virtualización de hardware es la máquina virtual (MV).
Una máquina virtual es un ordenador virtual que se comporta como uno físico, tanto en lo que respecta al hardware como al sistema operativo. Las máquinas virtuales funcionan como sistemas alojados virtuales en uno o varios sistemas físicos llamados equipos anfitriones o host.En la virtualización de hardware es un hipervisor el que crea la capa de abstracción entre la base física y el sistema virtual
KVM – Virtualización en el núcleo de Linux
En el contexto empresarial y cuando se usan servidores profesionales, la virtualización ya es imprescindible. Gracias a esta tecnología, pueden ejecutarse varios sistemas operativos invitados en un mismo ordenador físico, lo cual tiene muchas ventajas.
KVM (Kernel-based Virtual Machine) es un modulo de virtualización para el núcleo de Linux, que le permite a este hacer las veces de un hipervisor, permitiendo así virtualizar sistemas operativos variados como Linux, BSD, Solaris, Windows, Haiku, MacOS, entre muchos otros.
Inicialmente creado para correr sobre arquitectura x86, ha sido portado para correr sobre arquitecturas adicionales como ARM, AI-64, PowerPC, etc.
En la actualidad se consolida como una de las opciones de virtualización más destacadas del mercado, compitiendo fuertemente con alternativas como Xen o VirtualBox. (KVM vs VirtualBox)
¿Qué es la KVM de Linux?
La llamada Kernel-based Virtual Machine (KVM) fue presentada por la compañía Qumranet en el año 2000 y a principios de 2007 ya había sido incluida en el kernel de Linux 2.6.20. El año siguiente, RedHat, distribuidor de Linux, adquirió Qumranet. Para poder seguir desarrollando esta tecnología, RedHat fundó, junto con IBM, el proyecto Open Virtualization Alliance (OVA), en el que participaron empresas como Suse, Intel y HP.
KVM está estrechamente relacionado con el software de emulación QEMU. Este último suele ofrecer funciones de virtualización de hardware, mientras que Linux KVM se encarga de gestionar la asignación de recursos a los sistemas invitados. Por eso, es habitual toparse también con el término KVM/QEMU. Puesto que KVM es un componente esencial de Linux, no puede integrarse en dispositivos Windows. Sin embargo, Windows sí puede ejecutarse mediante la solución de virtualización, al igual que la mayoría de sistemas Unix, como Linux, Solaris y BSD. KVM está incluido por defecto en la mayoría de distribuciones Linux, pero debe ser activado primero.
El funcionamiento de Linux KVM al detalle
Para entender cómo funciona esta máquina virtual, es necesario conocer en primer lugar las virtualización. La virtualización es la ejecución de uno o varios sistemas operativos completos (sistemas invitados) en un mismo dispositivo anfitrión (host). El ordenador anfitrión requiere entonces servicios de hardware adicionales: estos pueden, o bien emularse mediante software, o bien estar ubicados en otros dispositivos físicos y ser controlados mediante un hipervisor, es decir, una capa de gestión y traducción entre el hardware real y el virtual. Según el tipo de virtualización, puede ser necesario traducir los requerimientos para el hardware real o puede bastar con la asignación de las acciones necesarias como, por ejemplo, un cálculo en el procesador.
Existen los siguientes tipos de virtualización:
- Virtualización completa: el hardware es emulado en su totalidad mediante software. De este modo, no es necesaria la interacción con el hardware real, lo cual permite prescindir de los drivers correspondientes. En comparación con el resto, es la variante más lenta.
- Paravirtualización: el sistema invitado interactúa directamente con el hipervisor y necesita para ello drivers especializados.
- Paravirtualización asistida por hardware: la asistencia mediante hardware está integrada ya en el procesador, con lo que aumenta la eficiencia y se reduce el esfuerzo de adaptación que han de hacer los sistemas invitados. Los procesadores modernos de Intel (Intel-VT-x) y AMD (AMD-V) ofrecen esta función, aunque quizá necesite activarse en BIOS/UEFI.
Además, existen dos tipos de hipervisores:
- Tipo 1 (bare metal): el hipervisor se ejecuta directamente en el hardware utilizado, sin estar integrado en un sistema operativo.
- Tipo 2 (hosted): el hipervisor está integrado en el sistema operativo anfitrión y se activa desde él.
Linux KVM pertenece al segundo tipo de supervisores y utiliza la paravirtualización asistida por hardware. Lo que lo hace especial, sin embargo, es que está integrado directamente en el kernel.
¿Qué componentes forman la Kernel-based Virtual Machine?
La KVM en su conjunto está formada por varios elementos:
- (libvirt-daemon-system - libvirt)
- virt-manager - una GUI para libvirt)
- Extensión del kernel: contiene la extensión propiamente dicha, kernel.ko. Se trata de la capa de traducción entre el hardware real y el virtual. Además, incluye los módulos kvm-amd y kvm-intel, adaptados a las características de los procesadores.
- Libvirt: es la interfaz de programación (API) para comunicarse con las máquinas virtuales, que a través de ella pueden ser controladas y gestionadas. Libvirt ofrece, además, herramientas como una línea de comandos denominada virsh y la interfaz gráfica Virtual Machine Manager.
- QEMU: se trata, principalmente, de un programa autónomo para emular ordenadores y gestionar máquinas virtuales. Linux KVM utiliza esta función para emular hardware y mejora así la velocidad mediante paravirtualización. Muchas distribuciones incluyen ambos componentes en un mismo paquete de instalación.
- Kvmtool: una alternativa a QEMU que requiere menos recursos, pero que aún no ha podido desbancar a su contrincante.
- VirtIO drivers: drivers especiales para sistemas invitados que se ajustan a los requerimientos del hipervisor y hacen posible la paravirtualización.
¿Qué es QEMU? (Quick EMUlator)
QEMU es un emulador de máquinas y virtualizador genérico open source. Cuando se usa como emulador de máquinas, QEMU puede ejecutar sistemas operativos y programas compilados para una arquitectura (por ejemplo un sistema ARM) en una máquina diferente (por ejemplo una PC). Al utilizar traducción dinámica, alcanza muy buen rendimiento.
Cuando se utiliza como virtualizador, QEMU alcanza casi la performance nativa ya que ejecuta el código guest directamente en el CPU host. QEMU soporta virtualización cuando se ejecuta bajo el hipervisor Xen o a través del módulo del kernel KVM en Linux. Cuando se usa con KVM, QEMU puede virtualizar sistemas guest x86, PowerPC y S390, entre otros.
QEMU aprovecha KVM cuando ejecuta una arquitectura guest que coincide con la arquitectura host. Por ejemplo, cuando se utiliza qemu-system-x86 sobre un procesador x86 compatible, se aprovecha la aceleración de KVM (beneficiando tanto al sistema guest como al host), ya que el código guest se ejecuta directamente en el host (sin traducción).
Anteriormente, KVM mantenía su propio fork de QEMU llamado «qemu-kvm» para soportar virtualización por hardware en arquitecturas x86. Actualmente está deprecated ya que QEMU ha incorporado la funcionalidad necesaria (ver http://wiki.qemu.org/KVM).
¿Qué es libvirt?
libvirt (The virtualization API) es un conjunto de herramientas para interactuar con las capacidades de virtualización de las versiones recientes de Linux (y otros sistemas operativos), liberado bajo la licencia «GNU Lesser General Public License».
libvirt soporta un gran conjunto de tecnologías entre las que se destacan:
- KVM/QEMU
- Xen (en Linux y Solaris)
- LXC
- OpenVZ
- El kernel paravirtualizado User Mode Linux
- VirtualBox
- VMware ESX y GSX
- VMware Workstation y Player
- Microsoft Hyper-V
- IBM PowerVM
- El hipervisor Parallels
- Redes virtuales usando bridging, NAT, VEPA y VN-LINK
- Almacenamiento en discos IDE/SCSI/USB, FibreChannel, LVM, iSCSI y NFS
libvirt permite administrar hosts de forma remota utilizando cifrado TLS y certificados x509; autenticación con Kerberos y SASL; control de acceso local mediante PolicyKit; Zeroconf utilizando Avahi; administración de máquinas virtuales, redes y almacenamiento; y una API cliente portable para Linux, Solaris y Windows.
Instalando KVM
Para dar inicio con el proceso, lo primero que debemos hacer es verificar que nuestro procesador soporta las instrucciones necesarias para virtualizar con KVM. Para hacer esto ejecutamos el siguiente comando:
egrep -c '(svm|vmx)' /proc/cpuinfo
Si al ejecutar el anterior comando obtenemos un resultado igual o superior a 1, quiere decir que nuestro CPU es capaz de soportar las instrucciones y tecnología necesaria para virtualizar.
lscpu | grep Virtualization
Virtualization: VT-x
o aparecerá AMD-V si tenemos un procesador AMD
Dado lo anterior procedemos a instalar los paquetes necesarios por medio del siguiente comando:
sudo apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager
Fedora / Rocky Linux:
$ sudo dnf install qemu-kvm libvirt virt-install virt-manager virt-viewer \
edk2-ovmf swtpm qemu-img guestfs-tools libosinfo tuned
Ubuntu / Debian Linux:
$ sudo apt install qemu-system-x86 libvirt-daemon-system virtinst \
virt-manager virt-viewer ovmf swtpm qemu-utils guestfs-tools \
libosinfo-bin tuned
Arch Linux:
$ sudo pacman -S qemu-base libvirt virt-install virt-manager virt-viewer \
edk2-ovmf swtpm qemu-img guestfs-tools libosinfo
$ yay -S tuned
Descripción de los paquetes:
- qemu-kvm/qemu-system-x86/qemu-base: A user-level KVM emulator that facilitates communication between hosts and VMs.
- libvirt/libvirt-daemon-system: A daemon that manages virtual machines and the hypervisor as well as handles library calls.
- virt-install/virtinst: A command-line tool for creating guest virtual machines.
- virt-manager: A graphical tool for creating and managing guest virtual machines.
- virt-viewer: A graphical console for connecting to a running virtual machine.
- edk2-ovmf/ovmf: Enables UEFI support for Virtual Machines.
- swtpm: A TPM emulator for Virtual Machines.
- qemu-img/qemu-utils: Provides tools to create, convert, modify, and snapshot offline disk images.
- guestfs-tools: Provides a set of extended command-line tools for managing virtual machines.
- libosinfo/libosinfo-bin: A library for managing OS information for virtualization.
- tuned: A system tuning service for Linux.
Instalar drivers VirtIO para usar máquinas Windows
Los controladores VirtIO son controladores para-virtualizados para huéspedes KVM. Desafortunadamente, Microsoft no proporciona controladores VirtIO. Si desea crear una máquina virtual Microsoft Windows, necesita descargar la imagen virtio-win.iso, que contiene los controladores VirtIO para el sistema operativo Windows.
Fedora / Rocky Linux:
$ sudo wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo \
-O /etc/yum.repos.d/virtio-win.repo
Por defecto, sólo se puede instalar la versión estable. Si desea el paquete más reciente, debe habilitarlo en el repositorio. Abra el archivo /etc/yum.repos.d/virtio-win.repo y cambie enabled=0 por enabled=1 en la sección [virtio-win-latest].
$ sudo vim /etc/yum.repos.d/virtio-win.repo
...
[virtio-win-latest]
name=Latest virtio-win builds
baseurl=https://fedorapeople.org/groups/virt/virtio-win/repo/latest
enabled=1
skip_if_unavailable=1
gpgcheck=0
...
Ahora ya se puede instalar el paquete virtio-win.
$ sudo dnf install virtio-win
El archivo virtio-win.iso se guardará en el directorio /usr/share/virtio-win/
Ubuntu / Debian / Arch Linux:
Para las distribuciones Linux que no están basadas en Red Hat, puede descargar directamente la última versión de virtio-win.iso.
$ wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
Cuando creas una VM Windows, deberás adjuntar esta imagen ISO a un CD-ROM. Incluye todos los controladores VirtIO necesarios para la instalación del sistema operativo Windows.
Habilitar Modular libvirt Daemon
Hay dos tipos de demonios libvirt: monolíticos y modulares. El tipo de dæmon que utilice afecta a la granularidad con la que puede configurar los controladores de virtualización individuales.
El dæmon monolítico tradicional de libvirt, libvirtd, gestiona una amplia gama de controladores de virtualización a través de la configuración centralizada del hipervisor. Sin embargo, esto puede resultar en un uso ineficiente de los recursos del sistema.
En cambio, el nuevo libvirt modular proporciona un demonio específico para cada controlador de virtualización. Como resultado, los demonios modulares de libvirt ofrecen más flexibilidad a la hora de ajustar la gestión de recursos de libvirt.
Mientras que la mayoría de las distribuciones de Linux han empezado a ofrecer una opción modular, en el momento de escribir esto, Ubuntu y Debian siguen ofreciendo sólo un demonio monolítico.
Fedora / Rocky / Arch Linux:
$ for drv in qemu interface network nodedev nwfilter secret storage; do \
sudo systemctl enable virt${drv}d.service; \
sudo systemctl enable virt${drv}d{,-ro,-admin}.socket; \
done
Ubuntu / Debian Linux:
$ sudo systemctl enable libvirtd.service
Se recomienda reiniciar para que el KVM pueda arrancar correctamente.
$ sudo reboot
Una vez instalados los paquetes podemos verificar que el proceso de instalación ha sido exitoso de la siguiente manera:
sudo kvm-ok
Si el proceso se ha efectuado de manera correcta, deberíamos obtener la siguiente salida:
INFO: /dev/kvm exists KVM acceleration can be used
Con el comando:
virt-host-validate
Si aparece el mensaje:
QEMU: Checking for device assignment IOMMU support : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)Es que tu procesador Intel sólo admite la función VT-x (vmx) y no VT-d.
VT-d se utiliza para implementar una función conocida como PCIe Pass-through. VT-d permite que las máquinas virtuales tengan acceso directo a dispositivos de E/S específicos, como tarjetas gráficas, adaptadores de red y controladores de almacenamiento.
Ejemplo resultado:
QEMU: Checking for hardware virtualization : PASS
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support: PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support: PASS
QEMU: Checking for device assignment IOMMU support : PASS
QEMU: Checking if IOMMU is enabled by kernel : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
Debemos editar el fichero de GRUB
/etc/default/grub
Y añadir el flag para procesadores intel intel_iommu=on
GRUB_CMDLINE_LINUX=“rhgb quiet intel_iommu=on”
Para procesadores AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on"
Fedora / Rocky Linux:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo update-grub
Arch Linux:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
O añadirlo mediante:
sudo grubby --update-kernel=ALL --args=“intel_iommu=on”
Y reiniciar mediante el comando
rebootPara quitarlo:
sudo grubby --update-kernel=ALL --remove-args=“intel_iommu”
Para verificar
En una CPU Intel verifica que VT-d está habilitado:
$ dmesg | grep -i -e DMAR -e IOMMU
En una CPU AMD-Vi:
$ dmesg | grep -i -e AMD-Vi
En lo personal, recomiendo en este punto reiniciar el sistema para asegurar que todos los demonios y subsistemas estén corriendo adecuadamente.
Optimizar el host con TuneD
TuneD es un servicio de ajuste de sistemas para Linux. Ofrece una serie de perfiles de ajuste preconfigurados, cada uno optimizado para unas características de carga de trabajo únicas, como las necesidades de trabajo intensivo de la CPU, la capacidad de respuesta de rendimiento de almacenamiento/red o la reducción del consumo de energía.
Habilitar e iniciar el servicio TuneD.
$ sudo systemctl enable --now tuned
Averiguar qué perfil de TuneD está activo actualmente.
$ tuned-adm active
Current active profile: balanced
Listar todos los perfiles TuneD disponibles en tu sistema
$ tuned-adm list
Available profiles:
- accelerator-performance - Throughput performance based tuning with disabled higher latency STOP states
- aws - Optimize for aws ec2 instances
- balanced - General non-specialized tuned profile
- desktop - Optimize for the desktop use-case
- hpc-compute - Optimize for HPC compute workloads
- intel-sst - Configure for Intel Speed Select Base Frequency
- latency-performance - Optimize for deterministic performance at the cost of increased power consumption
- network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- optimize-serial-console - Optimize for serial console use.
- powersave - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest - Optimize for running inside a virtual guest
- virtual-host - Optimize for running KVM guests
Current active profile: throughput-performance
Voy a establecer el perfil a virtual-host. Esto optimiza el host para ejecutar invitados KVM.
$ sudo tuned-adm profile virtual-host
Comprueba que el perfil TuneD se ha actualizado y que el host virtual está activo.
$ tuned-adm active
Current active profile: virtual-host
Asegúrate que no hay errores.
$ sudo tuned-adm verify
Verfication succeeded, current system settings match the preset profile.
See TuneD log file ('/var/log/tuned/tuned.log') for details.
Dar al usuario permisos para todo el sistema
Libvirt proporciona dos métodos para conectarse al hipervisor qemu-kvm local.
qemu:///session
Conectarse como usuario normal a una instancia por usuario de forma local. Este es el modo por defecto cuando se ejecuta una máquina virtual como usuario normal. Esto permite a los usuarios gestionar únicamente sus propias máquinas virtuales.
$ virsh uri
qemu:///session
qemu:///system
Conectarse a una instancia del sistema como usuario root localmente. Cuando se ejecuta como root, tiene acceso completo a todos los recursos del host. Este es también el método recomendado para conectarse al hipervisor local.
$ sudo virsh uri
qemu:///system
Por lo tanto, si deseas conectartee a una instancia del sistema como un usuario normal con acceso completo a todos los recursos del host, haz lo siguiente.
Nota: Para los usuarios de Ubuntu, los permisos de todo el sistema están habilitados por defecto. Puede omitir esta sección y pasar a la siguiente.
Añade el usuario normal al grupo libvirt.
$ sudo usermod -aG libvirt $USER
Defina la variable de entorno LIBVIRT_DEFAULT_URI en el archivo local .bashrc del usuario.
$ echo "export LIBVIRT_DEFAULT_URI='qemu:///system'" >> ~/.bashrc
$ source ~/.bashrc
Comprueba de nuevo como usuario normal a qué instancia está conectado.
$ virsh uri
qemu:///system
Ahora puedes utilizar la herramienta de línea de comandos virsh y el Administrador de máquinas virtuales (virt-manager) sin sudo.
A continuación podemos crear usuario con los permisos necesarios para poder instalar y manipular maquinas virtuales en nuestro sistema. Para lograrlo simplemente ejecutamos el siguiente comando:
sudo adduser [nombre de usuario] libvirt
Añadir nuestro usuario actual:
sudo usermod -aG libvirt $USER
Después debes añade tu usuario a los grupos kvm y libvirtd:
adduser `id -un` kvm
adduser `id -un` libvirtd
Ahora estamos listos para verificar la instalación, para hacerlo simplemente ejecutamos lo siguiente:
virsh -c qemu:///system list
Una excelente y completísima Guía Oficial de RedHat:
Configurar una Red Puente (Network Bridge)
Todas las máquinas virtuales del host están conectadas por defecto a la misma red virtual de tipo NAT, denominada 'default'.
$ sudo virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
default active yes yes
Nota: Si utilizas Debian, el estado de red por defecto será inactivo y el arranque automático estará desactivado. Para activarla, ejecute el comando sudo virsh net-start default seguido de sudo virsh net-autostart default.
A las máquinas virtuales que utilicen esta red 'por defecto' se les asignará una dirección IP en el espacio de direcciones 192.168.124.0/24, con el SO anfitrión accesible en 192.168.124.1.
$ sudo virsh net-dumpxml default | xmllint --xpath '//ip' -
<ip address="192.168.124.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.124.2" end="192.168.124.254"/>
</dhcp>
</ip>
Las máquinas virtuales que utilicen esta red por defecto sólo tendrán acceso a la red saliente. Las máquinas virtuales tendrán acceso completo a los servicios de red, pero los dispositivos fuera del host no podrán comunicarse con las máquinas virtuales dentro del host. Por ejemplo, la máquina virtual puede navegar por la web pero no puede alojar un servidor web accesible desde el exterior.
Si desea que las máquinas virtuales sean directamente visibles en la misma red física que el host y visibles para dispositivos externos, debe utilizar un puente de red.
Un puente de red es un dispositivo de capa de enlace que conecta dos redes de área local en una sola red. En este caso, se utiliza un puente de software dentro de un host Linux para simular un puente de hardware. Como resultado, todas las demás máquinas físicas en la misma red física del host pueden detectar y acceder a las máquinas virtuales. La máquina virtual, por ejemplo, puede navegar por la web, y también será capaz de alojar un servidor web accesible al mundo exterior.
Importante:
- Lamentablemente, no se puede configurar un puente de red cuando se utiliza Wi-Fi.
- Debido al estándar IEEE 802.11, que especifica el uso de tramas de 3 direcciones en Wi-Fi para el uso eficiente del tiempo de aire, no se puede configurar un puente sobre redes Wi-Fi que funcionen en modo Ad-Hoc o Infraestructura.
En primer lugar, busca el nombre de la interfaz que quieres añadir al puente. En mi caso, es enp2s0.
$ sudo nmcli device status
DEVICE TYPE STATE CONNECTION
enp2s0 ethernet connected Wired connection 1
lo loopback connected (externally) lo
virbr0 bridge connected (externally) virbr0
Crea una interfaz puente. La llamaré bridge0, pero puedes llamarla como quieras.
$ sudo nmcli connection add type bridge con-name bridge0 ifname bridge0
Asigna la interfaz al puente. Voy a llamar a esta conexión 'Conexión puente 1', pero puedes llamarla como quieras.
$ sudo nmcli connection add type ethernet slave-type bridge \
con-name 'Bridge connection 1' ifname enp2s0 master bridge0
El siguiente paso es opcional. Si desea configurar una dirección IP estática, utilice los siguientes comandos; de lo contrario, omita este paso. Cambie la dirección IP y otros detalles para que coincidan con su configuración.
$ sudo nmcli connection modify bridge0 ipv4.addresses '192.168.1.7/24'
$ sudo nmcli connection modify bridge0 ipv4.gateway '192.168.1.1'
$ sudo nmcli connection modify bridge0 ipv4.dns '8.8.8.8,8.8.4.4'
$ sudo nmcli connection modify bridge0 ipv4.dns-search 'elhacker.net'
$ sudo nmcli connection modify bridge0 ipv4.method manual
Activar la conexión.
$ sudo nmcli connection up bridge0
Habilita el parámetro connection.autoconnect-slaves de la conexión puente.
$ sudo nmcli connection modify bridge0 connection.autoconnect-slaves 1
Reactiva el puente.
$ sudo nmcli connection up bridge0
Verifica la conexión. Si obtiene su dirección IP del DHCP, puede tardar unos segundos en arrendar una nueva. Ten paciencia.
$ sudo nmcli device status
DEVICE TYPE STATE CONNECTION
bridge0 bridge connected bridge0
lo loopback connected (externally) lo
virbr0 bridge connected (externally) virbr0
enp2s0 ethernet connected Bridge connection 1
$ ip -brief addr show dev bridge0
bridge0 UP 192.168.1.7/24 fe80::a345:fb7b:cb67:c778/64
Ya puedes empezar a utilizar un puente de red al crear máquinas virtuales.
Sin embargo, se recomienda que también configure una red de puente virtual en KVM para que las máquinas virtuales puedan utilizar esta interfaz de puente por nombre.
Crea un archivo XML llamado nwbridge.xml y rellénalo con la siguiente información. Llamaré a mi puente de red host nwbridge, pero puedes llamarlo como quieras.
$ vim nwbridge.xml
<network>
<name>nwbridge</name>
<forward mode='bridge'/>
<bridge name='bridge0'/>
</network>
Define nwbridge como una red virtual persistente.
$ sudo virsh net-define nwbridge.xml
Activa el nwbridge y configúralo para que se inicie automáticamente al arrancar.
$ sudo virsh net-start nwbridge
$ sudo virsh net-autostart nwbridge
Ahora puedes eliminar con seguridad el archivo nwbridge.xml. Ya no es necesario.
$ rm nwbridge.xml
Por último, compruebe que el puente de red virtual nwbridge está en funcionamiento.
$ sudo virsh net-list --all
Name State Autostart Persistent
---------------------------------------------
default active yes yes
nwbridge active yes yes
Se ha creado un puente de red. Ahora puede empezar a utilizar el puente de red nwbridge en sus máquinas virtuales. Las máquinas virtuales obtendrán sus direcciones IP del mismo pool que su máquina anfitriona.
Si alguna vez deseas eliminar este puente de red y devolverlo a su estado anterior, ejecuta los siguientes comandos.
$ sudo virsh net-destroy nwbridge
$ sudo virsh net-undefine nwbridge
$ sudo nmcli connection up 'Wired connection 1'
$ sudo nmcli connection down bridge0
$ sudo nmcli connection del bridge0
$ sudo nmcli connection del 'Bridge connection 1'
Establecer ACL en el directorio de imágenes
Por defecto, las imágenes de disco de las máquinas virtuales se almacenan en el directorio /var/lib/libvirt/images. Sólo el usuario root tiene acceso a este directorio.
$ ls /var/lib/libvirt/images/
ls: cannot open directory '/var/lib/libvirt/images/': Permission denied
Como usuario normal, es posible que desee acceder a este directorio sin tener que escribir sudo cada vez. Por lo tanto, establecer la ACL para este directorio es la mejor manera de acceder a él sin cambiar los permisos por defecto.
En primer lugar, elimina recursivamente cualquier permiso ACL existente en el directorio.
$ sudo setfacl -R -b /var/lib/libvirt/images
Concede permiso de usuario normal al directorio de forma recursiva.
$ sudo setfacl -R -m u:$USER:rwX /var/lib/libvirt/images
La "X" mayúscula de arriba indica que "ejecutar" sólo debe aplicarse a las carpetas hijas y no a los archivos hijos.
Todos los directorios y archivos existentes (si los hubiera) en /var/lib/libvirt/images/ tienen ahora permisos. Sin embargo, los nuevos directorios y archivos creados dentro de este directorio no tendrán permisos especiales. Para evitar esto, necesitamos habilitar los permisos especiales 'por defecto'. Los 'acls por defecto' sólo se pueden aplicar a los directorios y no a los archivos.
$ sudo setfacl -m d:u:$USER:rwx /var/lib/libvirt/images
Ahora revisa sus nuevos permisos ACL en el directorio.
$ getfacl /var/lib/libvirt/images
getfacl: Removing leading '/' from absolute path names
# file: var/lib/libvirt/images
# owner: root
# group: root
user::rwx
user:madhu:rwx
group::--x
mask::rwx
other::--x
default:user::rwx
default:user:madhu:rwx
default:group::--x
default:mask::rwx
default:other::--x
Intenta acceder de nuevo al directorio /var/lib/libvirt/images como usuario normal.
$ touch /var/lib/libvirt/images/test_file
$ ls -l /var/lib/libvirt/images/
total 0
-rw-rw----+ 1 madhu madhu 0 Feb 12 21:34 test_file
Ahora ya tienes acceso completo al directorio /var/lib/libvirt/images
Convertir OVA (VirtualBox) a KVM
VboxManage clonehd “path/vdi_file.vdi” “absolutepath/filename.img” -format raw
qemu-img convert -f raw -O qcow2 “absolutepath/filename_of_existing_img_file.img” “absolutepath/filename.qcow2”
Alternativas a la KVM de Linux
En el ámbito del software de código abierto y con funciones similares, XEN es la alternativa más importante. Se trata de una herramienta de virtualización que también está estrechamente relacionada con Linux, pero no se integra en el kernel.
Por su parte, en el mercado comercial, el consolidado fabricante VMWare ofrece alternativas de paravirtualización con sus servidores ESXi y de virtualización completa con su workstation. Para los usuarios particulares, además, VMWare Player es gratuito.
Virtualbox es otra alternativa de virtualización completa que puede utilizarse en todos los sistemas operativos habituales.
Microsoft también tiene una herramienta de paravirtualización para Windows: el sistema Hyper-V,
que funciona de manera similar a la KVM de Linux. Dispone de un
servidor Hyper-V de Windows dedicado y funciona de forma integrada en
los sistemas operativos del servidor. Hiper-V también está incluido en
las versiones Windows 10 Professional y Enterprise.
Fuentes:
https://www.ionos.es/digitalguide/servidores/know-how/que-es-kvm/
No hay comentarios:
Publicar un comentario