虛擬化與母雞

PVE 開小雞教程:Proxmox VE 母雞批次克隆 VPS、Cloud-Init 自動分配 IP、限速與防 IP 盜用

7 個步驟 11 分鐘閱讀 57 次閱讀 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 的輸出,以及完整報錯資訊,方便工程師快速定位。

這篇文章有幫助嗎?

相關教程