为了避免Virtualizor和Virtfusion每月的正版订阅费,直接采用PVE用户组方式分发小鸡。还有一种备用选择是ConvoyPanel。
1. PVE的安全连接
1.1 隧道建立
Cloudflare Zero Trust提供了免费的Tunnel功能,本章介绍使用CF提供的应用为PVE的管理接口提供安全访问。
假设已经完成了PVE安装,那么直接在CF找到Tunnel创建隧道,如图所示
选择
安装cloudflared,以x86为例
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb dpkg -i cloudflared-linux-amd64.deb
自定义隧道名称后,选择环境为Debian,按需选择系统类型,接着使用token方式安装
完成后PVE终端显示
并且Tunnels管理面板里对应隧道的状态变为“正常”即创建成功。接着配置主机名称,这是用于访问的URL,这会需要有个域名,按需先写,其中“无TLS验证”需要勾选,除非额外在PVE配置了证书。通常情况下服务器不主动向公网打开8006管理端口的情况下,使用tunnel建立的内网连接是安全的。
1.2 访问鉴权
首先分别创建两个策略
Allow规则使用Email接收一次性验证码验证登入,允许持有小鸡的用户使用邮箱访问,当然需要添加自己的
Deny规则是禁止所有访问
接着添加一个“自托管”应用程序,公共主机名与之前的保持一致,意味着该主机名是会受到规则保护。在策略部分,严格按顺序Allow先-Deny后摆放策略
登录方法保持默认,或自行添加额外的登录方法,在高级设置部分,CORS不需要处理。对于Cookie参考如下设置
可以勾选返回401响应。
1.3 域名安全规则
回到所用对应域名的管理页面,在“安全性”的“安全设置”中创建规则,图例是新仪表板,旧的也是类似操作。URL填入自己访问PVE的公共主机名
其它国家地区的意思是除了所列出的,禁止访问,操作正确的效果如下
否则满足条件就会进入填邮箱,收验证码的页面
更多安全设置可以自行查阅Cloudflare说明文档。至此基本的安全配置已经完成。
2. PVE设置
通过第一章的设置后,可以正常登入PVE的管理面板,无需额外操作就能使用经过CF隧道安全连接的VNC。
2.1 性能检查
首先运行
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
查看当前CPU调频模式是什么,接着 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
列出当前可用的模式。如果不是performance,可以从列出可用的模式中进行修改,Intel和AMD以及不同内核版本所显示的可能不一致。自从6.3版本内核开始自带了AMD P-State EPP驱动,但PVE默认不开启。使用performance会带来不必要的功耗和发热,最重要的是它不省电。
以下内容基于AMD CPU操作,Intel仅作参考。首先使用
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
确认是否有驱动amd-pstate-epp
,然后 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
如果只显示了performance powersave
那么就说明amd-pstate-epp
是处于没启用的状态。为此需要修改引导文件,将
amd_pstate=active
作为内核参数添加到引导程序中,nano /etc/default/grub
打开后找到GRUB_CMDLINE_LINUX_DEFAULT
(引导过程中生效),PVE这里默认没有splash,正常使用的话可以不用添加。然后改成
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_pstate=active amd_iommu=on"
(active: 通过EPP提供性能偏好,由硬件自动管理;guided: 系统设置最大最小频率,硬件在范围内自动调整;passive: 系统直接控制频率)保存后运行update-grub
然后重启系统。再次检查 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
如果只有performance powersave
那就通过EPP自动调整性能。在此之前先安装cpupower,
apt install linux-cpupower
然后cpupower frequency-info
查看当前状态。当前显示使用performance。可以用
echo "powersave" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
设置为省电模式(如果你需要的话)。watch -n 0.1 cpupower monitor
观察频率变化。当Governor设置为
powersave
时,EPP默认是性能模式,但可以将其调整为balance_performance
,这个设置选项是独立的。需要注意的是,Governor=performance
的时候是不能设置为balance_performance
的,报错如“Device or resource busy”。根据内核说明此时将覆盖EPP的所有设置,状态选择逻辑只专注于性能。# 查看EPP cat /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference # 修改EPP echo "balance_performance" | tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference # 修改Governor echo "powersave" | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
可用s-tui图形化查看功率,在IO测试中功率最大,
Governor=performance
时观察到低负载偶尔会睿频到5.0,而powersave
常见于1.2-3.2之间。性能差距不大的情况下可以直接选择powersave / balance_performance,最低待机功率在3瓦。Governor / EPP | GB5(1/2) | SysBench | 跑分功率 | 峰值睿频 | 低负载 |
powersave / performance | 2019 / 3805 | 6040 / 12028 | 7/28/57 | 5.06 | 0.4 |
powersave / balance_performance | 2030 / 3769 | 6052 / 12031 | 7/12/58 | 5.09 | 0.4 |
performance / performance | 2025 / 3791 | 6036 / 12048 | 17/30/57 | 5.1 | 0.4 |
参考https://github.com/AdnanHodzic/auto-cpufreq/issues/661和https://www.reddit.com/r/archlinux/comments/1381g2g/amd_pstate_epp_scaling_driver_available_with/
2.2 创建 Cloud-Init
分别以Debian和Ubuntu作为示例,首先安装工具
apt install -y libguestfs-tools
。2.2.1 Debian
cd /root wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
自定义镜像,其中--install是预装工具
virt-customize -a /root/debian-12-genericcloud-amd64.qcow2 \ --install qemu-guest-agent,curl,wget,nano,htop \ --run-command 'echo -n > /etc/machine-id'
创建虚拟机,稍后会制作成模板
不需要镜像
SCSI控制器按需选择,VirtIO SCSI虚拟性能相对较好
磁盘删掉,稍后用命令行导入
CPU按需配置,建议host性能更好
Ballooning动态分配内存,勾选
Multiqueue可让虚拟机使用多个虚拟CPU处理网络数据包,推荐是与虚拟CPU数量一致(默认)
然后点击完成,不要启动。接着通过命令行导入qcow2,Web面板暂时还不支持这种操作。
qm importdisk 8000 /root/debian-12-genericcloud-amd64.qcow2 local-lvm
找到该硬盘进行配置
点击完成后还是无法正常配置硬盘大小的,使用命令
qm resize 8000 scsi0 30G
将硬盘调整到30G。现在开始添加Cloud-Init设备完成后
设置引导顺序,CD不用可以删掉它
再添加一个串口,并将显示修改为图上所示Serial terminal (serial0)或者SPICE(VNC可选),这个步骤是必要的
接着Cloud-Init里的设置都可以不管,由用户自行输入
转换为模板
然后右键模板克隆,要选择完整克隆(Full Clone)
如此一来就是一台新小鸡
至此debian的Cloud-Init完整过程结束
2.2.2 Ubuntu
Ubuntu Cloud Images 最新链接,任选一个LTS版本,本文就使用最新的24.04.2 LTS作为示例。在页面中搜索noble-server-cloudimg-amd64.img,描述部分写明了qcow2 UEFI。
同样的方法下载到
/root
,wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
与前面debian的方法一致virt-customize直接修改了镜像文件的内容,还有更灵活的方法但Web操作更不容易出错。
virt-customize -a /root/noble-server-cloudimg-amd64.img \ --install qemu-guest-agent,curl,wget,nano,htop \ --run-command 'echo -n > /etc/machine-id'
接着就是创建一个虚拟机,与前面的步骤完全一致。
# 导入硬盘 qm importdisk 8001 /root/noble-server-cloudimg-amd64.img local-lvm # 修改硬盘大小 qm resize 8001 scsi0 30G
类似的右键转换成模板就完成了
小鸡的效果如下
具体网络配置和防火墙根据实际情况调整。
2.3 防火墙设置
本小结介绍一种简单的方法实现禁止VMs相互访问。假如有以下网络结构:
路由器网关 | 防火墙网关 | DHCP-VMs |
192.168.123.1 | 192.168.123.100 | 192.168.123.20-192.168.123.30 |
其中防火墙网关可以使用pfSense或Opnsense,对网络流量进行高级处理。
首先确定PVE的基本结构,Datacenter-Node-VM。先在数据中心的防火墙设置选项中打开防火墙,然后配置IPSet,我添加了两台作为示例的虚拟机IP
这个操作将为后续对VM配置防火墙减少重复性的工作。接着设置安全群组
数据中心默认的输入策略是DROP,需要翻阅官方文档,可知除了与PVE服务必要的端口和已经建立连接的流量会被允许,其它的端口均为关闭。
当安全群组策略更新后,需要取消勾选启动,然后再应用,这样才会应用最新的规则。这里只推荐作用于VM,可以设置在模板里,新建的虚拟机都会包含该规则。禁止相互访问的效果如下,因为网关与DNS同为一个IP,所以对外访问是正常的。
类似的要实现NAT机,只需要手动为每个VM的防火墙添加额外的规则
每个规则对应一个协议,一般三个:tcp、udp、ipv6。另外宏提供了BT规则模板,可以用于最基础的禁止访问。
最后的参考配置如下,小鸡in/out方向均禁止BT访问,为了完整实现需要在网关高级处理。
具体配置以实际需求为主。
2.4 用户设置
首先到数据中心-权限-角色,创建自定义的角色,权限参考如图
VM.Audit显示虚拟机,VM.Config.Cloudinit允许用户自行修改登录信息,VM.Console控制台,VM.PowerMgmt管理服务器开关机暂停。只建议使用这个四个最低必要权限。然后在用户添加领域是PVE的用户
接着到虚拟机权限下手动添加用户和角色
然后就完成了。