虚拟化与母鸡

PVE 开小鸡教程:Proxmox VE 母鸡批量克隆 VPS、Cloud-Init 自动分配 IP、限速与防 IP 盗用

7 个步骤 11 分钟阅读 74 次阅读 0
本文目录

在母鸡上装好 Proxmox VE 之后,真正的工作是把它变成可以售卖的 VPS:快速开出大量小鸡,给每台分配独立的 IP 和密码,按套餐限制资源,并确保任何客户都无法占用别人的 IP。本文讲的就是这部分运营实操:从 Cloud-Init 模板克隆 VPS,自动设置 IP、密码和 SSH 密钥,限制 CPU、磁盘 IO 和带宽,用 Proxmox 防火墙防止 IP 盗用,为客户开通独立的控制台登录,以及用脚本批量开小鸡。

本文假设 Proxmox VE 已安装且网桥工作正常(参见独立服务器安装 Proxmox VE),并且已准备好 Cloud-Init 模板(参见制作 Cloud-Init 模板)。批量开几十台之前,请先用一台 VPS 把所有步骤测试一遍;同时保留母鸡的 IPMI/KVM 控制台访问,以防改错网络后无法连接。

步骤 1:从模板克隆 VPS

完整克隆(full clone)与模板相互独立,之后可以随时删除或更新模板。链接克隆(linked clone)速度更快、占用空间更小,但每台克隆出来的小鸡都依赖模板磁盘。

# 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

步骤 2:用 Cloud-Init 设置 IP、密码和 SSH 密钥

Cloud-Init 会在 VPS 首次开机时写入网络配置和登录信息,客户拿到的就是一台开箱即用的服务器,你无需登录进去手动配置。

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

如果之后修改了 Cloud-Init 参数,需要重新生成 Cloud-Init 驱动器(qm cloudinit update 101)并重启 VPS。如需 IPv6,把 ip6=2001:db8:100::11/64,gw6=2001:db8:100::1 加到 --ipconfig0 中。

步骤 3:按套餐限制资源

# 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

注意 --net0 会替换整个网卡定义:请从 qm config 中复制原有的 MAC 地址(virtio=BC:24:11:...)一并写上,否则 VPS 会获得新的 MAC,如果上游机房把 IP 与 MAC 绑定,小鸡就可能断网。磁盘 IO 限制可以防止某一台高负载的小鸡拖慢同一块磁盘上的所有其他 VPS。

步骤 4:用 Proxmox 防火墙防止 IP 盗用

如果不做过滤,拥有 root 权限的客户可以在系统里随意配置 IP 段中任何空闲的 IP 并占为己用。Proxmox 防火墙的 IP 过滤(IP filter)会丢弃源地址不在允许列表中的数据包。必须先在数据中心(Datacenter)级别启用防火墙,并把该级别的入站策略设为 ACCEPT,以免把自己锁在母鸡外面。

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

网卡必须带有 firewall=1(已在步骤 2 中设置)。macfilter(默认开启)可以阻止 VPS 修改自己的 MAC 地址。在 VPS 内部测试:再添加一个未分配给它的 IP,并用这个 IP 向外 ping,此时应当失败。

步骤 5:为客户开通独立的控制台登录

客户如果把 VPS 的网络改坏了,仍然需要通过控制台来修复。创建一个只能查看和操作其自己 VPS 的 Proxmox 用户:

pveum user add customer101@pve --password 'Another-Strong-Pass' --comment "VPS 101"
pveum acl modify /vms/101 --users customer101@pve --roles PVEVMUser

客户在 https://HOST_IP:8006 登录,领域(Realm)选择 “Proxmox VE authentication server”,登录后只能看到 VPS 101,可以使用控制台、开关机,并查看自己的监控图表。如果要做带计费的全自动销售,下一步可以使用 Virtualizor 这类面板,或者 WHMCS 搭配 Proxmox 模块。

步骤 6:批量开小鸡

下面的脚本按行读取 VPS 列表(每行包括 ID、IP、内存 MB 数、核心数、磁盘大小),并按上述设置从模板批量创建。密码随机生成,请妥善保存,以便交付给客户。

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

步骤 7:做好母鸡监控

  • 内存:分配给小鸡的内存总量应低于物理内存减去 4–8 GB(留给母鸡系统和 ZFS/缓存)。内存超售是让所有 VPS 变慢的最快方式。
  • 磁盘:精简置备的存储(LVM-thin、ZFS)可以超售,但要用 lvs 或 zfs list 监控实际用量;thin pool 一旦写满,可能导致小鸡磁盘数据损坏。
  • 滥用:只要有一台 VPS 对外发起攻击或发送垃圾邮件,就可能导致整个 IP 段被拉黑。参见母鸡上排查滥用的小鸡。
  • 备份:按照 Proxmox VE 备份与快照中的方法设置定时备份。

常见问题

新开的 VPS 没有网络

检查 qm config 中的 IP、前缀和网关是否正确,所用网桥是否就是承载该 IP 段的网桥,以及 IP 过滤的 IPSet 中是否包含该 VPS 的 IP。如果上游把 IP 与 MAC 地址绑定,桥接的小鸡需要改用路由模式或虚拟 MAC,参见 Proxmox VE 母鸡网络配置。

Cloud-Init 设置的密码无法登录

部分系统镜像默认禁止 root 通过 SSH 密码登录。请用 SSH 密钥或控制台登录,如有需要可在 /etc/ssh/sshd_config 中允许密码登录,或者直接在模板里改好这一项。

可以用这种方式卖 Windows VPS 吗?

可以,需要准备好用 cloudbase-init 或 sysprep 处理过的 Windows 模板。但 Windows 授权由你自行负责:每台 VPS 都必须有合法的 Windows 许可证。

如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上母鸡服务器 IP、Proxmox VE 版本、虚拟机 ID 及 qm config ID 的输出,以及完整报错信息,方便工程师快速定位。

这篇文章有帮助吗?

相关教程