Virtualización de Escritorios (VOI versus VDI)

DIY. Hazlo tu mismo 16 de jun. de 2025

Hace ya un tiempo publiqué un artículo sobre como montar un entorno VDI para escritorios.

En este artículo, voy a intentar explicar como sería instalar una gestión de Escritorios Virtuales para que se pueda aprovechar por ejemplo en una PYME, pero mediante VOI.

En alguno de los ejemplos usaré mi-pyme.es para la empresa y ese será el nombre que debais cambiar en los ficheros de configuración que editemos para adaptarlo a vuestro uso.

Empecemos explicando que es VOI y VDI y sus diferencias.

VOI y VDI

VOI (Virtual OS Infrastructure) y VDI (Virtual Desktop Infrastructure) son dos enfoques dentro de la virtualización de escritorios, pero con diferencias clave:

  • VOI (Virtual OS Infrastructure) se basa en mantener una imagen base del sistema operativo y las aplicaciones dentro del servidor central. Cuando un usuario accede, recibe una instancia del sistema operativo personalizada según su perfil. Es ideal para entornos en los que se necesitan escritorios flexibles con actualizaciones centralizadas.
  • VDI (Virtual Desktop Infrastructure) en cambio, asigna a cada usuario su propia máquina virtual completa con sistema operativo y aplicaciones específicas. Los escritorios están alojados en un centro de datos y pueden mantenerse aislados unos de otros, ofreciendo más personalización y control.

Que opción escoger:

  • VOI: si buscas una gran flexibilidad en la gestión del sistema operativo a nivel global.
  • VDI: Si lo que necesitas es que cada usuario tenga su propio entorno virtual separado.

Sin embargo se puede tener una implementación mixta en la que tengamos un sistema operativo genérico y permitamos que el usuario disponga de unos recursos personales.

Guía de Implementación de VOI en Debian para Mi PYME

1. Infraestructura

Servidor Principal (VOI)

  • Sistema operativo: Debian
  • Virtualización: KVM/QEMU con LTSP o libvirt
  • Autenticación: LDAP
  • Protocolo de acceso: RDP o X11 forwarding
  • Gestión de imágenes: PXE boot con imágenes preconfiguradas

Servidor de Autenticación (LDAP)

  • OpenLDAP con dominio mi-pyme.es
  • Esquema de usuarios y grupos configurado en /etc/ldap/slapd.conf
  • Integración con PAM y NSS para autenticación

Servidor de Almacenamiento (NFS)

  • Sistema operativo: Debian
  • Exportación de directorios en /etc/exports:
/mnt/nfs_home *(rw,sync,no_root_squash)
  • Montaje automático en los escritorios
nfs_server:/mnt/nfs_home/%u/Documents /home/%u/Documents nfs4 defaults 0 0

2. Configuración del Servidor Debian

Paso 1: Instalación del SO

  1. Descargar Debian Server desde debian.org
  2. Durante la instalación, seleccionar solo "Servidor SSH"
  3. Configurar IP estática en /etc/network/interfaces:
auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1
  1. Aplicar cambios:
systemctl restart networking

Paso 2: Seguridad Básica

  1. Actualizar paquetes:
apt update && apt -y upgrade 

  1. Configurar ufw:
ufw allow 22/tcp ufw allow 389/tcp # LDAP ufw allow 2049/tcp # NFS ufw enable
  1. Instalar fail2ban:
apt install -y fail2ban 
systemctl enable fail2ban 
systemctl start fail2ban

3. Configuración de OpenLDAP

  1. Instalar OpenLDAP:
apt install slapd ldap-utils -y
  1. Configurar el dominio mi-pyme.es usando:
dpkg-reconfigure slapd
  1. Verificar instalación:
ldapsearch -x -LLL -b dc=mi-pyme,dc=es

4. Configuración de NFS

  1. Instalar el servidor NFS:
apt install -y nfs-kernel-server
  1. Definir puntos de montaje en /etc/exports:
/mnt/nfs_home *(rw,sync,no_root_squash)
  1. Aplicar cambios:
exportfs -a systemctl restart nfs-server

5. Instalación de la Infraestructura VOI

  1. Instalar KVM y libvirt:
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils 
  1. Crear una imagen de base para escritorios virtualizados:
qemu-img create -f qcow2 /var/lib/libvirt/images/voi.qcow2 20G
  1. Configurar LTSP si se prefiere PXE Boot:
apt install -y ltsp-server

6. Gestión de Recursos Temporales

Los usuarios tienen como recurso temporal su directorio de Descargas que se
borrará al cerrar la sesión.

  • Crear montaje temporal en /etc/fstab:
tmpfs /home/%u/Downloads tmpfs rw,size=2G,mode=1777 0 0
  • Configurar la eliminación de datos al cierre de sesión en /etc/profile.d/cleanup.sh:
#!/bin/bash 
rm -rf /home/$USER/Downloads/*
rm -rf /home/$USER/Descargas/*

Gestión de los usuarios y grupos con una interfaz gráfica

Guía de Instalación y Configuración de LDAP Account Manager (LAM) en Debian

1. Requisitos Previos

Antes de comenzar, asegúrate de tener:

  • Debian instalado y actualizado.
  • OpenLDAP configurado y en funcionamiento.
  • Apache y PHP instalados para la interfaz web.

2. Instalación de Dependencias

Actualizar el sistema

sudo apt update 
sudo apt -y upgrade

Instalar Apache y PHP

sudo apt -y install apache2 php php-cgi libapache2-mod-php php-mbstring php-common php-pear

Habilitar el módulo PHP:

sudo a2enconf php*-cgi
sudo systemctl reload apache2

Instalar OpenLDAP (si no está instalado)

sudo apt -y install slapd ldap-utils 

3. Instalación de LDAP Account Manager

Instalar LAM desde los repositorios

sudo apt -y install ldap-account-manager

Descargar la última versión manualmente (opcional)

wget https://github.com/LDAPAccountManager/lam/releases/download/8.6/ldap-account-manager_8.6-1_all.deb
sudo apt install ./ldap-account-manager_8.6-1_all.deb

4. Configuración de LDAP Account Manager

Editar la configuración de LAM

Abre el archivo de configuración:

sudo vi /etc/ldap-account-manager/config.cfg

Modifica los siguientes parámetros:

ldapServer="ldap://127.0.0.1"
ldapPort="389"
baseDN="dc=mi-pyme,dc=es"
adminDN="cn=admin,dc=mi-pyme,dc=es"

Guarda y cierra el archivo (ESC :wq)

5. Acceder a LDAP Account Manager

  • Abre tu navegador y accede a:
http://tu-servidor/lam
  • Inicia sesión con el usuario admin de LDAP.
  • Configura los perfiles de usuario y grupos según tus necesidades.

Seguridad y Accesos

Restringir acceso solo a redes internas

Edita el archivo de configuración de Apache:

sudo nano /etc/apache2/sites-available/ldap-account-manager.conf

Añade:

<Directory /var/www/html/lam>
    Require ip 192.168.1.0/24
</Directory>

Guarda los cambios y reinicia Apache:

sudo systemctl restart apache2

Configuración del Servidor PXE

Instalar el servidor PXE

sudo apt install tftpd-hpa isc-dhcp-server -y

Configurar DHCP para PXE Boot

sudo vi /etc/dhcp/dhcpd.conf

Agregar:

allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  filename "pxelinux.0";
}

Reiniciar DHCP:

sudo systemctl restart isc-dhcp-server

Hardware y Software para los equipos Cliente

1. Hardware Recomendado

Para reducir costos y facilitar mantenimiento, los clientes VOI pueden ser Thin Clients o PCs básicos con hardware suficiente para conectarse al servidor.

Como opciones económicas podemos usar:

  • Mini PC (x86 o ARM) con al menos:
    • CPU: Intel Atom, Celeron o similar (bajo consumo)
    • RAM: 4GB mínimo, 8GB recomendado
    • Almacenamiento: SSD de 64GB (solo para sistema básico)
    • Red: Ethernet 1Gbps
  • Thin Clients HP o Dell (desde 50€ en segunda mano)
  • Raspberry Pi 4 (Ideal para VOI en Linux con PXE Boot)

2. Software Necesario en el Cliente

Para conectarse y operar dentro del sistema VOI, el PC debe contar con:

  • Sistema Operativo Ligero (Debian, Ubuntu Lite, Tiny Core Linux)
  • Cliente de Escritorio Remoto (xfreerdp, Remmina o ThinLinc)
  • Configuración de PXE Boot (si usamos arranque desde red)

La opción más fácil es usar PXE Boot, donde los clientes no necesitan sistema instalado, sino que arrancan desde la red con la imagen VOI.

3. Configuración del Cliente VOI

Si el cliente tiene sistema operativo, seguiremos estos pasos:

  • Instalar Remmina (cliente RDP para VOI):
sudo apt install remmina -y
  • Configurar la conexión al servidor VOI:
    • Dirección: 192.168.1.100
    • Protocolo: X11 Forwarding o RDP
    • Autenticación con LDAP

Si se usa PXE Boot:

  • Configurar PXE Boot en BIOS
  • Asignar imagen Debian VOI desde el servidor LTSP
  • Arrancar sin necesidad de almacenamiento local

La opción más económica y sencilla sería usar Thin Clients o Raspberry Pi con PXE Boot, eliminando la necesidad de discos duros y el mantenimiento local.

Preparar una Raspberry Pi para PXE Boot

  1. Verificar Modelo Compatible
    • Raspberry Pi 3B+ (soporte nativo)
    • Raspberry Pi 4 (requiere actualización del firmware)
    • Raspberry Pi 5 (soporte mejorado)

En caso de requerir actualización del firmware, desde una SD en la que dispongamos
de una versión de Raspbian instalado ejecutaremos los siguientes comandos:

sudo apt update && sudo apt full-upgrade -y
sudo rpi-eeprom-update -a
sudo reboot
  1. Configuración PXE Boot en EEPROM
sudo vi /etc/default/rpi-eeprom-update

Cambiamos la línea:

FIRMWARE_RELEASE_STATUS="stable"

Editamos /boot/config.txt y agregamos esta línea:

program_usb_boot_mode=1

Reiniciamos:

sudo reboot
  1. Verificar estado de PXE Boot

Tras el reinicio ejecutar el siguiente comando:

vcgencmd otp_dump | grep 17:

Si devuelve 0x3020000a, el PXE Boot está habilitado.

  1. Reiniciar sin la tarjeta SD en la Raspberry Pi

Personalización del VOI para los usuarios

En un entorno VOI (Virtual OS Infrastructure), los escritorios virtualizados generalmente parten de una imagen base del sistema operativo y pueden ser configurados de forma genérica o personalizada, dependiendo de cómo se implemente la infraestructura.

  1. ¿El VOI usa un escritorio genérico o personalizado?
  • Genérico: Si todos los usuarios reciben la misma imagen base sin modificaciones, tendrán el mismo entorno y software instalado.
  • Personalizado: Se pueden aplicar configuraciones individuales mediante scripts, perfiles de usuario o herramientas de gestión centralizada.

En el caso de Mi PYME, podemos preconfigurar el escritorio con software específico y realizar personalizaciones por usuario.

  1. ¿Cómo personalizar el software instalado en el VOI?

Para personalizar el software en el VOI, podemos hacer lo siguiente:

    • Instalar Debian en una máquina virtual.
    • Agregar programas requeridos, por ejemplo:
    • Configurar preferencias (fondos de pantalla, accesos directos).
    • Convertir la máquina virtual en una imagen base con qemu-img:
    • Usar perfiles LDAP para aplicar preferencias individuales.
    • Montar scripts al inicio de sesión para configurar entorno:
  • C. Implementar software bajo demanda
    • Paquetes por grupo LDAP: Puedes definir software que solo se instala si el usuario pertenece a un grupo específico.
    • Sistemas de gestión remota: Herramientas como Ansible pueden ayudar a distribuir actualizaciones de software.

B. Personalizar configuración por usuario

echo "export GTK_THEME=Adwaita-dark" >> /etc/profile.d/theme.sh

A. Crear una imagen base con software preinstalado

sudo apt -y install libreoffice firefox gimp
qemu-img convert -f raw -O qcow2 base-voi.img /var/lib/libvirt/images/voi.qcow2

Multiples imágenes VOI

Podemos disponer de varias imágenes base, que ofrecer a los clientes.

  1. Organización de las Imágenes en el Servidor PXE

Crea directorios separados para cada imagen en /var/lib/tftpboot/:

/var/lib/tftpboot/
├── voi-desarrollo.img
├── voi-recursos-humanos.img
├── voi-oficina.img
├── voi-puesto-basico.img
├── pxelinux.cfg/
│   ├── default
│   ├── menu.cfg
  1. Configuración del Menú de Arranque PXE

Edita /var/lib/tftpboot/pxelinux.cfg/default y agrega las opciones para cada imagen:

DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
MENU TITLE Selección de VOI - Mi PYME

LABEL Desarrollo
    MENU LABEL ^Departamento Desarrollo
    KERNEL voi-desarrollo.img
    APPEND initrd=initrd.img

LABEL RecursosHumanos
    MENU LABEL ^Recursos Humanos
    KERNEL voi-recursos-humanos.img
    APPEND initrd=initrd.img

LABEL Oficina
    MENU LABEL ^Oficina General
    KERNEL voi-oficina.img
    APPEND initrd=initrd.img

LABEL PuestoBasico
    MENU LABEL ^Puesto Básico
    KERNEL voi-puesto-basico.img
    APPEND initrd=initrd.img
  1. Reinicio del Servidor PXE

Con las imágenes en el servidor y la configuración ajustada tan solo hay reiniciar:

sudo systemctl restart tftpd-hpa
  1. Personalización de Cada Imagen

Cada imagen VOI puede incluir software específico según el departamento:

* Desarrollo: vim, git, docker, python, vsCodium, etc
* Recursos Humanos: libreoffice, thunderbird, pdf-tools
* Oficina: firefox, gnome-terminal, nextcloud-client
* Puesto Básico: xfce4, chromium, evince

Para preconfigurar cada imagen:

sudo chroot /mnt/voi-desarrollo
sudo apt -y install vim git docker python3
exit

Con esta configuración, los clientes PXE podrán elegir entre varias imágenes VOI basadas en Debian, adaptadas a cada departamento.

Ajuste de imagens VOI a usar

Podemos hacer que solo ciertas Raspberry Pi reciban una imagen VOI específica, mientras que otras obtengan una diferente o ninguna.

Esto se logra mediante la asignación por dirección MAC en el servidor PXE.

Deberemos recorrer todas las Raspberry Pi para obtener su MAC.

    • En cada Raspberry Pi, ejecuta:
    • Esto mostrará la MAC del equipo. Por ejemplo: b8:27:eb:12:34:56
    • Editamos el archivo /etc/dhcp/dhcpd.conf e incluimos reglas específicas:

Configurar el servidor PXE para asignar imágenes por MAC

Obtener la dirección MAC de cada Raspberry Pi

ip link show eth0 | grep ether

host raspberry-dev
hardware ethernet b8:27:eb:12:34:56;
filename "voi-desarrollo.img";
}

host raspberry-rh {
hardware ethernet b8:27:eb:65:43:21;
filename "voi-recursos-humanos.img";
}

host raspberry-oficina {
hardware ethernet b8:27:eb:78:56:34;
filename "voi-oficina.img";
}

host raspberry-bloqueada {
hardware ethernet b8:27:eb:99:88:77;
ignore booting;
}
```

* Con esto, cada Raspberry Pi recibirá solo la imagen VOI asignada según su MAC.
  1. Reiniciar el servidor DHCP y PXE:
sudo systemctl restart isc-dhcp-server
sudo systemctl restart tftpd-hpa

Ajuste de varias VOI segun la MAC

Podemos hacer un ajuste aun más fino en el que algunas de la Raspberry puedan escoger
entre más de una imagen VOI, mientras otras solo pueden cargar una.

Realizaremos los mismos pasos que anteriormente.

  1. Averiguar la MAC de la Raspberry. Por ejemplo obtenemos la MAC: b8:27:eb:12:34:56
    • Editar /etc/dhcp/dhcpd.conf y agregamos:

Configurar el servidor DHCP para asignar un menú PXE personalizado.

host raspberry-dev {
hardware ethernet b8:27:eb:12:34:56;
next-server 192.168.1.100;
filename "pxelinux.0";
}
```

* Esto indica que la Raspberry Pi debe recibir el menú PXE.
  1. Configurar el menú PXE para ofrecer dos imágenes

En este caso en vez de usar el fichero default vamos a crear un fichero que va a contener
la MAC devuelta, en la que cambiaremos los dos puntos : por un guión -

    b8:27:eb:12:34:56 ==> b8-27-eb-12-34-56

* Crea y edita `/var/lib/tftpboot/pxelinux.cfg/b8-27-eb-12-34-56` (nombre basado en la MAC):    

```

DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
MENU TITLE Selección de VOI - Raspberry Dev

LABEL Desarrollo
MENU LABEL ^Departamento Desarrollo
KERNEL voi-desarrollo.img
APPEND initrd=initrd.img

LABEL Oficina
MENU LABEL ^Oficina General
KERNEL voi-oficina.img
APPEND initrd=initrd.img
```

  1. Reiniciar el servidor DHCP y PXE
sudo systemctl restart isc-dhcp-server
sudo systemctl restart tftpd-hpa

Gestión de Impresoras en Mi PYME

Para centralizar las impresoras en red y hacerlas accesibles a los clientes VOI, lo mejor es configurar un servidor de impresión.

Esto permite gestionar todas las impresoras desde un único punto y distribuirlas a los clientes de manera eficiente.

1. Configurar un Servidor de Impresión en Debian

  • Instalar CUPS (Common Unix Printing System)
sudo apt -y update && sudo apt install cups

  • Habilitar el acceso remoto
    • Accede a la interfaz web de CUPS: http://<IP_DEL_SERVIDOR>:631
    • Agrega las impresoras conectadas en red

2. Compartir Impresoras con los Clientes VOI

    • En cada cliente VOI, instala el cliente de CUPS:
    • Configura el servidor de impresión en /etc/cups/client.conf:
    • Reinicia el servicio de cups:

Configurar clientes para usar el servidor de impresión

sudo apt install cups-client -y
ServerName <IP_DEL_SERVIDOR>

sudo systemctl restart cups

3. Agregar impresoras en los clientes

  • Ejecuta:
lpstat -p -d

Si las impresoras aparecen, ya está todo disponible y configurado.

  1. Asignar Impresoras por Departamento o Usuario

Si quieres que solo ciertos clientes VOI accedan a determinadas impresoras, se puede lograr mediante:

  • Uso de LDAP para asignar permisos de impresión.
  • Configurar reglas en CUPS para restringir el acceso:
sudo vi /etc/cups/printers.conf

Agregamos la línea:

<Printer RecursosHumanos>
  AllowUser usuario_rh
</Printer>

Antivirus para Mi PYME

Disponemos de versiones gratuitas y versiones de pago, varias opciones de antivirus que pueden escanear tanto los ficheros compartidos en red como los archivos de los usuarios en los clientes VOI

  1. ClamAV (Linux)
    • Código abierto y gratuito.
    • Compatible con NFS, Samba y servidores de archivos.
    • Se puede integrar con cron para escaneos automáticos.
    • Instalación en Debian:
sudo apt -y install clamav clamav-daemon
# Actualizar base de datos
sudo freshclam  

# Lanzar escaneo
sudo clamscan -r /mnt/nfs_grupo/
  1. Sophos Antivirus (Linux y Windows)
    • Protección avanzada contra malware y ransomware.
    • Compatible con servidores de archivos compartidos.
    • Tiene una versión gratuita para Linux.
  2. ESET File Security (Windows/Linux)
    • Optimizado para servidores de archivos.
    • Compatible con NFS y Samba.
    • Ofrece detección proactiva de amenazas.
  3. Bitdefender GravityZone (Windows/Linux)
    • Solución empresarial con gestión centralizada.
    • Escaneo en tiempo real de ficheros compartidos.
    • Protección contra ataques avanzados.
  4. Microsoft Defender en Linux
    • Protección en tiempo real contra malware y amenazas avanzadas.
    • Escaneo de archivos compartidos en servidores NFS y Samba.
    • Integración con sistemas de seguridad empresarial.
    • Gestión centralizada desde el portal de Microsoft Defender.
  5. VirusTotal (Escaneo Online)
    • Escaneo rápido sin instalación.
    • Analiza archivos con múltiples motores antivirus.
    • Útil para verificar archivos sospechosos antes de abrirlos

Una pequeña tabla para comparar y analizar los diferentes antivirus:

Comparación de Antivirus para Linux

Antivirus Compatibilidad Debian Dificultad Instalación Efectividad Coste (licencia/mantenimiento) Total
ClamAV 10 8 7 10 35
ESET 9 7 9 6 31
Bitdefender 9 6 10 6 31
Sophos 9 7 10 4 30
Windows Defender 7 6 9 8 30

Conclusión inicial sobre los antivirus

  • ClamAV obtiene la mejor puntuación (35), destacando en compatibilidad y coste cero, aunque su efectividad es menor frente a opciones comerciales.
  • ESET y Bitdefender (31 puntos) ofrecen alta efectividad, buena compatibilidad y costos razonables.
  • Sophos y Windows Defender (30 puntos) son opciones sólidas, pero con algunas desventajas en compatibilidad o coste de mantenimiento.

Si queremos una opción gratuita y fácil de instalar y gestionar, ClamAV es la mejor alternativa.

Para mayor seguridad empresarial, ESET o Bitdefender son las opciones más robustas.

Unidades de Red para los Usuarios

Incluir una unidad de red compartida para ficheros de trabajo en grupo por departamento mejoraría la colaboración y la gestión de archivos dentro del sistema VOI de Mi PYME.

Algunas opciones para implementarlo:

1. Servidor NFS Compartido (para Linux)

    • Crear directorios por departamento:
mkdir -p /mnt/nfs_grupo/desarrollo
mkdir -p /mnt/nfs_grupo/recursos_humanos
mkdir -p /mnt/nfs_grupo/oficina
    • Configurar /etc/exports para compartirlos:
/mnt/nfs_grupo/desarrollo  *(rw,sync,no_root_squash)
/mnt/nfs_grupo/recursos_humanos  *(rw,sync,no_root_squash)
/mnt/nfs_grupo/oficina  *(rw,sync,no_root_squash)
    • Montar los recursos en cada VOI según el departamento.
  • 2. Compartición vía Samba (si hay clientes Windows)
    • Configurar smb.conf con permisos LDAP por departamento.
    • Permitir acceso solo a usuarios del grupo correspondiente.
  • 3. Nextcloud o OwnCloud (para sincronización de archivos)
    • Permitir acceso por LDAP.
    • Configurar carpetas compartidas por departamento.

Con cualquiera de estas opciones, los usuarios tendrán acceso directo a los archivos de su departamento desde su entorno VOI.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux