Virtualización (Proxmox / KVM)

Cómo vender VPS con Proxmox VE: clonación masiva, cloud-init, límites y filtrado de IP

7 pasos 19 min de lectura 79 vistas 0
Contenido

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.

Esta guía da por hecho que Proxmox VE está instalado con un puente (bridge) funcional (consulte instalar Proxmox VE en un servidor dedicado) y que dispone de una plantilla cloud-init (consulte crear una plantilla cloud-init). Pruébelo todo en un solo VPS antes de crear decenas, y mantenga el acceso a la consola IPMI/KVM del host por si un cambio de red le deja sin acceso.

Paso 1: Clonar un VPS desde la plantilla

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

Paso 2: Configurar IP, contraseña y clave SSH con cloud-init

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.

Paso 3: Aplicar los límites del plan

# 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.

Paso 4: Impedir el robo de IP con el firewall de Proxmox

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.

Paso 5: Dar a los clientes su propio acceso a la consola

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.

Paso 6: Crear VPS en masa

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

Paso 7: Vigilar el host

  • RAM: mantenga la RAM total asignada por debajo de la RAM física menos 4–8 GB para el host y ZFS/caché. Sobreasignar memoria es la forma más rápida de que todos los VPS vayan lentos.
  • Disco: el almacenamiento con aprovisionamiento ligero (LVM-thin, ZFS) puede sobreasignarse, pero vigile el uso real con lvs o zfs list; un thin pool lleno puede corromper los discos de los VPS.
  • Abuso: un solo VPS que envíe ataques o spam puede hacer que todo su bloque de IP acabe en listas negras. Consulte detectar VPS abusivos en un nodo host.
  • Copias de seguridad: prográmelas como se describe en copias de seguridad e instantáneas en Proxmox VE.

Preguntas frecuentes

¿El nuevo VPS no tiene red?

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.

¿La contraseña configurada por cloud-init no funciona?

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.

¿Puedo vender VPS Windows de esta forma?

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.

¿Fue útil la respuesta?

Tutoriales relacionados