ما الذي يُبنى هنا
جهاز خادم مخصص يعمل بنظام Proxmox VE كمُشغّل افتراضي خاص به، مع مرآة ZFS عبر أقراص NVMe، وجسر يمنح الضيوف عناوين حقيقية، وتفعيل المحاكاة الافتراضية المتداخلة والتحقق منها — مما يعني أن الضيف على هذا الجهاز يمكنه تشغيل ضيوف بنفسه.
التداخل هو سبب القيام بذلك على جهاز فعلي بدلاً من مثيل افتراضي. لا يمكنك التداخل داخل مُشغّل افتراضي لشخص آخر بنتائج يمكن التنبؤ بها، وعلى BM-E لا يوجد مُشغّل افتراضي خاص بنا في الطريق: تحصل على IPMI وزر طاقة واللوحة الأم. ما يعمل عليه هو قرارك.
قبل أن تبدأ
- BM-E: 32 نواة Zen 4، و 256 جيجابايت ECC، وأربعة أقراص NVMe، وثمانية عناوين IPv4. يمكن الوصول إلى IPMI عبر VPN، والتي يقوم الدعم بإعدادها عند تسليم الجهاز.
- Proxmox VE 8 محدد عند الطلب، أو ISO مخصص تم رفعه من خلال اللوحة. ينتهي المساران في نفس المثبت.
- نصف ساعة عندما لا يحتاج أحد للجهاز، لأن الخطوة الأولى تعيد تشغيله عدة مرات.
1. التثبيت
اتصل بوحدة التحكم عبر VPN الإدارة، وقم بتحميل ISO وقم بالإقلاع منه. في شاشة اختيار القرص، اختر جميع أجهزة NVMe الأربعة، واختر zfs (RAID10)، وافتح الخيارات المتقدمة:
ashiftعند 12، وهي القيمة الصحيحة لقطاعات أربعة كيلوبايت ولا يمكن تغييرها لاحقًا دون إعادة بناء مجموعة التخزين.compressعند lz4. يكلف جزءًا بسيطًا من نواة ويعيد عادةً ثلث المساحة.hdsizeمخفض لترك الباقي لتخزين الضيوف، إلا إذا كنت تريد أن تمتلك مجموعة الجذر كل شيء.
قم بتعيين عنوان الإدارة والبوابة من تفاصيل اللوحة، واستخدم الاسم المؤهل بالكامل للجهاز كاسم المضيف. بعد إعادة تشغيل مرتين، تحصل على موجه تسجيل الدخول وواجهة ويب على المنفذ 8006.
2. المستودعات والحزم
سيفشل مستودع المؤسسات بدون اشتراك وسيسبب فوضى في كل apt update حتى تتعامل معه:
rm -f /etc/apt/sources.list.d/pve-enterprise.sources
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-community.list
apt update && apt full-upgrade -y
apt install -y ifupdown2 chrony zfsutils-linux
reboot3. الذاكرة لنظام ZFS
وإلا سينمو ARC إلى نصف ذاكرة الوصول العشوائي لديك، وعلى جهاز وظيفته الكاملة تشغيل الضيوف، لهذه الذاكرة استخدام أفضل:
echo "options zfs zfs_arc_max=34359738368" > /etc/modprobe.d/zfs.conf
update-initramfs -u -k allاثنان وثلاثون جيجابايت من ARC على جهاز بسعة 256 جيجابايت يترك الكثير للتخزين المؤقت دون تجويع الضيوف. أعد التشغيل لتطبيقه، أو قم بتعيينه مباشرة باستخدام echo إلى /sys/module/zfs/parameters/zfs_arc_max إذا لم تستطع.
4. الشبكات
ثمانية عناوين ليست كثيرة، لذا يجلس الضيوف على جسر خاص والذين يحتاجون إلى عنوان عام فقط يحصلون على واحد موجه إليهم. قم بتحرير /etc/network/interfaces:
auto lo
iface lo inet loopback
auto enp1s0f0
iface enp1s0f0 inet static
address <public address>/24
gateway <gateway>
auto vmbr0
iface vmbr0 inet static
address 10.20.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o enp1s0f0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s 10.20.0.0/24 -o enp1s0f0 -j MASQUERADE
iface vmbr0 inet6 static
address 2001:db8:1a2b:20::1/64لا يحتاج IPv6 إلى ترجمة عناوين، لأن /64 الموجه إلى الجهاز هو موجه بالفعل: قم بتعيين عناوين منه للضيوف على الجسر وسيصلون إلى الإنترنت مباشرة. هذا التباين بين العائلتين ليس أنيقًا، لكنه الشكل الصادق لمساحة العناوين التي نعيش فيها.
sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/80-pve.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.d/80-pve.conf
ifreload -a5. المحاكاة الافتراضية المتداخلة
cat /sys/module/kvm_amd/parameters/nestedعلى النوى الحالية، هذا يطبع بالفعل 1. إذا طبع 0:
echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf
update-initramfs -u && rebootيتطلب التداخل أيضًا أن يرى الضيف معالجًا يعترف بوجود الميزة، مما يعني أن نوع المعالج يجب أن يكون host. أي شيء آخر يقدم نموذج معالج اصطناعي مع إخفاء امتدادات المحاكاة الافتراضية، ويرفض المُشغّل الافتراضي الداخلي البدء برسالة خطأ لا تذكر أيًا من هذا.
6. ضيف
cd /var/lib/vz/template/iso
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
qm create 100 --name inner --memory 16384 --cores 8 --cpu host \
--net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single --ostype l26 \
--agent enabled=1 --machine q35 --bios ovmf
qm set 100 --efidisk0 local-zfs:1
qm importdisk 100 debian-13-genericcloud-amd64.qcow2 local-zfs
qm set 100 --scsi0 local-zfs:vm-100-disk-1,discard=on,ssd=1
qm set 100 --boot order=scsi0
qm set 100 --ipconfig0 ip=10.20.0.100/24,gw=10.20.0.1
qm set 100 --sshkeys /root/.ssh/authorized_keys
qm set 100 --ciuser admin
qm start 100discard=on مع ssd=1 يعني أن الحذف داخل الضيف يعود إلى مجموعة التخزين بدلاً من التراكم كمساحة فقدت تتبعها.
7. جدار الحماية
لا ينبغي أن تكون واجهة الويب على المنفذ 8006 متاحة للجمهور. قم بتقييدها على مستوى مركز البيانات بالعنوان الذي تدير منه — نقطة نهاية النفق من دليل WireGuard هي المرشح الواضح:
cat > /etc/pve/firewall/cluster.fw <<EOF
[OPTIONS]
enable: 1
policy_in: DROP
[RULES]
IN SSH(ACCEPT) -source 10.7.0.0/24
IN ACCEPT -source 10.7.0.0/24 -dport 8006 -proto tcp
IN ACCEPT -p icmp
EOF
systemctl restart pve-firewallتحقق منه
المضيف أولاً:
pveversion -v | head -3
zpool status rpool
zpool list -o name,size,alloc,free,frag,cap
arc_summary | head -12تقرير المجموعة ONLINE مع زوجين معكوسين، وهدف ARC عند اثنين وثلاثين جيجابايت التي قمت بتعيينها بدلاً من نصف الجهاز.
الآن النقطة الفعلية لهذا البناء. سجل الدخول إلى الضيف وتحقق من المعالج الذي تم إعطاؤه:
ssh [email protected]
lscpu | grep -E "Model name|Virtuali"
grep -c svm /proc/cpuinfoيجب أن يكون اسم الطراز هو جزء EPYC الحقيقي، ويجب أن يبلغ سطر المحاكاة الافتراضية عن AMD-V. الصفر من الأمر الثالث يعني أن نوع المعالج ليس host، وكل شيء أدناه سيفشل.
ثم قم بتشغيل جهاز داخل الجهاز:
apt install -y qemu-system-x86 qemu-utils cpu-checker
kvm-ok
wget https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/x86_64/alpine-virt-3.22.0-x86_64.iso
qemu-system-x86_64 -enable-kvm -m 2048 -cdrom alpine-virt-3.22.0-x86_64.iso -nographickvm-ok يطبع أنه يمكن استخدام التسريع، متبوعًا بإقلاع Alpine يصل إلى موجه تسجيل الدخول في بضع ثوانٍ بدلاً من الزحف، هو التحقق. بدون تداخل، نفس الأمر إما يرفض تمامًا أو يحاكي في البرنامج بحوالي واحد على عشرين من السرعة، وهذا لا يمكن الخلط بينه.
أخيرًا، تأكد من أن الواجهة مغلقة من الخارج:
curl -m5 -k https://<public address>:8006/ ; echo "exit $?"انتهاء مهلة الاتصال هو الإجابة الصحيحة.
فيما بعد
اللقطات على ZFS مجانية حتى تتباعد، لذا فإن جدول zfs-auto-snapshot الليلي يكاد لا يكلف شيئًا وقد أنقذ أجهزة أكثر من أي سياسة نسخ احتياطي. إعادة البناء على المعدن في نفس اليوم، ولكن إعادة البناء تعيد لك جهازًا فارغًا، وهو شيء مختلف عن إعادة جهازك.