Una vez instalado Proxmox VE en un nodo host, el verdadero trabajo consiste en convertirlo en VPS que pueda vender: crear muchas VM rápidamente, dar a cada una su propia IP y contraseña, aplicar los límites del plan y asegurarse de que ningún cliente pueda apropiarse de la IP de otro. Esta guía cubre esa parte operativa: clonar VPS desde una plantilla cloud-init, configurar automáticamente la IP, la contraseña y la clave SSH, limitar la CPU, la E/S de disco y el ancho de banda, impedir el robo de IP con el firewall de Proxmox, dar a los clientes su propio acceso a la consola y un script para crear VPS en masa.
Un clon completo (full clone) es independiente de la plantilla, por lo que puede eliminar o actualizar la plantilla más adelante. Los clones enlazados (linked clones) son más rápidos y ocupan menos, pero cada clon depende del disco de la plantilla.
# Template 9000 -> new VPS 101 (full clone on local-lvm)
qm clone 9000 101 --name vps101 --full 1 --storage local-lvm
# Plan resources: 2 vCPU, 2 GB RAM (no ballooning), 40 GB disk
qm set 101 --cores 2 --memory 2048 --balloon 0
qm resize 101 scsi0 40G
qm set 101 --onboot 1
Cloud-init escribe la configuración de red y los datos de acceso en el VPS durante el primer arranque, de modo que el cliente recibe un servidor listo sin que usted tenga que iniciar sesión en él.
qm set 101 \
--net0 virtio,bridge=vmbr0,firewall=1 \
--ipconfig0 ip=203.0.113.11/24,gw=203.0.113.1 \
--nameserver "1.1.1.1 8.8.8.8" \
--ciuser root \
--cipassword 'Ch4nge-This-Password' \
--sshkeys /root/customer101.pub
qm start 101
qm guest cmd 101 network-get-interfaces # works once qemu-guest-agent is running in the VPS
Si cambia los valores de cloud-init más adelante, regenere la unidad de cloud-init (qm cloudinit update 101) y reinicie el VPS. Para IPv6, añada ip6=2001:db8:100::11/64,gw6=2001:db8:100::1 a --ipconfig0.
# CPU: at most 2 cores of CPU time in total, normal scheduling weight
qm set 101 --cpulimit 2 --cpuunits 100
# Bandwidth: rate is in MB/s on the virtual NIC (12.5 MB/s = 100 Mbps)
qm set 101 --net0 virtio,bridge=vmbr0,firewall=1,rate=12.5
# Disk I/O: repeat the disk exactly as shown by "qm config 101", adding the limits
qm config 101 | grep scsi0
qm set 101 --scsi0 local-lvm:vm-101-disk-0,size=40G,iops_rd=2000,iops_wr=2000,mbps_rd=200,mbps_wr=150
Tenga en cuenta que --net0 reemplaza la definición completa de la NIC: conserve la misma dirección MAC copiándola de qm config (virtio=BC:24:11:...); de lo contrario, el VPS recibirá una MAC nueva y puede quedarse sin red si su proveedor upstream vincula las IP a direcciones MAC. Los límites de disco evitan que un VPS ruidoso ralentice a todos los demás VPS del mismo disco.
Sin filtrado, un cliente con acceso root puede configurar cualquier IP libre de su bloque y apropiarse de ella. El filtro de IP (IP filter) del firewall de Proxmox descarta los paquetes de un VPS cuya dirección de origen no figure en su lista de direcciones permitidas. Primero debe activarse el firewall a nivel de datacenter; configure allí la política de entrada en ACCEPT para no quedarse sin acceso al host.
# /etc/pve/firewall/cluster.fw (datacenter level)
[OPTIONS]
enable: 1
policy_in: ACCEPT
# /etc/pve/firewall/101.fw (VPS 101)
[OPTIONS]
enable: 1
ipfilter: 1
macfilter: 1
policy_in: ACCEPT
policy_out: ACCEPT
[IPSET ipfilter-net0]
203.0.113.11
2001:db8:100::11
pve-firewall compile >/dev/null && pve-firewall restart
pve-firewall status
La NIC debe tener firewall=1 (configurado en el paso 2). macfilter (activado de forma predeterminada) impide que un VPS cambie su dirección MAC. Pruébelo desde dentro del VPS: si añade una segunda IP no asignada y hace ping hacia el exterior desde ella, ahora debería fallar.
Un cliente que rompe la red de su VPS sigue necesitando la consola para repararla. Cree un usuario de Proxmox que solo pueda ver y controlar su propio VPS:
pveum user add customer101@pve --password 'Another-Strong-Pass' --comment "VPS 101"
pveum acl modify /vms/101 --users customer101@pve --roles PVEVMUser
El cliente inicia sesión en https://HOST_IP:8006 con el realm "Proxmox VE authentication server" y solo ve el VPS 101, con consola, control de encendido y sus propias gráficas. Para una tienda totalmente automatizada con facturación, el siguiente paso es un panel como Virtualizor o WHMCS con un módulo de Proxmox.
El siguiente script lee una línea por VPS (ID, IP, RAM en MB, núcleos, disco) y los crea a partir de la plantilla con la configuración anterior. Genere contraseñas aleatorias y guárdelas en un lugar seguro para entregarlas a los clientes.
cat > /root/vps-list.txt <<'EOF2'
101 203.0.113.11 2048 2 40G
102 203.0.113.12 2048 2 40G
103 203.0.113.13 4096 4 80G
EOF2
cat > /root/make-vps.sh <<'EOF2'
#!/bin/bash
set -e
TEMPLATE=9000; GW=203.0.113.1; PREFIX=24
while read -r ID IP RAM CORES DISK; do
[ -z "$ID" ] && continue
PASS=$(openssl rand -base64 12)
qm clone $TEMPLATE $ID --name vps$ID --full 1 --storage local-lvm
qm set $ID --cores $CORES --memory $RAM --balloon 0 --onboot 1 --cpulimit $CORES
qm resize $ID scsi0 $DISK
qm set $ID --net0 virtio,bridge=vmbr0,firewall=1,rate=12.5 \
--ipconfig0 ip=$IP/$PREFIX,gw=$GW --nameserver "1.1.1.1 8.8.8.8" \
--ciuser root --cipassword "$PASS"
printf '[OPTIONS]\nenable: 1\nipfilter: 1\nmacfilter: 1\npolicy_in: ACCEPT\npolicy_out: ACCEPT\n\n[IPSET ipfilter-net0]\n%s\n' "$IP" > /etc/pve/firewall/$ID.fw
qm start $ID
echo "$ID $IP root $PASS" >> /root/vps-credentials.txt
done < /root/vps-list.txt
chmod 600 /root/vps-credentials.txt
EOF2
chmod +x /root/make-vps.sh && /root/make-vps.sh
lvs o zfs list; un thin pool lleno puede corromper los discos de los VPS.Compruebe la IP, el prefijo y la puerta de enlace en qm config, que el puente sea el que transporta su bloque de IP y que el IPSet del filtro de IP contenga la IP del VPS. Si su proveedor upstream vincula las IP a direcciones MAC, los VPS en modo puente necesitan una configuración enrutada o MAC virtuales; consulte configuración de red de Proxmox VE para nodos host.
Algunas imágenes desactivan el inicio de sesión de root con contraseña por SSH. Inicie sesión con la clave SSH o a través de la consola y permita el inicio de sesión con contraseña en /etc/ssh/sshd_config si lo desea, o incluya ese cambio directamente en su plantilla.
Sí, con una plantilla de Windows preparada con cloudbase-init o sysprep, pero las licencias de Windows son responsabilidad suya: cada VPS necesita una licencia válida de Windows.
¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor host, la versión de Proxmox VE, el ID de la VM con la salida de qm config ID y el mensaje de error completo para que podamos localizar el problema más rápido.