Cockpit + virt-manager
Hoy abordaremos Cockpit, una interfaz o panel web para administrar servidores Linux, donde podemos ver registros del sistema, actualización e instalación, aplicaciones, redes, almacenamiento, servicios, cuentas, diagnóstico, terminal-shell, etc., etc., etc. En resumen, una auténtica navaja suiza y todo desde el navegador.
Para instalarlo (en Ubuntu 22.04/24.04):
sudo apt install cockpit
En dependencia de su sistema, la aplicación mostrará paquetes adicionales para su instalación. Se recomienda instalarlos. Para mayor información, consulte Aplicaciones
sudo apt install cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-machines cockpit-sosreport virt-viewer sudo usermod -aG libvirt-qemu $USER
Para iniciarlo y habilitarlo en el inicio del sistema:
sudo systemctl start cockpit cockpit.socket sudo systemctl enable --now cockpit cockpit.socket
Cockpit ofrece una interfaz web amigable para administrar servidores, e incluye la creación y manejo de máquinas virtuales a través del módulo
cockpit-machines
, que se integra con QEMU/KVM. Pero, aunque Cockpit permite iniciar y visualizar máquinas virtuales desde el navegador, esta visualización depende del paquete virt-viewer
, que incluye la herramienta remote-viewer
, (del cual hablaremos más adelante) y que es muy limitada.Por tanto, se recomienda instalar los paquetes de QEMU/KVM (Cockpit y sus módulos relacionados), ya que incluye
virt-manager
(Virtual Machine Manager), una GUI más avanzada para crear, configurar y administrar VMs de forma local, editar el hardware virtual, gestionar snapshots y controlar múltiples VMs desde una sola interfaz. Si prefiere esta integración, ejecute este bash (
sudo chmod +x cockpit.sh && sudo ./cockpit.sh
): #!/bin/bash # LOCAL USER local_user=$( who | grep -m 1 '(:0)' | awk '{print $1}' || who | head -1 | awk '{print $1}' ) # Web Admin + Virtualization: Cockpit + QEMU/KVM # Virtualization Tools apt install -y qemu-kvm virt-manager virtinst libvirt-clients libvirt-daemon-system virtiofsd qemu-system qemu-guest-agent usermod -aG kvm "$local_user" usermod -aG libvirt "$local_user" systemctl enable --now libvirtd # Virtual Tools apt install -y bridge-utils libguestfs-tools ovmf # Cockpit apt install -y cockpit cockpit-storaged cockpit-networkmanager cockpit-packagekit cockpit-machines cockpit-sosreport virt-viewer systemctl enable --now cockpit cockpit.socket echo "Cockpit Access: http://localhost:9090"
Es importante que abra el puerto en el firewall:
sudo ufw allow 9090
El puerto por defecto es 9090. Verifique que esté libre:
sudo lsof -i -P -n | grep 9090
Si está en uso, puede cambiarlo, creando el siguiente archivo:
sudo mkdir -p /etc/systemd/system/cockpit.socket.d sudo touch /etc/systemd/system/cockpit.socket.d/listen.conf
Lo edita con el siguiente contenido (por ejemplo, cambiado de 9090 a 9191):
[Socket] ListenStream= ListenStream=9191 FreeBind=yes
Opcional: Puede agregar la IP:Puerto del equipo. Ejemplo:
ListenStream=192.168.0.10:9191
Guarde los cambios y reinicie:
Nota: El comando
restart
en ocasiones falla, por tanto, se recomienda usar stop/start
sudo systemctl daemon-reload sudo systemctl stop cockpit cockpit.socket sudo systemctl start cockpit cockpit.socket
Nota: Para mayor información, consulte Listen
Ahora puede acceder a la interface de cockpit por el navegador con el siguiente enlace
https://localhost:9090
(o el puerto que haya elegido). Lo primero que debe hacer es habilitar el acceso administrativo una vez esté dentro de la aplicación:
![]() |
acceso administrativo |
En este punto, es posible que comiencen a aparecer mensajes en
syslog
como este (bug 14896):
![]() |
error cockpit-tls: gnutls_handshake failed /var/log/syslog |
Y hasta tanto corrijan el bug, dos varias maneras de evitarlos:
- Acceder por http (
http://localhost:9090
) en lugar de https
- Instalar tus propios certificados
También puede usar Cockpit sobre Apache con LetsEncrypt
o sobre NGINX.
VMs
Como mencionamos, cockpit trabaja con QEMU libvirt y virtualización KVM (archivos
.qcow2
), que soporta VMs creadas en VirtualBox en formato .vdi
siendo una excelente alternativa phpVirtualBox, que se quedó sin soporte hace algunos años, aunque hay una actualización externa al proyecto y cualquier otro tipo de imagen compatible con QEMU (ver lista AQUÍ). Para hacerlo, solo tiene que importar los discos virtuales en la sección "Import VM (importar una MV)".
En Contra
- Cockpit no soporta Spice en el navegador (solo consola VNC; asumimos que por razones de compatibilidad web), entonces las VMs creadas por
virt-manager
no se podrán ver corriendo en el navegador. Entonces, si desea ver su VM ejecutándose en el navegador, sí o sí deberá crearla en Cockpit. Tenga en cuenta que si hace esto, Cockpit por defecto accederá a su visualización con la consola VNC. Y a pesar de que puedes convertir Spice en VNC desde la interfaz web, esta consola VNC de cockpit es bastante limitada (no permite redimensionar los marcos, no tiene soporte para copiar y pegar, interfaz menos fluida, prblemas con el audio, redirección usb, carpetas compartidas, etc., etc.). Por tanto, se recomienda usar un programa externo como virt-manager
o remote-viewer
:remote-viewer spice://[::1]:5901 # o remote-viewer spice://localhost:5901
![]() |
Instalación de Ubuntu: remote-viewer spice://localhost:5901 |
Notas:
-
virt-manager
permite cambiar la VM a VNC pero genera muchos errores de tipo spicevmc
, por tanto no se recomienda. - No olvide editar el archivo de configuración y descomentar (puede cambiar 0.0.0.0 por 127.0.0.1):
sudo nano /etc/libvirt/qemu.conf vnc_listen = "0.0.0.0" spice_listen = "0.0.0.0" sudo systemctl restart libvirtd sudo systemctl restart cockpit
- Puede usar
virt-manager
redimensionar la VM:
![]() |
Auto Redimensionar la VM |
Cockpit Selector
Al crear una VM, hay dos opciones:
![]() |
Debe elegir entre "system" o "user session" |
Para tener una idea de para qué sirve cada una, observemos esta tabla:
![]() |
Tabla comparativa entre system y user session
|
Así que debe elegir para qué quiere la VM. Y un detalle importante es que en
system
el disco virtual .qcow2
se crea con permisos root y en user session
no, además que los path por defecto son diferentes. Para el caso de virt-manager solo crea discos virtuales con permisos root.Entonces, si no quiere trabajar con la opción
default
que ofrece cockpit y quiere guardar el disco virtual en un path específico, deberá crear un nuevo grupo de almacenamiento y dentro el nuevo disco virtual para usarlo con tu nueva VM, pero se recomienda desactivar default
, ya que si no cockpit usará la ruta predeterminada segun el tipo de selección que realizó (ver tabla anterior). Pero hay otro problema. Un disco virtual creado por defecto mediante Cockpit o virt-manager es técnicamente sparse (disperso), ya que internamente almacena solo los bloques usados y no todo el espacio asignado. Sin embargo, durante la creación, incluso si no se activa la opción de “preasignar espacio”, estas interfaces gráficas no siempre trasladan correctamente esa configuración al sistema subyacente (libvirt y qemu-img). Esto genera un archivo que incluye bloques preasignados o metadata, lo que contradice la intención de un disco verdaderamente dinámico. El problema se manifiesta al intentar copiar dicho archivo a otra ubicación: el sistema de archivos, al no reconocer ni preservar la dispersión (sparsity) de manera automática, copia también los bloques vacíos o preasignados. Así, aunque el disco solo tenga 21 GB de datos reales, si fue creado con un tamaño lógico de 80 GB, la copia ocupará esos 80 GB completos. Esto no sucede con discos virtuales creados por VirtualBox, que sí mantienen la dispersión efectiva durante la copia.
La mejor solución es crear el disco virtual por línea de comandos (puede cambiar "preallocation=off" a "on" para conservar el tamaño completo establecido en su creación). Ejemplo:
# Para crear: qemu-img create -f qcow2 -o preallocation=off /path_to/disk.qcow2 20G # Para convertir: qemu-img convert -f qcow2 -O qcow2 -o preallocation=off /path_to/disk.qcow2 /path_to/newdisk.qcow2
Una vez creada la VM, tanto en cockpit como en virt-manager debe decidir sobre lo siguiente:
- BIOS vs UEFI. Debe elegir con cuál va a trabajar. Por defecto ambos eligen BIOS.
![]() |
BIOS vs UEFI en virt-manager |
- Si usa un SSD, agregue a la configuración de su disco virtual el parámetro
discard="unmap"
. Ejemplo: <disk type="file" device="disk"> <driver name="qemu" type="qcow2" discard="unmap"/> <source file="/path_to/w10.qcow2" index="3"/> <backingStore/> <target dev="vda" bus="virtio"/> <boot order="1"/> <alias name="virtio-disk0"/> <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/> </disk>
- Tenga en cuenta que, en lugar de SATA puede elegir bus="virtio", que tiene más integración con entornos virtualizados. Vea la siguiente tabla comparativa:
![]() |
SATA vs Virtio |
Pero, no reconocerá el disco duro virtual en el momento de la instalación de Windows, por tanto deberá descargar el driver virtio-win.iso AQUI, montar la ISO, e instalarlos.
![]() |
Añadiendo driver virtio a Win 10 |
- Y, por último, si su máquina invitada es Windows, descargar e instalar en el invitado virtio-win-guest-tools.exe, que viene siendo como el Virtualbox Guest Additions o el VMware Tools.
Y si es Linux:
sudo apt install qemu-guest-agent
Y si estás usando Cockpit en un servidor VMware:
sudo apt install open-vm-tools
Compartir Carpetas con Host
Si su invitado es Windows, Virtio-FS no es compatible con este SO, pero, a pesar de esto, aún podrá compartir carpetas del host. Hay dos métodos, pero no podrá hacerlo con cockpit sino con
virt-manager
: Por Samba: Cree la carpeta en el host y compartala vía Samba
Por WinFSP:
- Habilite la "memoria compartida" en
virt-manager
.
![]() |
Habilitando shared memory |
- Haga clic en "Agregar hardware" en la parte inferior. Seleccione "filesystem" en el panel izquierdo de la ventana "Agregar nuevo hardware". Luego, seleccione "Driver=virtiofs" en la pestaña de detalles. Haga clic en "Examinar > Examinar local" y seleccione la ruta del host de su sistema Linux. En la ruta de destino, indique el nombre de la carpeta a compartir.
![]() |
Compartiendo carpeta de host en virt-manager |
- Descargue e instale las aplicaciones spice-guest-tool, virtio-win-guest-tools y WinFSP en la VM de Windows (en virtualbox solo necesitamos uno: Guest Additions). Vea la tabla comparativa:
![]() |
comparativa spice-guest-tool, virtio-win-guest-tools, WinFSP |
- En "ejecutar" escriba
services.msc
y pulse Enter
. En la lista de servicios encontrará uno llamado VirtIO-FS Service
. Doble clic, selecciona "automático" para que inicie con el sistema y reinicie la VM. - Después del reiniciar, abra el Explorador de Windows y debería ver la carpeta compartida en Z.
O también puede usar nuestro script vtools que se encarga de hacer este proceso.
Para el invitado Linux, puede hacerlo por Samba, o seleccione la carpeta a compartir en la interfaz gráfica de la máquina virtual, sección al final "Directorios compartidos" y luego, en el invitado, ejecute (cambie los nombres de las carpetas "my_shared_folder" del invitado y "my_host_folder" del host):
sudo apt install virtiofsd libvirt-daemon-system qemu-system mkdir my_shared_folder sudo mount -t virtiofs my_host_folder ~/my_shared_folder
Otra característica muy interesante, que solo se muestra en virt-manager, es la opción "Compartibles (Shareable)", que se activa en nuestro disco duro virtual para que varias máquinas virtuales lo usen simultáneamente. Muy útil en entornos empresariales complejos, como clústeres de alta disponibilidad HA (Oracle RAC, Microsoft SQL Server Always On, o PostgreSQL con almacenamiento compartido, etc.), Clustered File Systems (GFS2, OCFS2), almacenamiento compartido en backend SAN o iSCSI, etc.
Nota Importante:
Respecto al uso de discos SSD en máquinas virtuales. Al crear la VM, se recomienda seleccionar el bus
SCSI
, ya que de lo contrario Windows podría identificar el disco como “Unrecognized” o “Unspecified”. No obstante, si estás utilizando un controlador Red Hat VirtIO SCSI Disk Device
y sabes que se trata de un SSD, puedes forzar el reconocimiento y activar el soporte TRIM manualmente con el siguiente comando: Optimize-Volume -DriveLetter C -ReTrim -Verbose
Redes Virtuales
Otra característica de virt-manager, que no tiene cockpit, es que podemos crear redes virtuales. Pulsamos en QEMU/KVM, luego en el menú Editar > Detalles de conexión y se abrirá una ventana. Vamos a la pestaña "Redes Virtuales" y ahí podemos crear nuestra red virtual en modo NAT, Enrutada, Abierta, Isolado o POOL-SR-IOV (Single Root I/O Virtualization), definir IPv4, DHCP, etc.
![]() |
Creación de una Red Virtual |
Bonding
Cockit también permite "agregación de enlaces" (bonding) en 7 modos (no confundir con "balanceo de carga"). Puede consultarlos los modos AQUÍ.
![]() |
Bond |
Aclaratoria: La agregación de enlaces (link aggregation) y el balanceo de carga (load balancing) son dos técnicas relacionadas, pero distintas, que se utilizan para mejorar la eficiencia y la disponibilidad de las redes. A continuación una tabla comparativa:
Aspecto | Link Aggregation (LA) | Trunking (VLAN) | Balanceo de Carga |
---|---|---|---|
Propósito principal | Aumentar capacidad y redundancia entre dispositivos | Transportar múltiples VLANs por un mismo enlace físico | Distribuir tráfico entre múltiples rutas/redes |
Número de enlaces físicos | Múltiples (2 o más) | Normalmente, uno (aunque puede ir sobre LA) | Múltiples conexiones WAN o rutas |
Capa OSI | Capa 2 (Enlace de datos) | Capa 2 (Enlace de datos) | Capa 3 (Red) o superior (L4/L7) |
Unidad de trabajo | Flujos individuales distribuidos entre interfaces físicas | Etiquetado de tramas para transportar varias VLANs | Flujos distribuidos según reglas (IP, puerto, tráfico, etc.) |
Tecnología típica | LACP, EtherChannel, NIC bonding | IEEE 802.1Q (VLAN tagging) | Policy-based routing, round robin, weighted routing, SD-WAN |
Requiere configuración en ambos extremos | Sí | Sí | No necesariamente (puede ser unidireccional en routers/firewalls) |
Ventaja principal | Aumenta ancho de banda en LAN y añade tolerancia a fallos | Segmentación lógica de red sin cables adicionales | Aprovecha múltiples conexiones a Internet o redes |
Casos de uso comunes | Switch ↔ Switch, Switch ↔ Servidor, NAS con múltiples NICs | Switch ↔ Switch, Switch ↔ Router o servidor con VLANs | Routers con varias WAN, servidores con múltiples interfaces externas |
¿Suma anchos de banda para un solo flujo? | ❌ No (a menos que se use MPTCP u otra técnica avanzada) | ❌ No (es segmentación lógica, no aumento de ancho de banda) | ❌ No (a menos que se use bonding o reconstrucción de sesión) |
¿Puede coexistir con otros? | ✅ Sí, puede combinarse con Trunking (trunk sobre LA) | ✅ Sí, puede viajar sobre enlaces agregados (trunk sobre LA) | ✅ Sí, pero debe manejarse cuidadosamente para evitar rutas conflictivas |
Tenga en cuenta que si va a usar agregación de enlaces ("añadiendo" o "aggregate"), el objetivo es unir dos interfaces físicas Ethernet en una interfaz virtual para aumentar el ancho de banda o la redundancia. Para ello, debe contar con un switch compatible con el protocolo IEEE 802.3ad (LACP) y los puertos que elija deben ser secuenciales (1, 2, etc...), en dependencia de la cantidad de NICs que tenga y quiera unir en una interfaz virtual. Además, es importante comprender estos conceptos:
- LAG (Link Aggregation Group): conjunto de enlaces físicos que funcionan como un enlace lógico único.
- LACP (Link Aggregation Control Protocol): protocolo estándar que automatiza la creación y gestión de LAGs, incluyendo la negociación y el monitoreo del estado de los enlaces.
En Cockpit, deberá elegir el modo 802.3ad para la agregación y puede activar la monitorización miimon (MII) para supervisar el estado de los enlaces, aunque LACP realiza monitoreo propio.
Por razones de compatibilidad, se recomienda usar la MAC de la primera interfaz física que forma parte del grupo.
Si su objetivo es balancear la carga de servicios o aplicaciones en lugar de unir interfaces físicas, recomendamos utilizar soluciones específicas de balanceo de carga a nivel de aplicación, como HAProxy, o balanceadores de carga por hardware, que son más efectivos para ese propósito.
Cockpit también se puede realizar monitoreo del canal:
![]() |
Canal |
Cockpit usa un programa externo para firewall llamado firewalld, pero se alargaría demasiado el tema y en lo personal preferimos y recomendamos iptables.
En fin; tiene un montón de cosas más, muy relevantes para los sysadmin. Cualquier duda consulten la documentación oficial. Esperamos que la disfruten.
Puede descargar nuestro script de instalación para VMs Windows: Spice + Virtio + WinFsp as a Service (QEMU/KVM) en Vault/Scripts
Post a Comment