Instalación de Proxmox
Proxmox VE (Virtual Environment) es un hipervisor de tipo 1 de código abierto basado en Debian GNU/Linux. Permite gestionar máquinas virtuales (KVM) y contenedores LXC mediante una interfaz web centralizada. Es gratuito y opcionalmente ofrece planes de soporte comercial, pero la instalación y uso básico no requieren pago. El sistema está diseñado para ser manejable incluso por usuarios novatos, aunque en entornos de producción es recomendable contar con hardware fiable.
Requisitos mínimos recomendados
Antes de instalar Proxmox VE debemos asegurarnos de contar con hardware adecuado. Se recomienda:
-
CPU: Procesador de 64 bits con soporte de virtualización (Intel VT-x o AMD-V).
-
RAM: Al menos 2 GB para el sistema operativo base. En la práctica, con ZFS conviene disponer de más memoria (por ejemplo 8 GB o más), ya que ZFS utiliza aproximadamente 1 GB extra por cada TB de almacenamiento.
-
Almacenamiento: Disco de al menos 32 GB (preferiblemente SSD para mejores velocidades). Proxmox sugiere usar almacenamiento rápido y redundante (SSDs con cache o RAID por hardware con caché de escritura). Nota: ZFS no es compatible con controladoras RAID hardware; los discos deben exponerse directamente al sistema (por ejemplo mediante modos HBA/AHCI).
-
Red: Mínimo una interfaz Gigabit Ethernet. Para alta disponibilidad o clúster es recomendable contar con múltiples NICs y enlaces a 10 Gbit si es posible.
En resumen, cualquier servidor moderno con CPU x86_64 y VT-x/AMD-V funcionará, pero si usaremos ZFS es buena idea tener al menos 8 GB de RAM y unidades SSD rápidas.
Instalación
Descargamos la ISO oficial de instalación desde la página de Proxmox y la grabamos en un USB (por ejemplo con Balena Etcher o Ventoy). Arrancamos el servidor desde ese USB y elegimos Install Proxmox VE (Graphical) en el menú de inicio. Aparecerá el contrato de licencia (EULA), lo leemos y aceptamos para continuar.
A continuación seleccionamos el disco de destino. Por defecto el instalador usa todo el primer disco y elimina todo su contenido (vista resumen). Si queremos cambiarlo, pulsamos el botón Options para ajustes avanzados. En este ejemplo elegimos ZFS (RAID1) y marcamos dos discos idénticos para crear un espejo ZFS. Elegir ZFS RAID1 nos da redundancia (si falla un disco, seguimos funcionando) y beneficios como snapshots y compresión. Importante: ZFS gestiona internamente la redundancia, así que no hay que configurar RAID por hardware: de hecho, usar ZFS sobre RAID hardware puede provocar corrupción.
En el diálogo de opciones avanzadas configuramos los parámetros de ZFS deseados. Por ejemplo, podemos establecer:
-
ashift = 12: Tamaño de bloque físico = 2^12 = 4096 bytes. Esto coincide con el tamaño de sector físico de muchos discos modernos, evitando penalizaciones de rendimiento.
-
compress = zstd: Activa la compresión transparente con algoritmo Zstd. Este ofrece buena compresión con bajo impacto CPU, aprovechando la velocidad de las CPUs actuales. (Por defecto ZFS usa LZ4, que es muy rápido; Zstd comprime más sin penalizar mucho el rendimiento).
-
checksum = fletcher4: Algoritmo de checksum para integridad de datos. fletcher4 es el valor por defecto en ZFS y comprueba bloques para detectar corrupción. (Opciones más fuertes como SHA256 existen, pero fletcher4 es veloz y suficiente en la mayoría de casos).
-
copies = 1: Número de copias adicionales de cada bloque dentro del pool. Con RAID1 no necesitamos copias extra (ya tenemos una copia en cada disco), así que lo dejamos en 1. ARC max size = 8192 MB: Límite de memoria RAM para la caché ARC de ZFS. Por defecto ZFS usa tanta RAM como encuentra libre, pero es buena idea ponerle un techo (por ejemplo 8 GB) para dejar memoria al sistema. Esto ajusta cuánto cachean los metadatos/lecturas.
-
hdsize = default: Tamaño total del pool (normalmente todo el disco). Si queremos reservar espacio en disco para otros usos (swap o volúmenes adicionales), se ajusta aquí.
Estos valores se confirman con OK, luego continuamos. Después seleccionamos nuestro país, zona horaria y distribución de teclado, y pulsamos Next. Luego ponemos la contraseña del usuario root (mínimo 8 caracteres, preferiblemente combinando mayúsculas, minúsculas y símbolos) y un correo electrónico de notificaciones. Pulsamos Next.
En la siguiente pantalla configuramos la red: elegimos la interfaz, asignamos un nombre DNS (hostname) completo, la IP estática, máscara, puerta de enlace y servidor DNS. El hostname debe ser un FQDN válido (por ejemplo proxmox.midominio.com) para que los certificados y servicios internos funcionen correctamente. Se recomienda usar siempre IP fija, ya que cambios en la IP pueden romper el acceso web y la operativa de clúster. Completamos y pulsamos Next.
Finalmente vemos un resumen de todos los parámetros elegidos. Revisamos que esté todo correcto, marcamos la opción Automatically reboot after successful installation y pulsamos Install. El instalador formateará los discos, copiará los paquetes e instalará el sistema. Cuando termine, reiniciamos con el USB extraído.
Advertencia: Este proceso borra todo el contenido de los discos seleccionados, así que asegúrese de tener copias de seguridad previas.
Optimización posterior de ZFS
Tras el primer arranque accedemos a la consola de Proxmox (o por SSH) como root. Ahora podemos afinar algunos parámetros de ZFS para mejorar el rendimiento en entornos de virtualización. Proxmox incluye ZFS nativo en el kernel, y el pool raíz suele llamarse rpool (y el dataset rpool/data se usa para los discos de VMs/LXC).
Recomendamos los siguientes ajustes:
-
La compresión Zstd nivel 3 ahorra espacio sin impactar mucho la CPU (el nivel por defecto es 3):
zfs set compression=zstd-3 rpool -
Desactivar atime evita escrituras inútiles cada vez que se lee un archivo, mejorando rendimiento.
zfs set atime=off rpool
Procedemos con los mismos ajustes para el almacenamiento de las máquinas virtuales y contenedores LXC:
zfs set compression=zstd-3 rpool/data
zfs set atime=off rpool/data
Ajustamos recordsize a 16K puede acelerar I/O pequeño típico de sistemas operativos y bases de datos. Nota: El valor por defecto es 128K, más adecuado para archivos grandes secuenciales. Dependiendo del tipo de carga (ficheros grandes vs muchos I/O pequeños) podría convenir un valor distinto (hasta 1M para almacenamiento de ficheros masivos).
zfs set recordsize=16K rpool/data
Nota: El valor recordsize=16K mejora el rendimiento en máquinas virtuales y bases de datos (muchas operaciones pequeñas), pero puede no ser óptimo para almacenamiento de archivos grandes, donde valores mayores (como 1M) pueden ser más eficientes.
Finalmente, como indica la documentación, ZFS «funciona mejor con mucha memoria: 4 GB más 1 GB por cada TB bruto», por lo que con mayores volúmenes conviene aumentar RAM.
Ajustes iniciales
Repositorios y actualización
Tras reiniciar e ingresar por la interfaz web (https://IP-nodo:8006), lo primero es ajustar los repositorios. Por defecto Proxmox apunta a repositorios enterprise que requieren suscripción. Si no tenemos suscripción, vamos a Datacenter → Repositories y desactivamos los repositorios enterprise existentes. Luego añadimos el repositorio pve-no-subscription (y opcionalmente ceph-squid-no-subscription para Ceph) pulsando Add y eligiendo No-Subscription.
Luego actualizamos el sistema: en la interfaz vamos a Nodo → Updates y pulsamos Refresh. Después Upgrade para instalar todos los parches disponibles. Aparecerá una ventana de confirmación; aceptamos con Y y esperamos a que finalice. Finalmente reiniciamos el nodo (puede hacerse por web o reboot en consola). Esto garantiza que tengamos un sistema con las últimas correcciones de seguridad y estabilidad.
Certificados ACME (Let's Encrypt)
ACME es un protocolo que permite obtener y renovar certificados SSL/TLS automáticamente. En este caso, utilizaremos Let's Encrypt, que ofrece certificados gratuitos y ampliamente reconocidos.
Para evitar los avisos de certificado SSL autofirmado, usamos ACME Encrypt integrado en Proxmox. En Datacenter → ACME → Accounts creamos una cuenta: clic en Add, ponemos un nombre, un correo de contacto, elegimos el Directory Let’s Encrypt V2 y aceptamos los términos (TOS). Registramos la cuenta.
Configuración plugin DNS
Luego, en Datacenter → ACME → Challenge Plugins añadimos un plugin DNS para validación DNS. Pulsamos Add, elegimos un nombre de plugin, retardo de validación y en API DNS seleccionamos nuestro proveedor (por ejemplo Cloudflare Managed DNS). Introducimos las credenciales según lo requiera (por ejemplo, API token de Cloudflare en el campo CF_Token). Este método (DNS challenge) permite obtener certificados incluso si el nodo no es accesible por Internet, sin abrir puertos HTTP/80. Proxmox soporta muchos proveedores DNS, por lo que se adapta a la mayoría de entornos.
En este ejemplo se ha usado Cloudflare, pero es posible usar los siguientes proveedores:
| 1984hosting | acme-dns | acmeproxy | Active24 |
| Alwaysdata | Alibaba Cloud DNS | alviy | anx |
| artfiles | arvan | AuroraDNS | autodns |
| Amazon Route53 (AWS) | azion | azure | beget |
| bookmyname | bunny | Cloudflare Managed DNS | clouddns |
| cloudns | cn | conoha | constellix |
| cpanel | curanet | cyon | da |
| ddns | desec | df | DigitalOcean DNS |
| dnsexit | dnshome | dnsimple | dnsservices |
| doapi | domeneshop | dp | dpi |
| dreamhost | duckdns | durabledns | dyn |
| dynu | dynv6 | easydns | edgecenter |
| edgedns | euserv | exoscale | fornex |
| freedns | freemyip | gandi_livedns | gcloud |
| gcore | GoDaddy | geoscaling | googledomains |
| he | he_dns | hetzner | hexonet |
| hostingde | huaweicloud | infloblox | infomaniak |
| internetbs | INWX | ionos | ionos_cloud |
| ipv64 | ispconfig | jd | joker |
| kapper.net | kas | kinghost | Knot / knsupdate (RFC 2136) |
| la | leaseweb | lexicon | limacity |
| linode | linode_v4 | loopia | lua |
| maradns | me | miab | mijnhost |
| misaka | myapi | mydevil | mydnsjp |
| mythic_beasts | namecheap | namecom | namesito |
| nanelo | nederhost | neodigit | netcup |
| netlify | nic | njalla | nm |
| nsd | nsone | nsupdate (RFC 2136) | nw |
| oci | omglol | one | online |
| openprovider | openstack | opnsense | OVH |
| PowerDNS server | pleskxml | pointhq | Porkbun |
| rackcorp | rackspace | rage4 | rcode0 |
| regru | scaleway | schlundtech | selectel |
| selfhost | servercow | simply | technitium |
| tele3 | tencent | timweb | transip |
| udr | ultra | unoeuro | variomedia |
| veesp | vercel | vscale | vultr |
| websupport | wesdt_cn | World4You | yandex360 |
| yc | zilore | zone | zoneedit |
| zonomi |
Obtención del certificado
Finalmente, en Node → Certificates → ACME agregamos el certificado: Add, seleccionamos Challenge Type DNS y el dominio completo que deseamos certificar. Pulsamos Create. Después editamos ese certificado, seleccionamos nuestra cuenta ACME registrada y aplicamos. Aparecerá un botón Request certificate now; al pulsarlo, Proxmox gestionará automáticamente la petición a Let’s Encrypt y la instalación del certificado. En caso necesario, actualizamos la zona DNS para apuntar al nodo o ajustamos /etc/hosts. A partir de entonces, se renovará automáticamente cuando falten días para expirar. Con esto la interfaz web mostrará un certificado válido y evitaremos advertencias de seguridad.
Gestión de notificaciones
Proxmox incluye un sistema de notificaciones para avisos del sistema. En Datacenter → Notifications configuramos destinos de notificación (Gotify, sendmail, correo SMTP y Webhook) pulsando Add. Cada destino pide datos (URL de Gotify, servidor SMTP, etcétera) según corresponda. Tras guardar, podemos probarlo con el botón Test para verificar que funciona.
Actualización disponible
Luego vamos a la pestaña Notification Matchers. Allí creamos reglas que filtran eventos concretos. Por ejemplo, si queremos recibir una alerta cuando haya actualizaciones disponibles, añadimos una regla con un nombre (por ejemplo ActualizacionesDisponibles), lo activamos, y en Match Rules añadimos una regla: Type = Exact, Field = Notification type, Value = package-updates. Con esto, cada vez que el sistema genere una notificación de tipo package-updates, se disparará el destino configurado. Este mecanismo es muy útil para no depender de revisar manualmente la interfaz continuamente.
Gestión de usuarios y permisos
Para mejorar la seguridad, se recomienda no usar el usuario root para tareas diarias. Es preferible crear usuarios con permisos específicos. Esto reduce el riesgo de errores accidentales y mejora la seguridad, ya que permite aplicar el principio de mínimo privilegio.
Dominios
En Datacenter → Permissions → Realms vemos los dominios de autenticación. Por defecto hay dos: pam (usuarios locales de Linux) y pve (servidor de autenticación propio de Proxmox). El dominio pve se usa típicamente para administrar usuarios del propio Proxmox y se vuelve esencial en clúster. Podemos editar las propiedades del dominio (por ejemplo obligar segundo factor de autenticación, cambiar la descripción). En la interfaz aparecen descripciones en inglés como Linux PAM standard authentication o Proxmox VE authentication server; podemos traducirlas a español para claridad (por ejemplo: Autenticación estándar Linux PAM y Servidor de autenticación de Proxmox VE).
Usuarios
Luego, en Datacenter → Permissions → Users creamos nuevos usuarios en el dominio deseado (por ejemplo en pve). Al pulsar Add, asignamos nombre de usuario, contraseña, email, y definimos el dominio (realm) si es necesario.
Nota: En entornos más complejos, es recomendable gestionar permisos mediante roles y grupos en lugar de asignarlos directamente a usuarios individuales.
Permisos del usuario
Finalmente, asignamos permisos a los usuarios: en Permissions pulsando Add y seleccionando User Permissions, selecionando el usuario, el camino (por ejemplo /) y el rol (por ejemplo Administrator o roles más restrictivos según necesidad). Es recomendable usar roles/grupos y el principio de mínimo privilegio en lugar de dar acceso ilimitado a todos.
Recomendaciones de seguridad
Tras la instalación es buena idea reforzar la seguridad básica:
-
Acceso remoto: No expongamos directamente el puerto 8006 (web) o el SSH a Internet sin protección. Lo ideal es que el acceso sea vía VPN (por ejemplo WireGuard u OpenVPN), o bien restringirlo a rangos IP de confianza.
-
SSH: En
/etc/ssh/sshd_configdeshabilitamos el acceso por contraseña (PasswordAuthentication no) y permitimos solo key-based authentication. Esto previene ataques de fuerza bruta. -
Actualizaciones periódicas: Aunque hay notificaciones automáticas, conviene planificar aplicar actualizaciones de seguridad con regularidad. Mantener el sistema al día cierra vulnerabilidades conocidas.
Pasos siguientes recomendados
Con Proxmox instalado, podemos avanzar configurando almacenamiento extra (LVMs, NFS, iSCSI, etc.), definiendo planes de backup automáticos (vzdump), usando snapshots de ZFS para proteger estados de VMs, desplegando nuestras primeras máquinas virtuales y contenedores LXC, y activando el firewall integrado. Estos temas dependen del uso específico, pero la base ya está lista para crecer de forma segura.
Conclusión
Siguiendo estos pasos hemos obtenido un servidor Proxmox VE funcional y optimizado: instalamos sobre ZFS con RAID1 para alta disponibilidad de datos, ajustamos parámetros de rendimiento (compresión y caché de ZFS), configuramos certificados TLS válidos con ACME, y preparamos el sistema para su gestión segura (repositorios, usuarios, notificaciones). Todo ello se ha explicado detalladamente para un público técnico pero novato, con explicaciones paso a paso y citando la documentación oficial. A partir de aquí, el entorno Proxmox puede ampliarse a un clúster multidispositivo, albergando cargas de trabajo desde entornos domésticos hasta infraestructuras profesionales, con la confianza de contar con buenas prácticas de seguridad y mantenimiento.