Files
Virtnet.bond/extensions/Servers/Proxmox/views/help.blade.php

5133 lines
363 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<x-proxmox::layout :server="$server" view="help" :status="$status" :status-polling="true" :status-polling-interval="'2s'">
<div class="space-y-6" x-data="{
activeSection: 'overview',
expandedCategories: {
'getting-started': false,
'configuration': false,
'advanced': false,
'reference': false
},
searchQuery: '',
matchesQuery(label, keywords = '') {
if (!this.searchQuery) return true;
const query = this.searchQuery.toLowerCase();
const labelLower = label.toLowerCase();
const keywordsLower = keywords.toLowerCase();
return labelLower.includes(query) || keywordsLower.includes(query);
},
sectionMatchesContent(sectionId) {
if (!this.searchQuery) return true;
const query = this.searchQuery.toLowerCase();
const sectionElement = document.querySelector(`[data-section-id='${sectionId}']`);
if (!sectionElement) return false;
const textContent = sectionElement.textContent.toLowerCase();
return textContent.includes(query);
},
shouldShowSection(sectionId, label, keywords = '') {
if (!this.searchQuery) return true;
return this.matchesQuery(label, keywords) || this.sectionMatchesContent(sectionId);
},
init() {
this.$watch('searchQuery', (value) => {
if (value) {
// Auto-expand categories when searching
Object.keys(this.expandedCategories).forEach(key => {
this.expandedCategories[key] = true;
});
// Auto-switch to first matching section
const sections = ['overview', 'quick-start', 'boot-settings', 'network', 'subdomain', 'cloud-init', 'display', 'statistics', 'system', 'backups', 'console', 'bgp', 'glossary', 'rfc-standards', 'troubleshooting'];
for (const section of sections) {
const sectionElement = document.querySelector(`[data-section-id='${section}']`);
if (sectionElement) {
const textContent = sectionElement.textContent.toLowerCase();
if (textContent.includes(value.toLowerCase())) {
this.activeSection = section;
break;
}
}
}
}
});
}
}">
<!-- Sidebar Navigation -->
<div class="lg:grid lg:grid-cols-4 gap-6">
<div class="lg:col-span-1">
<div class="bg-background-secondary border border-neutral rounded-lg p-4 sticky top-4 max-h-[calc(100vh-2rem)] overflow-y-auto">
<div class="flex flex-col gap-3 mb-4">
<div class="flex items-center gap-2">
<x-ri-question-line class="size-5 text-primary" />
<h3 class="text-lg font-semibold">Help Topics</h3>
</div>
<div class="relative">
<x-ri-search-line class="size-4 text-base/50 absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none" />
<input
type="text"
x-model="searchQuery"
placeholder="Search help..."
class="w-full pr-3 py-1.5 text-sm rounded-md border border-neutral/60 bg-background focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary"
style="padding-left: 2.75rem;"
/>
</div>
</div>
<nav class="space-y-2">
<!-- Getting Started -->
<div x-show="matchesQuery('getting started quick start overview')">
<button @click="expandedCategories['getting-started'] = !expandedCategories['getting-started']"
class="w-full flex items-center justify-between px-3 py-2 rounded-md text-base font-semibold hover:bg-background transition-colors">
<div class="flex items-center gap-2">
<x-ri-book-open-line class="size-4" />
<span>Getting Started</span>
</div>
<x-ri-arrow-down-s-line
:class="expandedCategories['getting-started'] ? 'rotate-180' : ''"
class="size-4 transition-transform" />
</button>
<div x-show="expandedCategories['getting-started']" x-transition class="ml-4 mt-1 space-y-1">
<button @click="activeSection = 'overview'"
x-show="shouldShowSection('overview', 'overview getting started basics', 'overview getting started basics dashboard')"
:class="activeSection === 'overview' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-dashboard-line class="size-4" />
<span>Overview</span>
</button>
<button @click="activeSection = 'quick-start'"
x-show="shouldShowSection('quick-start', 'quick start guide first time setup', 'quick start guide first time setup')"
:class="activeSection === 'quick-start' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-rocket-line class="size-4" />
<span>Quick Start Guide</span>
</button>
</div>
</div>
<!-- Configuration -->
<div x-show="matchesQuery('configuration network subdomain cloud-init display statistics')">
<button @click="expandedCategories['configuration'] = !expandedCategories['configuration']"
class="w-full flex items-center justify-between px-3 py-2 rounded-md text-base font-semibold hover:bg-background transition-colors">
<div class="flex items-center gap-2">
<x-ri-settings-3-line class="size-4" />
<span>Configuration</span>
</div>
<x-ri-arrow-down-s-line
:class="expandedCategories['configuration'] ? 'rotate-180' : ''"
class="size-4 transition-transform" />
</button>
<div x-show="expandedCategories['configuration']" x-transition class="ml-4 mt-1 space-y-1">
<button @click="activeSection = 'boot-settings'"
x-show="shouldShowSection('boot-settings', 'boot settings order firmware efi bios', 'boot settings order firmware efi bios')"
:class="activeSection === 'boot-settings' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-restart-line class="size-4" />
<span>Boot Settings</span>
</button>
<button @click="activeSection = 'network'"
x-show="shouldShowSection('network', 'network ip address mtu gateway routes firewall', 'network ip address mtu gateway routes firewall')"
:class="activeSection === 'network' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-wifi-line class="size-4" />
<span>Network</span>
</button>
<button @click="activeSection = 'subdomain'"
x-show="shouldShowSection('subdomain', 'subdomain dns records a aaaa hostnames', 'subdomain dns records a aaaa hostnames')"
:class="activeSection === 'subdomain' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-global-line class="size-4" />
<span>Subdomain</span>
</button>
<button @click="activeSection = 'cloud-init'"
x-show="shouldShowSection('cloud-init', 'cloud-init user data metadata ssh keys', 'cloud-init user data metadata ssh keys')"
:class="activeSection === 'cloud-init' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-cloud-line class="size-4" />
<span>Cloud-init</span>
</button>
<button @click="activeSection = 'display'"
x-show="shouldShowSection('display', 'display console resolution vnc xterm', 'display console resolution vnc xterm')"
:class="activeSection === 'display' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-computer-line class="size-4" />
<span>Display</span>
</button>
<button @click="activeSection = 'statistics'"
x-show="shouldShowSection('statistics', 'statistics graphs telemetry cpu memory disk network analysis', 'statistics graphs telemetry cpu memory disk network analysis')"
:class="activeSection === 'statistics' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-bar-chart-line class="size-4" />
<span>Statistics</span>
</button>
</div>
</div>
<!-- Advanced -->
<div x-show="matchesQuery('advanced system backups console bgp routing')">
<button @click="expandedCategories['advanced'] = !expandedCategories['advanced']"
class="w-full flex items-center justify-between px-3 py-2 rounded-md text-base font-semibold hover:bg-background transition-colors">
<div class="flex items-center gap-2">
<x-ri-code-s-slash-line class="size-4" />
<span>Advanced</span>
</div>
<x-ri-arrow-down-s-line
:class="expandedCategories['advanced'] ? 'rotate-180' : ''"
class="size-4 transition-transform" />
</button>
<div x-show="expandedCategories['advanced']" x-transition class="ml-4 mt-1 space-y-1">
<button @click="activeSection = 'system'"
x-show="shouldShowSection('system', 'system advanced cpu memory disk tpm efi', 'system advanced cpu memory disk tpm efi')"
:class="activeSection === 'system' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-cpu-line class="size-4" />
<span>System</span>
</button>
<button @click="activeSection = 'backups'"
x-show="shouldShowSection('backups', 'backups snapshots restore schedule retention', 'backups snapshots restore schedule retention')"
:class="activeSection === 'backups' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-database-line class="size-4" />
<span>Backups</span>
</button>
<button @click="activeSection = 'console'"
x-show="shouldShowSection('console', 'console access vnc xterm ssh serial', 'console access vnc xterm ssh serial')"
:class="activeSection === 'console' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-terminal-box-line class="size-4" />
<span>Console Access</span>
</button>
<button @click="activeSection = 'bgp'"
x-show="shouldShowSection('bgp', 'bgp routing core router network analysis', 'bgp routing core router network analysis')"
:class="activeSection === 'bgp' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-router-line class="size-4" />
<span>BGP Routing</span>
</button>
</div>
</div>
<!-- Reference -->
<div x-show="matchesQuery('reference glossary rfc standards troubleshooting')">
<button @click="expandedCategories['reference'] = !expandedCategories['reference']"
class="w-full flex items-center justify-between px-3 py-2 rounded-md text-base font-semibold hover:bg-background transition-colors">
<div class="flex items-center gap-2">
<x-ri-file-list-3-line class="size-4" />
<span>Reference</span>
</div>
<x-ri-arrow-down-s-line
:class="expandedCategories['reference'] ? 'rotate-180' : ''"
class="size-4 transition-transform" />
</button>
<div x-show="expandedCategories['reference']" x-transition class="ml-4 mt-1 space-y-1">
<button @click="activeSection = 'glossary'"
x-show="shouldShowSection('glossary', 'glossary terminology definitions acronyms', 'glossary terminology definitions acronyms')"
:class="activeSection === 'glossary' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-book-2-line class="size-4" />
<span>Glossary</span>
</button>
<button @click="activeSection = 'rfc-standards'"
x-show="shouldShowSection('rfc-standards', 'rfc standards protocols ipv4 ipv6 dns ssh http', 'rfc standards protocols ipv4 ipv6 dns ssh http')"
:class="activeSection === 'rfc-standards' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-file-paper-line class="size-4" />
<span>RFC Standards</span>
</button>
<button @click="activeSection = 'troubleshooting'"
x-show="shouldShowSection('troubleshooting', 'troubleshooting errors issues network connectivity boot problems', 'troubleshooting errors issues network connectivity boot problems')"
:class="activeSection === 'troubleshooting' ? 'bg-background text-base font-semibold' : 'text-base/70 hover:text-base'"
class="w-full text-left px-3 py-2 rounded-md transition-colors flex items-center gap-2">
<x-ri-tools-line class="size-4" />
<span>Troubleshooting</span>
</button>
</div>
</div>
</nav>
</div>
</div>
<!-- Content Area -->
<div class="lg:col-span-3">
<div class="bg-background-secondary border border-neutral rounded-lg p-6 space-y-6">
<!-- Quick Start Guide -->
<div x-show="activeSection === 'quick-start'" x-transition style="display: none;" data-section-id="quick-start">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-rocket-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Quick Start Guide</h2>
</div>
<p class="text-base/80 mb-6">
Get your virtual machine up and running quickly with this step-by-step guide.
</p>
<div class="space-y-6">
<div class="bg-background border border-neutral rounded-lg p-5">
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-bold">1</span>
Initial Setup
</h3>
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
<li>Navigate to the <strong>Overview</strong> tab to view your VM status</li>
<li>Set a hostname following RFC 1035 standards (lowercase, 1-253 chars)</li>
<li>Configure a secure password (minimum 8 characters)</li>
<li>Click "Save & Apply" to apply settings via cloud-init</li>
</ol>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-bold">2</span>
Network Configuration
</h3>
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
<li>Go to the <strong>Network</strong> tab to view assigned IP addresses</li>
<li>Configure network devices if needed (VirtIO recommended for Linux)</li>
<li>Set up static IP addresses via <strong>Cloud-init</strong> if required</li>
<li>Configure DNS servers for proper name resolution</li>
</ol>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-bold">3</span>
First Boot
</h3>
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
<li>Power on your VM from the Overview tab</li>
<li>Use <strong>NoVNC</strong> or <strong>Xterm.js</strong> for console access</li>
<li>Complete OS installation if using installation media</li>
<li>Verify network connectivity and DNS resolution</li>
</ol>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-bold">4</span>
Post-Installation
</h3>
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
<li>Update your operating system: <code class="bg-background-secondary px-2 py-1 rounded">apt update && apt upgrade</code> (Debian/Ubuntu)</li>
<li>Install QEMU Guest Agent for enhanced features</li>
<li>Configure firewall rules as needed</li>
<li>Set up SSH access for remote administration</li>
<li>Create your first backup</li>
</ol>
</div>
</div>
</div>
<!-- Overview Section -->
<div x-show="activeSection === 'overview'" x-transition data-section-id="overview">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-dashboard-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Overview Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Overview tab provides a comprehensive dashboard for monitoring and managing your virtual machine. It displays real-time statistics, system information, and provides quick access to essential management functions.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-server-line class="size-5 text-base/60" />
Server Details
</h3>
<h4 class="text-lg font-semibold mt-4 mb-3">Hostname Management</h4>
<p class="text-base/80 mb-3">
The hostname is the network name assigned to your virtual machine. It's used for identification on the network and should follow <strong>RFC 1035</strong> standards.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-2">RFC 1035 Compliance Requirements:</p>
<table class="w-full text-sm text-base/70">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Requirement</th>
<th class="text-left py-2 px-2 font-semibold">Specification</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Length</td>
<td class="py-2 px-2">1-253 characters total</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Characters</td>
<td class="py-2 px-2">Lowercase letters (a-z), numbers (0-9), hyphens (-), dots (.)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Start/End</td>
<td class="py-2 px-2">Cannot start or end with hyphen or dot</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Consecutive Dots</td>
<td class="py-2 px-2">Cannot contain consecutive dots (..)</td>
</tr>
<tr>
<td class="py-2 px-2">Label Length</td>
<td class="py-2 px-2">Each label (between dots) must be 1-63 characters</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-lightbulb-line class="size-4 text-warning" />
How to Configure Hostname
</p>
<ol class="list-decimal list-inside text-sm text-base/70 space-y-1 ml-6">
<li>Click "Edit" next to the hostname field</li>
<li>Enter a valid hostname following RFC 1035 standards</li>
<li>Click "Save" to store in database only</li>
<li>Click "Save & Apply" to also update VM configuration via cloud-init</li>
<li>Reboot the VM for changes to take effect</li>
</ol>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-4 text-secondary" />
Examples
</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-2 text-sm">
<div class="flex items-center gap-2">
<x-ri-checkbox-circle-line class="size-4 text-success" />
<code class="bg-background-secondary px-2 py-1 rounded">web-server-01</code>
</div>
<div class="flex items-center gap-2">
<x-ri-checkbox-circle-line class="size-4 text-success" />
<code class="bg-background-secondary px-2 py-1 rounded">db-primary.example</code>
</div>
<div class="flex items-center gap-2">
<x-ri-close-circle-line class="size-4 text-error" />
<code class="bg-background-secondary px-2 py-1 rounded">Web_Server</code> <span class="text-base/50">(uppercase, underscore)</span>
</div>
<div class="flex items-center gap-2">
<x-ri-close-circle-line class="size-4 text-error" />
<code class="bg-background-secondary px-2 py-1 rounded">-server-</code> <span class="text-base/50">(starts/ends with hyphen)</span>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Password Management</h4>
<p class="text-base/80 mb-3">
Manage the root or default user password for your virtual machine. Passwords are securely stored and can be applied via cloud-init.
</p>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Requirement</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Specification</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4">Minimum Length</td>
<td class="py-2 px-4">8 characters</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4">Confirmation</td>
<td class="py-2 px-4">Must be entered twice for verification</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4">Storage</td>
<td class="py-2 px-4">Securely stored in encrypted database</td>
</tr>
<tr>
<td class="py-2 px-4">Application</td>
<td class="py-2 px-4">Applied via cloud-init on next boot</td>
</tr>
</tbody>
</table>
<div class="bg-warning/10 border border-warning/30 rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-alert-line class="size-5 text-warning flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-1">Important: Password Application</p>
<p class="text-sm text-base/70">The server must be rebooted for password changes to take effect. Cloud-init applies the password during the boot process.</p>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">DNS Configuration</h4>
<p class="text-base/80 mb-3">
Domain Name System (DNS) settings determine how your virtual machine resolves domain names to IP addresses. These settings follow <strong>RFC 1034</strong> and <strong>RFC 1035</strong> standards.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Common DNS Servers:</p>
<table class="w-full text-sm">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Provider</th>
<th class="text-left py-2 px-2 font-semibold">IPv4 Primary</th>
<th class="text-left py-2 px-2 font-semibold">IPv4 Secondary</th>
<th class="text-left py-2 px-2 font-semibold">IPv6</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Google</td>
<td class="py-2 px-2"><code>8.8.8.8</code></td>
<td class="py-2 px-2"><code>8.8.4.4</code></td>
<td class="py-2 px-2"><code>2001:4860:4860::8888</code></td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Cloudflare</td>
<td class="py-2 px-2"><code>1.1.1.1</code></td>
<td class="py-2 px-2"><code>1.0.0.1</code></td>
<td class="py-2 px-2"><code>2606:4700:4700::1111</code></td>
</tr>
<tr>
<td class="py-2 px-2">Quad9</td>
<td class="py-2 px-2"><code>9.9.9.9</code></td>
<td class="py-2 px-2"><code>149.112.112.112</code></td>
<td class="py-2 px-2"><code>2620:fe::fe</code></td>
</tr>
</tbody>
</table>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
API Integration & Technical Details
</h4>
<p class="text-base/80 mb-3">
For software developers integrating with the QEMU/KVM API, hostname updates are performed via the QEMU configuration endpoint.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
Management API Endpoint: Update VM Name
</p>
<div class="bg-background-secondary/50 p-3 rounded text-xs text-base/80">
Use the Proxmox configuration endpoint to rename a VM. Authentication requires a ticket and CSRF token issued via the access/ticket endpoint.
</div>
<p class="text-xs text-base/60 mt-2">
<strong>Note:</strong> The VM name is used by cloud-init as the hostname. Changes require a VM restart to take effect via cloud-init. The management platform uses a ticket-based authentication system with CSRF protection.
</p>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-database-2-line class="size-4 text-info" />
Storage System Architecture
</p>
<p class="text-sm text-base/70 mb-2">
The platform supports multiple storage backends, each optimized for different use cases:
</p>
<table class="w-full text-sm mb-3">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Storage Type</th>
<th class="text-left py-2 px-2 font-semibold">Backend</th>
<th class="text-left py-2 px-2 font-semibold">Use Case</th>
<th class="text-left py-2 px-2 font-semibold">Features</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">local</td>
<td class="py-2 px-2">Directory</td>
<td class="py-2 px-2">ISO images, templates</td>
<td class="py-2 px-2">Simple file storage</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">local-lvm</td>
<td class="py-2 px-2">LVM thin provisioning</td>
<td class="py-2 px-2">VM disks, snapshots</td>
<td class="py-2 px-2">Thin provisioning, snapshots</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">cephpool</td>
<td class="py-2 px-2">Ceph RBD</td>
<td class="py-2 px-2">Shared storage, HA</td>
<td class="py-2 px-2">Distributed, replicated</td>
</tr>
<tr>
<td class="py-2 px-2">nfs</td>
<td class="py-2 px-2">NFS mount</td>
<td class="py-2 px-2">Shared storage</td>
<td class="py-2 px-2">Network-attached</td>
</tr>
</tbody>
</table>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-file-code-line class="size-4 text-primary" />
Cloud-init Hostname Configuration
</p>
<p class="text-sm text-base/70 mb-2">Cloud-init reads the VM name from QEMU config and applies it as hostname:</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># /etc/cloud/cloud.cfg.d/99_hostname.cfg
hostname: web-server-01
fqdn: web-server-01.example.com
preserve_hostname: false</code></pre>
<p class="text-xs text-base/60 mt-2">
The hostname is set during first boot or when <code>cloud-init clean</code> is run followed by a reboot.
</p>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
Security Considerations
</h4>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Password Storage:</strong> Passwords are hashed using bcrypt (cost factor 10) before database storage</li>
<li><strong>Cloud-init Transmission:</strong> Passwords are transmitted to QEMU API via HTTPS/TLS 1.2+</li>
<li><strong>API Authentication:</strong> Uses PVEAuthCookie with CSRF token validation (RFC 7231)</li>
<li><strong>Session Management:</strong> Tickets expire after 2 hours of inactivity (configurable)</li>
<li><strong>Password Policy:</strong> Minimum 8 characters, no maximum (enforced client-side and server-side)</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-bar-chart-line class="size-5 text-base/60" />
Performance Monitoring
</h4>
<p class="text-base/80 mb-3">
Real-time performance graphs display CPU usage, memory consumption, network traffic, and disk I/O over various time ranges.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-database-2-line class="size-4 text-info" />
RRD Data Collection
</p>
<p class="text-sm text-base/70 mb-2">Performance data is collected using Round Robin Database (RRD) format:</p>
<div class="bg-background-secondary/50 p-3 rounded text-xs text-base/80">
RRD storage consolidates historical metrics at different resolutions (hour, day, week, month, year) to keep graph rendering fast. The Overview and Statistics tabs consume the same data stream.
</div>
<p class="text-xs text-base/60 mt-2">
<strong>Data Retention:</strong> Hour (1 year), Day (5 years), Week (10 years), Month (50 years), Year (indefinite)
</p>
</div>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Metric</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Description</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Unit</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">CPU</td>
<td class="py-2 px-4">Percentage of CPU time used by the virtual machine</td>
<td class="py-2 px-4">Percentage (%)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Memory</td>
<td class="py-2 px-4">RAM usage including cached and buffered memory</td>
<td class="py-2 px-4">Bytes (B, KB, MB, GB)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Network</td>
<td class="py-2 px-4">Inbound and outbound network traffic</td>
<td class="py-2 px-4">Bytes per second (B/s)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Disk</td>
<td class="py-2 px-4">Read and write operations on virtual disks</td>
<td class="py-2 px-4">Bytes per second (B/s)</td>
</tr>
</tbody>
</table>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<div class="bg-background border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-time-line class="size-4 text-primary" />
Time Ranges
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Hour - Last 60 minutes</li>
<li>Day - Last 24 hours</li>
<li>Week - Last 7 days</li>
<li>Month - Last 30 days</li>
<li>Year - Last 365 days</li>
</ul>
</div>
<div class="bg-background border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-function-line class="size-4 text-secondary" />
Aggregation Methods
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li><strong>Average:</strong> Shows typical usage patterns</li>
<li><strong>Maximum:</strong> Shows peak usage and spikes</li>
</ul>
</div>
</div>
<h3 class="text-xl font-semibold mt-8 mb-4 flex items-center gap-2">
<x-ri-bar-chart-box-line class="size-5 text-base/60" />
Resource Allocation vs Entitlement
</h3>
<p class="text-base/80 mb-4">
The Resource Allocation vs Entitlement section provides real-time visibility into how your virtual machine's actual resource consumption compares to its allocated entitlements. This helps you monitor resource usage, identify potential bottlenecks, and ensure optimal performance.
</p>
<h4 class="text-lg font-semibold mt-6 mb-3">CPU Allocation</h4>
<p class="text-base/80 mb-3">
Displays live CPU usage as a percentage of your vCPU entitlement. Values are sampled directly from the Proxmox hypervisor and update automatically with each status poll (every 30 seconds by default, or every 2 seconds during fast polling).
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Usage Calculation:</strong> Shows current CPU time used divided by total vCPU cores allocated</li>
<li><strong>Progress Bar:</strong> Visual indicator that can exceed 100% to show over-allocation scenarios</li>
<li><strong>Real-time Updates:</strong> Refreshes alongside the live status poll</li>
<li><strong>Data Source:</strong> Directly from Proxmox hypervisor metrics</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Memory Allocation</h4>
<p class="text-base/80 mb-3">
Shows current RAM usage compared to your provisioned memory entitlement. Calculated from the VM's allocated memory and updates in real-time as memory consumption changes.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Usage Display:</strong> Shows used memory vs. total allocated memory</li>
<li><strong>Format:</strong> Human-readable format (B, KB, MB, GB) for easy understanding</li>
<li><strong>Entitlement Label:</strong> Displays your provisioned RAM entitlement</li>
<li><strong>Calculation:</strong> Based on the VPS's provisioned RAM configuration</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Hypervisor Uptime</h4>
<p class="text-base/80 mb-3">
Displays the live uptime reported by the Proxmox hypervisor, plus power event statistics from the task history. This provides insight into VM stability and availability.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Uptime Display:</strong> Shows how long the VM has been running (formatted as days, hours, minutes)</li>
<li><strong>Power Events:</strong> Tracks starts, shutdowns, and reboots from task history</li>
<li><strong>Data Source:</strong> Combined data from hypervisor status and historical task logs</li>
<li><strong>Badge:</strong> Always shows "Live" to indicate real-time data</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Status Badges</h4>
<p class="text-base/80 mb-3">
Color-coded badges provide quick visual feedback about resource health status.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Badge</th>
<th class="text-left py-2 px-2 font-semibold">Condition</th>
<th class="text-left py-2 px-2 font-semibold">Color</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2 font-semibold">Healthy</td>
<td class="py-2 px-2">Usage below 85% of entitlement</td>
<td class="py-2 px-2"><span class="px-2 py-1 rounded-full text-success bg-success/15 text-xs">Green</span></td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2 font-semibold">Watchlist</td>
<td class="py-2 px-2">Usage between 85% and 100%</td>
<td class="py-2 px-2"><span class="px-2 py-1 rounded-full text-warning bg-warning/15 text-xs">Yellow</span></td>
</tr>
<tr>
<td class="py-2 px-2 font-semibold">Over entitlement</td>
<td class="py-2 px-2">Usage exceeds 100% of entitlement</td>
<td class="py-2 px-2"><span class="px-2 py-1 rounded-full text-danger bg-danger/15 text-xs">Red</span></td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-8 mb-4 flex items-center gap-2">
<svg class="w-5 h-5 text-base/60" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
Live Network Traffic
</h3>
<p class="text-base/80 mb-4">
The Live Network Traffic section provides real-time bandwidth monitoring for each network interface on your virtual machine. It displays current transfer rates, peak values, historical traffic graphs, and cumulative statistics.
</p>
<h4 class="text-lg font-semibold mt-6 mb-3">Current Rates</h4>
<p class="text-base/80 mb-3">
Shows the instantaneous download and upload speeds in bytes per second, updated every 30 seconds from Proxmox RRD (Round Robin Database) data. The update interval matches Proxmox's RRD sampling rate to ensure accurate data representation.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Download Rate:</strong> Inbound traffic speed (displayed in green)</li>
<li><strong>Upload Rate:</strong> Outbound traffic speed (displayed in blue)</li>
<li><strong>Update Frequency:</strong> Every 30 seconds (matches Proxmox RRD sampling)</li>
<li><strong>Data Source:</strong> Proxmox RRD data via the <code class="bg-background-secondary px-1 py-0.5 rounded text-xs">/rrddata</code> API endpoint</li>
<li><strong>Format:</strong> Human-readable with automatic unit conversion (B/s, KiB/s, MiB/s, GiB/s)</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Peak Values</h4>
<p class="text-base/80 mb-3">
Tracks the highest observed transfer rates for each direction since the page was loaded. Peak values help identify maximum bandwidth usage and can be useful for capacity planning.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Tracking:</strong> Automatically tracks peak download and upload rates</li>
<li><strong>Reset:</strong> Resets when the page is refreshed or reloaded</li>
<li><strong>Display:</strong> Shown next to current rates for easy comparison</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Historical Graph</h4>
<p class="text-base/80 mb-3">
Click the "Graph" button in the top-right corner of each interface card to view a line chart showing network traffic trends over the last 10 minutes.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Time Range:</strong> Last 10 minutes of network activity</li>
<li><strong>Data Lines:</strong> Separate lines for download (green) and upload (blue) traffic</li>
<li><strong>Data Points:</strong> Up to 20 samples from Proxmox RRD data</li>
<li><strong>Interactive:</strong> Hover over data points to see exact values at specific times</li>
<li><strong>Auto-update:</strong> Graph updates automatically every 30 seconds with new data</li>
<li><strong>Toggle:</strong> Click "Graph" again to hide the chart</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Total Statistics</h4>
<p class="text-base/80 mb-3">
Displays cumulative data transfer totals from the VM's start, providing a long-term view of network usage.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Combined:</strong> Total of current download and upload rates</li>
<li><strong>Total In:</strong> Cumulative bytes received since VM start</li>
<li><strong>Total Out:</strong> Cumulative bytes sent since VM start</li>
<li><strong>Data Source:</strong> From Proxmox <code class="bg-background-secondary px-1 py-0.5 rounded text-xs">/status/current</code> endpoint</li>
<li><strong>Format:</strong> Human-readable format (B, KB, MB, GB) for easy reading</li>
</ul>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Multiple Interfaces</h4>
<p class="text-base/80 mb-3">
If your virtual machine has multiple network interfaces configured, each interface will be displayed in its own card with separate statistics and graphs.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Interface Identification:</strong> Each card shows the interface name and bridge (e.g., "net0 (Route1p2)")</li>
<li><strong>Independent Tracking:</strong> Each interface tracks its own rates, peaks, and history</li>
<li><strong>Layout:</strong> Multiple interfaces are displayed in a responsive grid layout</li>
<li><strong>Data Aggregation:</strong> Total statistics combine data from all interfaces</li>
</ul>
</div>
<div class="bg-info/10 border border-info/30 rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-1">Data Refresh Rate</p>
<p class="text-sm text-base/70">The Live Network Traffic section updates every 30 seconds to match Proxmox's RRD data sampling rate. This ensures that the displayed data accurately reflects the actual network activity without unnecessary API calls.</p>
</div>
</div>
</div>
</div>
<!-- Boot Settings Section - Expanded -->
<div x-show="activeSection === 'boot-settings'" x-transition style="display: none;" data-section-id="boot-settings">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-restart-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Boot Settings Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Boot Settings tab allows you to configure the boot order for your virtual machine. This determines the sequence in which the system attempts to boot from available devices.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-hard-drive-2-line class="size-5 text-base/60" />
Understanding Boot Order
</h3>
<p class="text-base/80 mb-3">
Boot order specifies the priority sequence for boot devices. The system will attempt to boot from each device in order until it finds a bootable medium. This is essential for controlling how your virtual machine starts.
</p>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<h4 class="text-lg font-semibold mb-3">Boot Process Flow</h4>
<div class="space-y-3">
<div class="flex items-start gap-3">
<div class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-semibold flex-shrink-0">1</div>
<div>
<p class="font-semibold text-sm">Power On / Reset</p>
<p class="text-sm text-base/70">VM receives power signal and firmware initializes</p>
</div>
</div>
<div class="flex items-start gap-3">
<div class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-semibold flex-shrink-0">2</div>
<div>
<p class="font-semibold text-sm">Firmware Initialization</p>
<p class="text-sm text-base/70">BIOS or UEFI firmware loads and initializes hardware</p>
</div>
</div>
<div class="flex items-start gap-3">
<div class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-semibold flex-shrink-0">3</div>
<div>
<p class="font-semibold text-sm">Boot Device Check</p>
<p class="text-sm text-base/70">Firmware checks devices in configured boot order</p>
</div>
</div>
<div class="flex items-start gap-3">
<div class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-semibold flex-shrink-0">4</div>
<div>
<p class="font-semibold text-sm">Bootable Media Detection</p>
<p class="text-sm text-base/70">If device contains bootable media, system boots from it</p>
</div>
</div>
<div class="flex items-start gap-3">
<div class="flex items-center justify-center w-8 h-8 rounded-full bg-primary/10 text-primary font-semibold flex-shrink-0">5</div>
<div>
<p class="font-semibold text-sm">OS Load</p>
<p class="text-sm text-base/70">Operating system bootloader executes and OS starts</p>
</div>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">Device Types</h4>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Device Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Description</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Common Use Case</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Hard Disk</td>
<td class="py-2 px-4">Primary storage device containing the operating system</td>
<td class="py-2 px-4">Normal operation (highest priority)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">CD/DVD</td>
<td class="py-2 px-4">Optical media drive for installation or recovery</td>
<td class="py-2 px-4">OS installation, system recovery</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Network (PXE)</td>
<td class="py-2 px-4">Network boot via Preboot Execution Environment</td>
<td class="py-2 px-4">Automated deployment, diskless systems</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">USB</td>
<td class="py-2 px-4">External storage devices</td>
<td class="py-2 px-4">Portable installations, recovery media</td>
</tr>
</tbody>
</table>
<h4 class="text-lg font-semibold mt-6 mb-3">QEMU Boot Sequence</h4>
<p class="text-base/80 mb-3">
QEMU uses a default platform boot sequence if no explicit boot order is configured. The boot order is populated directly from the QEMU configuration via the QEMU API.
</p>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-2">Default Boot Behavior</p>
<p class="text-sm text-base/70 mb-2">If no boot order is set, QEMU follows the standard platform boot sequence:</p>
<ol class="list-decimal list-inside text-sm text-base/70 space-y-1 ml-2">
<li>Hard disk (primary storage)</li>
<li>CD/DVD (if attached)</li>
<li>Network (if PXE is configured)</li>
<li>Other devices</li>
</ol>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3">How to Configure Boot Order</h4>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<ol class="list-decimal list-inside space-y-3 text-sm text-base/70">
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Navigate</span> to the Boot Settings tab
</li>
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Review</span> the current boot order in the "Current Boot Order" section
</li>
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Add Devices</span> using the "Add" button to include devices in the boot priority list
</li>
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Auto-Detection</span> - Devices are automatically detected from the QEMU configuration
</li>
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Save</span> your boot order configuration
</li>
<li class="flex items-start gap-2">
<span class="font-semibold text-base">Restart</span> the VM for changes to take effect (changes apply on next power event)
</li>
</ol>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
QEMU Boot Configuration API
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
How the Platform Updates Boot Order
</p>
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>The control panel translates your boot order selections into the same parameters Proxmox expects (for example, <code>scsi0</code> for the primary disk, <code>ide2</code> for a virtual CD/DVD, and <code>net0</code> for PXE). When you save, the backend updates the VM configuration on the node so the hypervisor knows which device to start from first.</p>
<p>Legacy BIOS-style flags such as <code>order=dc</code> are mapped automatically, and storage mappings are inferred from the datastore you chose—local-LVM disks become SCSI devices, ISO images are attached as virtual IDE drives, and network boot entries map to the network adapters listed in the UI.</p>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-cpu-line class="size-5 text-base/60" />
UEFI Boot Configuration
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">UEFI Boot Manager Configuration:</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># EFI Boot Manager entries (stored in EFI disk)
# Boot0000: Hard Disk
# Boot0001: CD-ROM
# Boot0002: Network
# UEFI boot order is managed via EFI variables
# Accessible through QEMU Guest Agent or UEFI shell:
# efibootmgr -o 0000,0001,0002
# QEMU UEFI boot configuration
{
"bios": "ovmf",
"efidisk0": "local-lvm:vm-100-disk-1,size=4M",
"boot": "order=scsi0"
}</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-router-line class="size-5 text-base/60" />
PXE Network Boot (RFC 2131, 2132)
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">PXE Boot Process:</p>
<ol class="list-decimal list-inside text-sm text-base/70 space-y-2 mb-3">
<li><strong>DHCP Discovery:</strong> VM broadcasts DHCP request (RFC 2131)</li>
<li><strong>DHCP Offer:</strong> Server responds with IP, boot server, boot file</li>
<li><strong>TFTP Download:</strong> Boot file (pxelinux.0) downloaded via TFTP (RFC 1350)</li>
<li><strong>Boot Execution:</strong> PXE loader executes boot file</li>
</ol>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># DHCP option 66 (Boot Server Host Name)
# DHCP option 67 (Bootfile Name)
# QEMU PXE configuration
-netdev user,id=net0 \\
-device virtio-net-pci,netdev=net0 \\
-boot n</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-bug-line class="size-5 text-base/60" />
Boot Debugging
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Debugging Techniques:</p>
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>Use the “Console” tab or the node’s shell tools to inspect QEMU devices. Commands like <code>qm monitor &lt;vmid&gt; info block</code> or <code>qm config &lt;vmid&gt;</code> show which disks are attached and the current boot priorities.</p>
<p>For UEFI guests, enabling OVMF debugging or attaching a serial console can capture early boot logs. The platform exposes toggles for these options so you don’t have to edit config files manually.</p>
<p>Whenever you open the web console, the panel requests a one-time VNC/WebSocket tunnel from the hypervisor. This lets you troubleshoot boot issues immediately without handling node credentials yourself.</p>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<div class="bg-success/10 border border-success/30 rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-checkbox-circle-line class="size-4 text-success" />
Best Practices
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Set hard disk as primary boot device</li>
<li>Use CD/DVD only for installation</li>
<li>Remove temporary boot devices after use</li>
<li>Test changes on non-production systems</li>
<li>Document boot order for disaster recovery</li>
</ul>
</div>
<div class="bg-error/10 border border-error/30 rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-alert-line class="size-4 text-error" />
Common Issues
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>VM won't boot - check boot device</li>
<li>Changes not applied - restart required</li>
<li>Wrong device boots - verify order</li>
<li>UEFI boot fails - check EFI disk</li>
</ul>
</div>
</div>
</div>
<!-- Continue with other sections... Due to length, I'll add key sections with tables and icons -->
<!-- Network, Subdomain, Cloud-init, Display, System, Backups, Console sections will follow similar pattern -->
<!-- I'll continue with a few more key sections to show the pattern, then you can see the full implementation -->
<!-- Network Section with Tables -->
<div x-show="activeSection === 'network'" x-transition style="display: none;" data-section-id="network">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-wifi-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Network Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Network tab provides comprehensive network configuration and monitoring capabilities. It displays assigned IP addresses, network interfaces, and allows configuration of network devices and addresses.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-global-line class="size-5 text-base/60" />
IP Address Standards
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Protocol</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Scope</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">RFC Standard(s)</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Address Format / Examples</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold align-top" rowspan="2">IPv4</td>
<td class="py-2 px-4 font-semibold">Public</td>
<td class="py-2 px-4">
<span class="font-mono">RFC 791</span><br>
Internet Protocol (IPv4)
</td>
<td class="py-2 px-4">
32-bit dotted decimal addresses routable on the public Internet.<br>
<span class="font-mono"><code>203.0.113.10</code>, <code>198.51.100.25</code></span>
</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Private</td>
<td class="py-2 px-4">
<span class="font-mono">RFC 1918</span><br>
Address Allocation for Private Internets
</td>
<td class="py-2 px-4">
Non-routable private ranges used inside LANs and VPNs only:<br>
<span class="font-mono"><code>10.0.0.0/8</code>, <code>172.16.0.0/12</code>, <code>192.168.0.0/16</code></span>
</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold align-top" rowspan="2">IPv6</td>
<td class="py-2 px-4 font-semibold">Global Unicast (Public)</td>
<td class="py-2 px-4">
<span class="font-mono">RFC 2460 / RFC 8200</span><br>
Internet Protocol Version 6 (IPv6)
</td>
<td class="py-2 px-4">
128-bit hexadecimal addresses routable on the public Internet.<br>
<span class="font-mono"><code>2001:db8::100</code>, <code>2a00:1450::1</code></span>
</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Unique Local & Link-Local (Private)</td>
<td class="py-2 px-4">
<span class="font-mono">RFC 4193</span> – Unique Local IPv6 Addresses (ULA)<br>
<span class="font-mono">RFC 4291</span> – IPv6 Addressing Architecture
</td>
<td class="py-2 px-4">
Private / non-routable IPv6 ranges:<br>
• ULA (local-only): <span class="font-mono"><code>fd00::/8</code></span><br>
• Link-local (per‑link only): <span class="font-mono"><code>fe80::/10</code></span>
</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4">Network Device Types</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Device Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Performance</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Compatibility</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Best For</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VirtIO</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
</div>
</td>
<td class="py-2 px-4">Linux (excellent), Windows (good)</td>
<td class="py-2 px-4">Production Linux systems</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">E1000</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">All operating systems</td>
<td class="py-2 px-4">Maximum compatibility</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">rtl8139</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
<x-ri-star-line class="size-4 text-base/30" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">Legacy systems</td>
<td class="py-2 px-4">Old operating systems</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">VMXNET3</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">Best on VMware‑optimised guest OS images (Windows, some enterprise Linux)</td>
<td class="py-2 px-4">Migrated workloads from VMware or environments requiring VMXNET3 semantics</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Network Architecture & Protocol Details
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-router-line class="size-4 text-primary" />
Network Topology & Bridge Configuration
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code>Physical Host (Management Node)
└── Linux Bridge (vmbr0) - Managed by platform
├── Host Interface (eth0) - Physical NIC
├── VLAN Interfaces (vmbr0.100, vmbr0.200)
└── TAP Device (vnetX) - Created per VM
└── QEMU VM
└── VirtIO/E1000 Network Adapter
└── Guest OS Network Stack
# Bridge Configuration (managed by platform)
# /etc/network/interfaces or netplan
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_vlan_aware yes</code></pre>
<p class="text-xs text-base/60 mt-2">
TAP devices operate at Layer 2 (Ethernet) and are bridged to the physical network interface. The management platform automatically creates and manages TAP devices for each VM network interface.
</p>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
How Network Settings Are Applied
</p>
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>The Network tab mirrors the bridge definitions on each Proxmox node (for example, <code>vmbr0</code> for the public network). When you attach a NIC in the UI, the backend writes the same <code>net0=...</code> syntax that Proxmox uses, including MAC address, bridge, firewall flag, VLAN tag, and rate limits.</p>
<p>This means any change you make—adding a VirtIO adapter, toggling the firewall, or tagging a VLAN—is propagated down to the node in the exact format it expects, ensuring the guest receives the configuration you see on screen.</p>
</div>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
QEMU Network Device Configuration
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># QEMU command-line equivalent
-netdev type=tap,id=net0,ifname=vnet0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown \\
-device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:56,bus=pcie.0,addr=0x2
# Configuration parameters:
# -netdev type: tap|user|bridge|socket
# -device: virtio-net-pci|e1000|rtl8139
# mac: MAC address (auto-generated if not specified)
# bus: PCIe bus location
# addr: PCIe device address</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
Network Security & Isolation
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Feature</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Implementation</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Security Level</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">MAC Address Filtering</td>
<td class="py-2 px-4">Linux bridge ebtables rules</td>
<td class="py-2 px-4">Layer 2 protection</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VLAN Isolation</td>
<td class="py-2 px-4">802.1Q VLAN tagging</td>
<td class="py-2 px-4">Network segmentation</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Firewall Rules</td>
<td class="py-2 px-4">iptables/nftables on host</td>
<td class="py-2 px-4">Layer 3/4 filtering</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Private Networks</td>
<td class="py-2 px-4">RFC 1918 address space</td>
<td class="py-2 px-4">NAT isolation</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-speed-up-line class="size-5 text-base/60" />
Performance Tuning
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">VirtIO Performance Optimization:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 mb-3">
<li><strong>Multiqueue:</strong> Enable with <code>mq=on,vectors=4</code> for multi-core VMs</li>
<li><strong>vhost-net:</strong> Kernel-based packet processing (lower latency)</li>
<li><strong>RSS (Receive Side Scaling):</strong> Distribute network load across CPU cores</li>
<li><strong>TSO/GSO:</strong> TCP Segmentation Offload for large packet handling</li>
</ul>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Optimized VirtIO configuration
-device virtio-net-pci,netdev=net0,mq=on,vectors=4
# Enable vhost-net in QEMU
-netdev type=tap,id=net0,vhost=on</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-bug-line class="size-5 text-base/60" />
Network Debugging
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Troubleshooting Tips:</p>
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>Use standard Linux networking tools on the node, such as <code>ip link show type tap</code> to inspect TAP interfaces, <code>tcpdump -i vmbr0</code> to watch bridge traffic, and <code>bridge fdb show</code> to view MAC tables.</p>
<p>Inside the hypervisor shell, <code>qm config &lt;vmid&gt;</code> lists the virtual NICs (net0, net1, etc.) exactly as the platform created them. You can also open a QEMU monitor session (<code>qm monitor &lt;vmid&gt;</code>) and run <code>info network</code> for deeper diagnostics.</p>
<p>If you suspect bridge or firewall issues, <code>brctl show vmbr0</code>, <code>bridge vlan show</code>, and filtering <code>iptables -L</code> output by bridge name are quick ways to confirm whether packets are being forwarded.</p>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
Platform Firewall Integration
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
The management platform includes an integrated firewall system that can apply rules at the VM level, bridge level, or cluster level.
</p>
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>Toggling the firewall slider on a NIC tells the backend to recreate that interface definition with the firewall flag enabled. Any rules you define in the UI (direction, action, CIDRs, ports, comments) are stored centrally and rendered to iptables on the node, so you don’t have to craft rule syntax yourself.</p>
<p>The platform automatically maps rules to the correct chains—INPUT for traffic hitting the node, FORWARD for VM-to-VM flows, and OUTPUT for traffic originating from the VM—keeping your policy consistent across the cluster.</p>
</div>
</div>
</div>
<!-- RFC Standards Section -->
<div x-show="activeSection === 'rfc-standards'" x-transition style="display: none;" data-section-id="rfc-standards">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-file-paper-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">RFC Standards Reference</h2>
</div>
<p class="text-base/80 mb-6">
This section provides a comprehensive reference to all RFC (Request for Comments) standards that apply to virtual machine configuration and networking.
</p>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">RFC Number</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Title</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Category</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Applies To</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 791</td>
<td class="py-2 px-4">Internet Protocol (IPv4)</td>
<td class="py-2 px-4">Network</td>
<td class="py-2 px-4">IPv4 packet format, addressing, and routing behaviour used by all IPv4 networking features.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 1034</td>
<td class="py-2 px-4">Domain Names – Concepts and Facilities</td>
<td class="py-2 px-4">DNS</td>
<td class="py-2 px-4">High-level DNS model and resolution process referenced by DNS and subdomain configuration.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 1035</td>
<td class="py-2 px-4">Domain Names – Implementation and Specification</td>
<td class="py-2 px-4">DNS</td>
<td class="py-2 px-4">Hostname syntax and record formats; hostname/subdomain validation rules in the UI are based on this RFC.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 1918</td>
<td class="py-2 px-4">Address Allocation for Private Internets</td>
<td class="py-2 px-4">Network</td>
<td class="py-2 px-4">Defines private IPv4 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) used to distinguish public vs. private addresses in UI explanations.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 2460 / RFC 8200</td>
<td class="py-2 px-4">Internet Protocol Version 6 (IPv6)</td>
<td class="py-2 px-4">Network</td>
<td class="py-2 px-4">IPv6 header format and addressing used by IPv6 network configuration and Network Analysis.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 3330 / RFC 6890</td>
<td class="py-2 px-4">Special-Use IPv4 Addresses</td>
<td class="py-2 px-4">Network</td>
<td class="py-2 px-4">Special-purpose IPv4 ranges (loopback, link-local, multicast) referenced when explaining address types.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 3596</td>
<td class="py-2 px-4">DNS Extensions to Support IPv6</td>
<td class="py-2 px-4">DNS</td>
<td class="py-2 px-4">AAAA record format used for IPv6 DNS entries in network examples.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 4253</td>
<td class="py-2 px-4">SSH Transport Layer Protocol</td>
<td class="py-2 px-4">Security</td>
<td class="py-2 px-4">SSH key formats and transport, referenced in SSH key management and Cloud-init examples.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 5656</td>
<td class="py-2 px-4">Elliptic Curve Algorithm Integration in SSH</td>
<td class="py-2 px-4">Security</td>
<td class="py-2 px-4">ECDSA SSH keys used in recommended key types for secure access.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 6143</td>
<td class="py-2 px-4">The Remote Framebuffer Protocol</td>
<td class="py-2 px-4">Remote Access</td>
<td class="py-2 px-4">VNC/NoVNC protocol used for graphical console access.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-mono font-semibold">RFC 7230–7235</td>
<td class="py-2 px-4">HTTP/1.1 Message Syntax and Routing</td>
<td class="py-2 px-4">API</td>
<td class="py-2 px-4">HTTP semantics for all API requests between the control panel and Proxmox/Core Router services.</td>
</tr>
<tr>
<td class="py-2 px-4 font-mono font-semibold">RFC 8709</td>
<td class="py-2 px-4">Ed25519 for SSH</td>
<td class="py-2 px-4">Security</td>
<td class="py-2 px-4">Defines ED25519 SSH keys, which are recommended as a modern, secure key type.</td>
</tr>
</tbody>
</table>
</div>
<!-- Troubleshooting Section -->
<div x-show="activeSection === 'troubleshooting'" x-transition style="display: none;" data-section-id="troubleshooting">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-tools-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Troubleshooting Guide</h2>
</div>
<p class="text-base/80 mb-6">
Common issues and their solutions for virtual machine management.
</p>
<div class="space-y-4">
<div class="bg-background border border-neutral rounded-lg p-5">
<h3 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-error-warning-line class="size-5 text-error" />
VM Won't Boot
</h3>
<table class="w-full text-sm mb-3">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Symptom</th>
<th class="text-left py-2 px-2 font-semibold">Possible Cause</th>
<th class="text-left py-2 px-2 font-semibold">Solution</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Black screen, no boot</td>
<td class="py-2 px-2">No bootable media in boot order</td>
<td class="py-2 px-2">Check boot order, ensure OS is installed</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Boot loop</td>
<td class="py-2 px-2">Corrupted boot sector or OS</td>
<td class="py-2 px-2">Restore from backup or reinstall OS</td>
</tr>
<tr>
<td class="py-2 px-2">Firmware error</td>
<td class="py-2 px-2">Incompatible firmware type</td>
<td class="py-2 px-2">Change firmware type in System tab</td>
</tr>
</tbody>
</table>
</div>
<!-- More troubleshooting sections... -->
</div>
</div>
<!-- Subdomain Section -->
<div x-show="activeSection === 'subdomain'" x-transition style="display: none;" data-section-id="subdomain">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-global-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Subdomain Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Subdomain tab allows you to create and manage DNS subdomains for your virtual machine. Each subdomain points to one of your assigned public IP addresses.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-file-list-3-line class="size-5 text-base/60" />
DNS Record Types
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Record Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">RFC Standard</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Purpose</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Example</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">A Record</td>
<td class="py-2 px-4">RFC 1035</td>
<td class="py-2 px-4">Maps domain to IPv4 address</td>
<td class="py-2 px-4"><code>web.dns.virtnet.host → 192.168.1.1</code></td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">AAAA Record</td>
<td class="py-2 px-4">RFC 3596</td>
<td class="py-2 px-4">Maps domain to IPv6 address</td>
<td class="py-2 px-4"><code>web.dns.virtnet.host → 2001:db8::1</code></td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Wildcard (*)</td>
<td class="py-2 px-4">RFC 1035</td>
<td class="py-2 px-4">Matches all subdomains</td>
<td class="py-2 px-4"><code>*.web.dns.virtnet.host</code></td>
</tr>
</tbody>
</table>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-2">Subdomain Limitations</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Only A and AAAA records are created automatically</li>
<li>One subdomain per public IP address</li>
<li>Wildcard subdomains (*) are automatically created</li>
<li>PTR, MX, NS, and other record types are not supported</li>
</ul>
</div>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
DNS Protocol Implementation (RFC 1035)
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
DNS Record Structure
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># DNS Resource Record Format (RFC 1035 Section 3.2.1)
NAME TYPE CLASS TTL RDLENGTH RDATA
web.example.com A IN 3600 4 192.168.1.1
# DNS Message Format
Header (12 bytes)
- ID (16 bits): Transaction identifier
- Flags (16 bits): QR, Opcode, AA, TC, RD, RA, Z, RCODE
- QDCOUNT (16 bits): Number of questions
- ANCOUNT (16 bits): Number of answers
- NSCOUNT (16 bits): Number of authority records
- ARCOUNT (16 bits): Number of additional records
Question Section
- QNAME: Domain name (variable length)
- QTYPE: Record type (A=1, AAAA=28)
- QCLASS: Class (IN=1)
Answer Section
- Resource Records (variable)</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-time-line class="size-5 text-base/60" />
DNS TTL & Propagation (RFC 1035 Section 3.2.1)
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">TTL Value</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Cache Duration</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Use Case</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4"><code>60</code></td>
<td class="py-2 px-4">1 minute</td>
<td class="py-2 px-4">Frequent changes, testing</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4"><code>300</code></td>
<td class="py-2 px-4">5 minutes</td>
<td class="py-2 px-4">Development environments</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4"><code>3600</code></td>
<td class="py-2 px-4">1 hour</td>
<td class="py-2 px-4">Standard production (default)</td>
</tr>
<tr>
<td class="py-2 px-4"><code>86400</code></td>
<td class="py-2 px-4">24 hours</td>
<td class="py-2 px-4">Stable services</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
DNS Security (DNSSEC, RFC 4033-4035)
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
While DNSSEC is not currently implemented in the subdomain system, understanding DNS security is important:
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li><strong>RFC 4033:</strong> DNS Security Introduction and Requirements</li>
<li><strong>RFC 4034:</strong> Resource Records for DNS Security Extensions</li>
<li><strong>RFC 4035:</strong> Protocol Modifications for DNS Security</li>
<li><strong>TSIG (RFC 2845):</strong> Transaction Signatures for DNS updates</li>
</ul>
</div>
</div>
<!-- Cloud-init Section -->
<div x-show="activeSection === 'cloud-init'" x-transition style="display: none;" data-section-id="cloud-init">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-cloud-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Cloud-init Tab</h2>
</div>
<p class="text-base/80 mb-6">
Cloud-init is a standard method for customizing cloud instances during boot. It allows you to configure users, SSH keys, network settings, and more automatically when the VM first starts.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-user-settings-line class="size-5 text-base/60" />
Configuration Options
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Section</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Configuration</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Applied On</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Access & Credentials</td>
<td class="py-2 px-4">Users, passwords, SSH keys</td>
<td class="py-2 px-4">First boot</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Network Configuration</td>
<td class="py-2 px-4">Static IPs, gateways, DNS</td>
<td class="py-2 px-4">First boot</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">DNS Settings</td>
<td class="py-2 px-4">Nameservers</td>
<td class="py-2 px-4">First boot</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">OS Type</td>
<td class="py-2 px-4">Operating system selection</td>
<td class="py-2 px-4">Configuration format</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Cloud-init Data Sources & Configuration
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-file-code-line class="size-4 text-primary" />
Cloud-init YAML Configuration
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># /var/lib/cloud/seed/nocloud/user-data
#cloud-config
users:
- name: admin
groups: sudo
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
lock_passwd: false
passwd: $6$rounds=4096$salt$hashedpassword
# Network configuration (version 2)
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
# DNS configuration
manage_resolv_conf: true
resolv_conf:
nameservers: ['8.8.8.8', '1.1.1.1']
searchdomains: ['example.com']</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-terminal-box-line class="size-5 text-base/60" />
QEMU Cloud-init Parameters
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># QEMU cloud-init configuration
{
"cicustom": "user=local:snippets/user-data",
"cipassword": "$5$rounds=5000$salt$hash",
"ciuser": "admin",
"ipconfig0": "ip=192.168.1.100/24,gw=192.168.1.1",
"nameserver": "8.8.8.8 8.8.4.4",
"searchdomain": "example.com",
"ostype": "l26" # Linux 2.6+ kernel
}
# Cloud-init data source (NoCloud)
-drive file=user-data.img,format=raw,if=virtio
-drive file=meta-data.img,format=raw,if=virtio</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
SSH Key Management (RFC 4253)
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">SSH Public Key Format:</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># RSA key (RFC 4253 Section 6.6)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... user@host
# ED25519 key (RFC 8709)
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@host
# ECDSA key (RFC 5656)
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBB... user@host
# Key fingerprint (SHA256)
ssh-keygen -lf ~/.ssh/id_rsa.pub
# SHA256:AbCdEf1234567890... user@host (RSA)</code></pre>
<p class="text-xs text-base/60 mt-2">
<strong>Security Best Practice:</strong> Use ED25519 keys (stronger, faster) or RSA 4096-bit minimum.
</p>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-router-line class="size-5 text-base/60" />
Network Configuration Deep Dive
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Static IP Configuration (RFC 791/2460):</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># IPv4 Static Configuration
network:
version: 2
ethernets:
eth0:
addresses:
- 192.168.1.100/24 # CIDR notation
gateway4: 192.168.1.1 # Default gateway
routes:
- to: 10.0.0.0/8
via: 192.168.1.254
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
search: [example.com]
# IPv6 Static Configuration (RFC 2460)
network:
version: 2
ethernets:
eth0:
addresses:
- 2001:db8::100/64
gateway6: 2001:db8::1
nameservers:
addresses: [2001:4860:4860::8888]</code></pre>
</div>
</div>
<!-- Display Section -->
<div x-show="activeSection === 'display'" x-transition style="display: none;" data-section-id="display">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-computer-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Display Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Display tab allows you to configure the virtual graphics adapter and video memory for your virtual machine. These settings affect how the VM displays output and can impact performance in graphical environments.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-settings-3-line class="size-5 text-base/60" />
Display Adapter Types - Complete Reference
</h3>
<div class="space-y-6 mb-6">
<!-- VirtIO-GPU -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-star-fill class="size-5 text-warning" />
VirtIO-GPU (Recommended for Linux)
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">Paravirtualized GPU (VirtIO specification)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">Excellent - Hardware acceleration support</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Max VRAM</td>
<td class="py-2 px-4">256 MB (configurable in 16 MB increments)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Resolution Support</td>
<td class="py-2 px-4">Up to 4K (3840x2160) and higher</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">Linux (excellent), Windows 10+ (good with drivers)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Features</td>
<td class="py-2 px-4">Hardware acceleration, 3D acceleration (experimental), multiple displays</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">QEMU Device</td>
<td class="py-2 px-4"><code>virtio-gpu-pci</code></td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Implements the VirtIO GPU specification for paravirtualized graphics</li>
<li>Uses host GPU resources when available (GPU passthrough not required)</li>
<li>Supports OpenGL ES 2.0/3.0 for 3D acceleration (requires host GPU support)</li>
<li>Lower CPU overhead compared to emulated VGA adapters</li>
<li>Supports multiple virtual displays (up to 4 heads)</li>
<li>Efficient memory management with shared memory regions</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "virtio",
"memory": 4096,
"balloon": 0
}
# QEMU command-line equivalent
-device virtio-gpu-pci,id=gp0,max_outputs=1 \\
-global virtio-gpu-pci.virgl=on \\
-global virtio-gpu-pci.edid=on
# With 3D acceleration (requires host GPU)
-device virtio-gpu-pci,virgl=on</code></pre>
</div>
</div>
<!-- Standard VGA -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-computer-line class="size-5 text-base/60" />
Standard VGA (Cirrus CLGD 5446)
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">Emulated VGA adapter (Cirrus Logic CLGD 5446)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">Good - Software emulation</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VRAM</td>
<td class="py-2 px-4">16 MB (fixed, not configurable)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Resolution Support</td>
<td class="py-2 px-4">Up to 1920x1200 (depends on guest drivers)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">All operating systems (universal compatibility)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Features</td>
<td class="py-2 px-4">VGA text mode, basic 2D graphics, VBE (VESA BIOS Extensions)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">QEMU Device</td>
<td class="py-2 px-4"><code>VGA</code> or <code>cirrus-vga</code></td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Emulates the Cirrus Logic CLGD 5446 PCI VGA controller</li>
<li>Full software emulation - no host GPU required</li>
<li>Supports VESA BIOS Extensions (VBE) for high-resolution modes</li>
<li>Compatible with all guest operating systems without special drivers</li>
<li>Higher CPU overhead due to software emulation</li>
<li>Ideal for legacy systems and maximum compatibility requirements</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "std"
}
# QEMU command-line equivalent
-vga std
# or explicitly
-device VGA</code></pre>
</div>
</div>
<!-- VMware Compatible -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-cloud-line class="size-5 text-base/60" />
VMware Compatible (VMware SVGA)
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">Emulated VMware SVGA II adapter</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">Good - Optimized for VMware compatibility</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VRAM</td>
<td class="py-2 px-4">Up to 256 MB (configurable)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Resolution Support</td>
<td class="py-2 px-4">Up to 2560x1600 (with VMware drivers)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">All OS (best with VMware Tools/drivers installed)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Features</td>
<td class="py-2 px-4">VMware SVGA II protocol, 2D acceleration, seamless mouse integration</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">QEMU Device</td>
<td class="py-2 px-4"><code>vmware-svga</code></td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Emulates VMware's SVGA II graphics adapter</li>
<li>Designed for compatibility with VMware virtual machines</li>
<li>Works best with VMware Tools or open-vm-tools installed in guest</li>
<li>Supports 2D hardware acceleration when drivers are available</li>
<li>Good choice for migrating VMs from VMware environments</li>
<li>Supports multiple resolutions and color depths</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "vmware"
}
# QEMU command-line equivalent
-device vmware-svga,id=video0,vram=256</code></pre>
</div>
</div>
<!-- QXL -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-settings-2-line class="size-5 text-base/60" />
QXL (QEMU Accelerated Graphics)
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">Paravirtualized 2D graphics adapter</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">Very Good - 2D acceleration support</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VRAM</td>
<td class="py-2 px-4">Up to 64 MB (configurable, default 16 MB)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Resolution Support</td>
<td class="py-2 px-4">Up to 2560x1600 (with QXL drivers)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">Linux (excellent), Windows (good with SPICE drivers)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Features</td>
<td class="py-2 px-4">2D acceleration, multiple displays, SPICE protocol support</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">QEMU Device</td>
<td class="py-2 px-4"><code>qxl-vga</code> or <code>qxl</code></td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Designed for use with SPICE (Simple Protocol for Independent Computing Environments)</li>
<li>Provides 2D hardware acceleration through paravirtualization</li>
<li>Supports up to 4 virtual displays (heads)</li>
<li>Optimized for remote desktop protocols (SPICE, VNC)</li>
<li>Requires QXL drivers in guest OS for best performance</li>
<li>Lower CPU usage than emulated VGA for 2D operations</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "qxl"
}
# QEMU command-line equivalent
-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864
# With SPICE
-device qxl-vga,id=video0 \\
-spice port=5900,disable-ticketing</code></pre>
</div>
</div>
<!-- No Display -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-eye-off-line class="size-5 text-base/60" />
No Display (Headless Mode)
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">No graphics adapter (VGA disabled)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">N/A - No graphics overhead</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VRAM</td>
<td class="py-2 px-4">0 MB (no graphics memory allocated)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Console Access</td>
<td class="py-2 px-4">Serial console only (no VNC/graphical console)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">All OS (requires serial console support)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Use Case</td>
<td class="py-2 px-4">Headless servers, minimal resource usage, cloud instances</td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Completely removes VGA adapter from VM configuration</li>
<li>Reduces memory footprint (no VRAM allocation)</li>
<li>Eliminates graphics processing overhead</li>
<li>Requires serial console for access (configure serial0)</li>
<li>Ideal for server workloads that don't need graphical output</li>
<li>Some OS installation media may require VGA for installation</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "none"
}
# QEMU command-line equivalent
-nodefaults -nographic
# or
-vga none -serial stdio</code></pre>
</div>
</div>
<!-- Serial Console -->
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-lg font-semibold mb-3 flex items-center gap-2">
<x-ri-terminal-box-line class="size-5 text-base/60" />
Serial Console
</h4>
<table class="w-full text-sm mb-4">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Type</td>
<td class="py-2 px-4">Text-only console via serial port</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Performance</td>
<td class="py-2 px-4">N/A - Text output only</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VRAM</td>
<td class="py-2 px-4">0 MB (no graphics)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Console Access</td>
<td class="py-2 px-4">Serial port (ttyS0, COM1, etc.)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">OS Support</td>
<td class="py-2 px-4">All OS (requires serial console kernel parameter)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Use Case</td>
<td class="py-2 px-4">Server management, remote administration, automation</td>
</tr>
</tbody>
</table>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2">Technical Details:</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
<li>Emulates standard PC serial ports (COM1-COM4, ttyS0-ttyS3)</li>
<li>Provides text-only console access via serial interface</li>
<li>Can be redirected to network socket, file, or stdio</li>
<li>Requires guest OS to output console to serial port</li>
<li>Linux: Use kernel parameter <code>console=ttyS0</code></li>
<li>Windows: Requires special configuration for serial console</li>
</ul>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2">Configuration Example:</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto"><code># Platform configuration
{
"vga": "serial0",
"serial0": "socket"
}
# QEMU command-line equivalent
-vga serial0 -serial stdio
# or network socket
-serial telnet:localhost:4444,server,nowait</code></pre>
</div>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-bar-chart-box-line class="size-5 text-base/60" />
Display Adapter Comparison Matrix
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Adapter</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Performance</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Max VRAM</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Linux</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Windows</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">3D Accel</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Multi-Display</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VirtIO-GPU</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
</div>
</td>
<td class="py-2 px-4">256 MB</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Excellent</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-warning inline" /> Good (10+)</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes (4)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Standard VGA</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">16 MB</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Good</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Excellent</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">VMware SVGA</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">256 MB</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Good</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Excellent</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes (1)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">QXL</td>
<td class="py-2 px-4">
<div class="flex items-center gap-1">
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-fill class="size-4 text-warning" />
<x-ri-star-line class="size-4 text-base/30" />
</div>
</td>
<td class="py-2 px-4">64 MB</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Excellent</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-warning inline" /> Good</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes (4)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">No Display</td>
<td class="py-2 px-4">N/A</td>
<td class="py-2 px-4">0 MB</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
<td class="py-2 px-4">N/A</td>
<td class="py-2 px-4">N/A</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-settings-3-line class="size-5 text-base/60" />
Video Memory Configuration
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">VRAM Allocation Guidelines:</p>
<table class="w-full text-sm mb-3">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Use Case</th>
<th class="text-left py-2 px-2 font-semibold">Recommended VRAM</th>
<th class="text-left py-2 px-2 font-semibold">Resolution</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Text console only</td>
<td class="py-2 px-2">16 MB</td>
<td class="py-2 px-2">N/A</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Basic desktop (1024x768)</td>
<td class="py-2 px-2">32-64 MB</td>
<td class="py-2 px-2">1024x768</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Standard desktop (1920x1080)</td>
<td class="py-2 px-2">64-128 MB</td>
<td class="py-2 px-2">1920x1080</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">High-res desktop (2560x1440)</td>
<td class="py-2 px-2">128-192 MB</td>
<td class="py-2 px-2">2560x1440</td>
</tr>
<tr>
<td class="py-2 px-2">4K display (3840x2160)</td>
<td class="py-2 px-2">256 MB</td>
<td class="py-2 px-2">3840x2160</td>
</tr>
</tbody>
</table>
<p class="text-xs text-base/60">
<strong>Note:</strong> VRAM is allocated from VM's main memory. Higher VRAM reduces available RAM for the guest OS. Use the minimum required for your use case.
</p>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Platform Display Configuration API
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<div class="bg-background-secondary/60 p-3 rounded text-xs text-base/80 space-y-2">
<p>Changing the display adapter in the UI instructs the backend to update the VM’s <code>vga</code> parameter to VirtIO, Standard VGA, VMware SVGA, QXL, or “none” for headless guests. Selecting “Serial console” rewires the console tab to a text-only TTY.</p>
<p>When you adjust video memory, the platform recalculates the amount of VRAM allocated from system RAM (16–256 MB for VirtIO-GPU) and pushes that value to the node. Disabling the memory balloon when large VRAM is requested prevents the guest from losing addressable space.</p>
</div>
</div>
</div>
<!-- Statistics Section -->
<div x-show="activeSection === 'statistics'" x-transition style="display: none;" data-section-id="statistics">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-bar-chart-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Statistics Tab</h2>
</div>
<p class="text-base/80 mb-6">
The Statistics tab provides comprehensive performance monitoring and historical data tracking for your virtual machine. It automatically collects metrics hourly and allows you to create manual snapshots for detailed analysis.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-history-line class="size-5 text-base/60" />
Automatic Statistics Collection
</h3>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm text-base/70 mb-3">
The system automatically collects statistics once every hour for all VPS, regardless of their power state or status. This ensures you have a continuous record of your server's performance over time.
</p>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Collection Frequency</td>
<td class="py-2 px-4">Once every hour (24 times per day)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Maximum Entries</td>
<td class="py-2 px-4">24 automatic statistics per server</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Retention Policy</td>
<td class="py-2 px-4">Oldest entries are automatically removed when limit is reached</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Power State</td>
<td class="py-2 px-4">Statistics collected regardless of VM power state (running, stopped, etc.)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Background Process</td>
<td class="py-2 px-4">Runs automatically via Laravel task scheduler</td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-refresh-line class="size-5 text-base/60" />
Manual Statistics Snapshots
</h3>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm text-base/70 mb-3">
In addition to automatic collection, you can create up to 5 manual statistics snapshots at any time. These are useful for capturing performance data at specific moments.
</p>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Maximum Manual Entries</td>
<td class="py-2 px-4">5 per server</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Use Cases</td>
<td class="py-2 px-4">Before/after configuration changes, troubleshooting, performance analysis</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Deletion</td>
<td class="py-2 px-4">Manual statistics can be deleted individually to free up space</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Data Captured</td>
<td class="py-2 px-4">Same metrics as automatic statistics (CPU, memory, disk, network, etc.)</td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-database-line class="size-5 text-base/60" />
Metrics Tracked
</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Metric</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Description</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Display Format</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">CPU Usage</td>
<td class="py-2 px-4">Current CPU utilization as a percentage of allocated CPU resources</td>
<td class="py-2 px-4">Percentage (0-100%)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Memory Usage</td>
<td class="py-2 px-4">Current RAM utilization compared to maximum allocated memory</td>
<td class="py-2 px-4">Percentage (0-100%)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Disk Usage</td>
<td class="py-2 px-4">Disk space used compared to total allocated disk space</td>
<td class="py-2 px-4">Percentage (0-100%)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Network In</td>
<td class="py-2 px-4">Total bytes received since VM start (difference shown between statistics)</td>
<td class="py-2 px-4">Bytes with rate (bytes/s)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Network Out</td>
<td class="py-2 px-4">Total bytes transmitted since VM start (difference shown between statistics)</td>
<td class="py-2 px-4">Bytes with rate (bytes/s)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Disk I/O</td>
<td class="py-2 px-4">Disk read and write operations (difference shown between statistics)</td>
<td class="py-2 px-4">Bytes (read/write)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Uptime</td>
<td class="py-2 px-4">Total time the VM has been running since last boot</td>
<td class="py-2 px-4">Formatted (days, hours, minutes, seconds)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">VM Status</td>
<td class="py-2 px-4">Current power state of the virtual machine</td>
<td class="py-2 px-4">Running, Stopped, etc.</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-task-line class="size-5 text-base/60" />
Task History
</h3>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm text-base/70 mb-3">
The Task History section displays all tasks executed on your virtual machine through the Proxmox API. This includes operations like VM management, configuration changes, backups, and other administrative tasks.
</p>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Auto-Refresh</td>
<td class="py-2 px-4">Task list refreshes every 10 seconds automatically</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Task Details</td>
<td class="py-2 px-4">Click the expand arrow to view detailed task information and logs</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Status Indicators</td>
<td class="py-2 px-4">Tasks show completion status (Success/Failure) with timestamps</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Task Types</td>
<td class="py-2 px-4">VM operations, configuration changes, backups, migrations, etc.</td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-information-line class="size-5 text-base/60" />
Understanding Statistics Data
</h3>
<div class="space-y-4 mb-6">
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-question-line class="size-4 text-primary" />
Network and Disk I/O Values
</h4>
<p class="text-sm text-base/70">
Network In/Out and Disk I/O values displayed in the statistics table represent the <strong>difference</strong> between the current statistic and the previous one. This shows the amount of data transferred or disk operations performed during the time period between statistics. The rate (bytes/s) is calculated based on the time difference between statistics.
</p>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-time-line class="size-4 text-primary" />
Statistics Retention
</h4>
<p class="text-sm text-base/70">
Automatic statistics are maintained at a maximum of 24 entries per server. When this limit is reached, the oldest automatic statistic is automatically removed when a new one is created. Manual statistics are separate and can be individually deleted. This ensures you always have the most recent 24 hours of automatic performance data while allowing flexibility for manual snapshots.
</p>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h4 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-server-line class="size-4 text-primary" />
Statistics Collection for All VPS
</h4>
<p class="text-sm text-base/70">
Statistics are collected for all virtual machines regardless of their power state (running, stopped, suspended) or service status. This ensures you have a complete historical record of your server's state and can track performance even when the VM is not actively running. Some metrics (like CPU usage) will be zero or minimal when the VM is stopped, but the data point is still valuable for historical tracking.
</p>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Technical Implementation
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
Background Statistics Collection
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Statistics collection runs via Laravel scheduler
# Scheduled command: proxmox:poll-statistics
# Frequency: Hourly (every hour on the hour)
# Command implementation:
php artisan schedule:run
# The scheduler executes:
Schedule::command(PollServerStatistics::class)
->description('Poll Proxmox server statistics hourly')
->hourly();
# Statistics are stored in database table:
# ext_proxmox_servers_statistics
# Fields tracked:
# - server_id: Foreign key to server
# - netin, netout: Network traffic counters
# - diskread, diskwrite: Disk I/O counters
# - diskused, diskmax: Disk space usage
# - memoryused, memorymax: Memory usage
# - cpuused, cpumax: CPU usage
# - uptime: VM uptime in seconds
# - vmstatus: Current VM power state
# - DateTime: Timestamp of statistic
# - is_automatic: Boolean flag (true for automatic, false for manual)</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-database-line class="size-4 text-secondary" />
Statistics Data Management
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Automatic statistics cleanup logic:
# When creating a new automatic statistic:
1. Create new statistic with is_automatic = true
2. Count total automatic statistics for server
3. If count > 24:
- Find oldest automatic statistics (order by DateTime ASC)
- Delete excess entries (count - 24)
- Keep exactly 24 automatic statistics
# Manual statistics management:
# - Users can create up to 5 manual statistics
# - Manual statistics are marked with is_automatic = false
# - Manual statistics can be deleted individually
# - Manual statistics are NOT automatically cleaned up
# Query examples:
# Get all statistics for a server:
SELECT * FROM ext_proxmox_servers_statistics
WHERE server_id = ?
ORDER BY DateTime DESC;
# Get only automatic statistics:
SELECT * FROM ext_proxmox_servers_statistics
WHERE server_id = ? AND is_automatic = true
ORDER BY DateTime DESC
LIMIT 24;
# Get manual statistics:
SELECT * FROM ext_proxmox_servers_statistics
WHERE server_id = ? AND is_automatic = false
ORDER BY DateTime DESC;</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-line-chart-line class="size-5 text-base/60" />
Live Telemetry Graphs
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-3">
The Live Telemetry section at the top of the Statistics tab shows real-time performance graphs sourced directly from the Proxmox RRD API. These graphs are optimized to load quickly and to avoid overloading either the browser or the API.
</p>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Graphs</td>
<td class="py-2 px-4">Processor Utilization, Network Traffic, Memory Utilization, Storage I/O</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Update Source</td>
<td class="py-2 px-4">Proxmox RRD API (<code>/nodes/{node}/qemu/{vmid}/rrddata</code>)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Auto-Refresh</td>
<td class="py-2 px-4">Graphs request fresh data every 2 minutes while the Statistics tab is open.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Data Sampling</td>
<td class="py-2 px-4">Each graph is sampled down to a maximum of 40 data points to keep rendering smooth and payloads small.</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Aggregation</td>
<td class="py-2 px-4"><strong>Average</strong> uses RRD's AVERAGE consolidation function, and <strong>Maximum</strong> uses the MAX function.</td>
</tr>
</tbody>
</table>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-ram-line class="size-4 text-secondary" />
Memory Utilization Graph Details
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-4">
<li>The Memory Utilization graph displays a single series showing current RAM usage over time.</li>
<li>The vertical axis locks to the VM's configured maximum memory when a valid value is available; otherwise it auto-scales to fit the data so the graph is never flat.</li>
<li>Values are shown in bytes and converted to human-readable units (KiB, MiB, GiB) on the y-axis using binary prefixes.</li>
<li>Export actions download the currently displayed memory data points as a CSV file.</li>
</ul>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-router-line class="size-5 text-base/60" />
Network Analysis (Core Router)
</h3>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm text-base/70 mb-3">
The Network Analysis section is powered by an external Core Router API and provides deep visibility into active firewall sessions, top peers, ports, and security events related to your server's IP addresses.
</p>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">Data Source</td>
<td class="py-2 px-4">Core Router API firewall state table (list of active sessions).</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">IP Filtering</td>
<td class="py-2 px-4">Only connections where the source or destination matches an IP assigned to your server are included.</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Sections</td>
<td class="py-2 px-4"><strong>Active Connections</strong>, <strong>Top Peers</strong>, <strong>Top Ports</strong>, and <strong>Security</strong> (threat detections).</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Loading Behaviour</td>
<td class="py-2 px-4">Network Analysis is loaded when the Statistics tab opens. If the Core Router API is not configured or the server has no IPs, a clear warning message is shown instead of an endless loading state.</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Error Handling</td>
<td class="py-2 px-4">HTTP 502 errors from the Core Router API trigger automatic, limited retries with exponential backoff before a final error is presented.</td>
</tr>
</tbody>
</table>
</div>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-table-line class="size-4 text-secondary" />
Active Connections Table & Traffic Sorting
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-4">
<li>The <strong>Active Connections</strong> table supports searching, filtering, and clicking any header to sort by that column.</li>
<li>The <strong>Traffic</strong> column sorts by the underlying total bytes for each connection (not the formatted text), so high-traffic sessions rise to the top or bottom depending on the sort direction.</li>
<li>Clicking the Traffic header toggles between descending (largest traffic first) and ascending order.</li>
<li>Very low or empty traffic values still participate in the sort; connections with no traffic are treated as zero.</li>
</ul>
</div>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-timer-2-line class="size-4 text-secondary" />
Loading & Performance Optimizations
</p>
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-4">
<li>When you first open a server page, the Statistics tab is preloaded in the background so that navigating to it later is faster.</li>
<li>Live Telemetry responses from the Proxmox RRD API are cached per graph type, time range, and aggregation to reduce redundant upstream calls.</li>
<li>Network Analysis results are cached per server for a short period to avoid repeatedly scanning the full firewall state table when you revisit the Statistics tab.</li>
<li>All graphs limit the number of rendered points to keep the UI responsive, even on busy servers with long time ranges selected.</li>
</ul>
</div>
</div>
<!-- System Section -->
<div x-show="activeSection === 'system'" x-transition style="display: none;" data-section-id="system">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-cpu-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">System Tab</h2>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4">Machine Type Comparison</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Features</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Use Case</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Q35</td>
<td class="py-2 px-4">PCIe, UEFI-friendly, modern</td>
<td class="py-2 px-4">Recommended for modern OS</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">i440fx</td>
<td class="py-2 px-4">Legacy chipset, maximum compatibility</td>
<td class="py-2 px-4">Legacy systems, compatibility</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4">Firmware Comparison</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Firmware</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Features</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">SeaBIOS</td>
<td class="py-2 px-4">Legacy BIOS</td>
<td class="py-2 px-4">Maximum compatibility, all OS</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">OVMF</td>
<td class="py-2 px-4">UEFI</td>
<td class="py-2 px-4">Secure Boot, modern Windows, GPT disks</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
EFI Disks & TPM Devices - Requirements & Configuration
</h3>
<div class="bg-info/10 border border-info/30 rounded-lg p-5 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-2">Overview</p>
<p class="text-sm text-base/70 mb-2">
EFI (Extensible Firmware Interface) disks and TPM (Trusted Platform Module) devices are security and compatibility features required for modern operating systems and security-hardened configurations. Understanding when and why to implement these is crucial for proper VM configuration.
</p>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-hard-drive-2-line class="size-5 text-primary" />
EFI Disks - When and Why
</h4>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-base/80 mb-3">
EFI disks are small storage devices (typically 4MB) that store UEFI firmware variables, boot configuration, and Secure Boot keys. They are essential for UEFI-based virtual machines.
</p>
<h5 class="text-md font-semibold mt-4 mb-2">When EFI Disks Are Required:</h5>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Requirement</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Explanation</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Mandatory</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">UEFI Firmware (OVMF)</td>
<td class="py-2 px-4">EFI disks are required when using OVMF/UEFI firmware instead of SeaBIOS</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Secure Boot</td>
<td class="py-2 px-4">Secure Boot requires EFI disk to store keys and boot configuration</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Modern Windows (10/11)</td>
<td class="py-2 px-4">Windows 10/11 installations typically require UEFI, which needs EFI disk</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Recommended</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">GPT Disk Partitions</td>
<td class="py-2 px-4">Disks larger than 2TB or using GPT require UEFI, which needs EFI disk</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Linux with Secure Boot</td>
<td class="py-2 px-4">Security-hardened Linux distributions requiring Secure Boot</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Legacy BIOS (SeaBIOS)</td>
<td class="py-2 px-4">EFI disks are not needed and not supported with legacy BIOS</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
</tr>
</tbody>
</table>
<h5 class="text-md font-semibold mt-4 mb-2">Why EFI Disks Are Needed:</h5>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Firmware Variable Storage:</strong> UEFI firmware needs persistent storage for boot configuration, boot entries, and system settings that survive reboots</li>
<li><strong>Secure Boot Keys:</strong> Stores Platform Key (PK), Key Exchange Keys (KEK), and Signature Database (DB) for Secure Boot validation</li>
<li><strong>Boot Manager Configuration:</strong> Maintains UEFI boot manager entries and boot order settings</li>
<li><strong>NVRAM Emulation:</strong> Provides non-volatile RAM functionality that physical systems have in hardware</li>
<li><strong>System Integrity:</strong> Enables firmware-level security features and trusted boot processes</li>
</ul>
</div>
<h5 class="text-md font-semibold mt-4 mb-2">EFI Disk Configuration:</h5>
<div class="bg-background border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
Platform Configuration
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># EFI disk configuration via platform API
PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"bios": "ovmf", # Required: Use UEFI firmware
"efidisk0": "local-lvm:vm-100-disk-1,size=4M,format=raw",
"machine": "q35" # Required: Q35 chipset for UEFI
}
# EFI disk storage format:
# efidisk0: storage:disk-name,size=4M,format=raw
# - storage: Storage backend (local-lvm, cephpool, etc.)
# - size: Fixed at 4MB (platform standard)
# - format: Always raw format
# Multiple EFI disks (advanced):
# efidisk0: local-lvm:vm-100-efi-0,size=4M
# efidisk1: local-lvm:vm-100-efi-1,size=4M # Additional EFI disk slot</code></pre>
</div>
<h5 class="text-md font-semibold mt-4 mb-2">Preenroll Keys Option:</h5>
<div class="bg-background border border-neutral rounded-md p-4 mb-3">
<p class="text-sm text-base/70 mb-2">
When creating an EFI disk, you can enable "Preenroll keys" to automatically configure Secure Boot keys during EFI disk creation.
</p>
<table class="w-full text-sm mb-3">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Option</th>
<th class="text-left py-2 px-2 font-semibold">Effect</th>
<th class="text-left py-2 px-2 font-semibold">Use Case</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2 font-semibold">Preenroll Keys: Enabled</td>
<td class="py-2 px-2">Secure Boot keys pre-enrolled, Secure Boot enabled by default</td>
<td class="py-2 px-2">Security-hardened systems, Windows 11, Secure Boot required</td>
</tr>
<tr>
<td class="py-2 px-2 font-semibold">Preenroll Keys: Disabled</td>
<td class="py-2 px-2">EFI disk created without Secure Boot keys, Secure Boot disabled</td>
<td class="py-2 px-2">UEFI without Secure Boot, development, custom key management</td>
</tr>
</tbody>
</table>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Create EFI disk with preenrolled keys
POST /api2/json/nodes/{node}/qemu/{vmid}/config
{
"efidisk0": "local-lvm:vm-100-disk-1,size=4M,format=raw",
"efidisk0_pre_enrolled_keys": 1 # Enable preenroll keys
}
# Secure Boot keys included:
# - Microsoft Windows Production CA (for Windows)
# - Microsoft Corporation UEFI CA (for Windows)
# - Canonical Ltd. Master CA (for Ubuntu)
# - Other common distribution keys</code></pre>
</div>
<h5 class="text-md font-semibold mt-4 mb-2">EFI Disk Storage Details:</h5>
<div class="bg-background border border-neutral rounded-md p-4">
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 mb-3">
<li><strong>Size:</strong> Fixed at 4MB (sufficient for firmware variables and keys)</li>
<li><strong>Format:</strong> Always raw format (not qcow2 or other formats)</li>
<li><strong>Storage:</strong> Can be stored on any storage backend (local-lvm, cephpool, etc.)</li>
<li><strong>Location:</strong> Automatically provisioned on cephpool if available, otherwise uses configured storage</li>
<li><strong>Backup:</strong> Included in VM backups automatically</li>
<li><strong>Multiple Slots:</strong> Platform supports multiple EFI disk slots (efidisk0, efidisk1, etc.) for advanced configurations</li>
</ul>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-shield-check-line class="size-5 text-primary" />
TPM Devices - When and Why
</h4>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<p class="text-base/80 mb-3">
TPM (Trusted Platform Module) devices provide hardware-based security features for virtual machines. They enable secure boot, disk encryption, and other security features that require TPM functionality.
</p>
<h5 class="text-md font-semibold mt-4 mb-2">When TPM Devices Are Required:</h5>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Requirement</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Explanation</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Mandatory</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Windows 11</td>
<td class="py-2 px-4">Windows 11 requires TPM 2.0 for installation and operation</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">BitLocker Encryption</td>
<td class="py-2 px-4">Windows BitLocker requires TPM for key storage and system integrity</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Windows Device Guard</td>
<td class="py-2 px-4">Windows security feature requiring TPM for attestation</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Yes</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Linux Secure Boot (Advanced)</td>
<td class="py-2 px-4">Some security-hardened Linux configurations use TPM for measured boot</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-warning inline" /> Optional</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Disk Encryption (LUKS with TPM)</td>
<td class="py-2 px-4">Linux LUKS encryption can use TPM for key storage</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-warning inline" /> Optional</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">General Use Cases</td>
<td class="py-2 px-4">TPM not required for standard VM operations or older OS versions</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> No</td>
</tr>
</tbody>
</table>
<h5 class="text-md font-semibold mt-4 mb-2">Why TPM Devices Are Needed:</h5>
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-3">
<ul class="list-disc list-inside text-sm text-base/70 space-y-2">
<li><strong>Secure Key Storage:</strong> TPM provides hardware-protected storage for encryption keys, preventing software-based key extraction</li>
<li><strong>System Integrity Measurement:</strong> TPM can measure and attest to system boot integrity (measured boot)</li>
<li><strong>Platform Attestation:</strong> Enables verification that the system booted in a trusted state</li>
<li><strong>Anti-Tampering:</strong> TPM helps detect unauthorized system modifications</li>
<li><strong>Compliance Requirements:</strong> Many security standards and regulations require TPM for sensitive workloads</li>
<li><strong>Windows 11 Compatibility:</strong> Microsoft requires TPM 2.0 as a minimum requirement for Windows 11</li>
</ul>
</div>
<h5 class="text-md font-semibold mt-4 mb-2">TPM Version Comparison:</h5>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Version</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Specification</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Features</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Recommended For</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">TPM v2.0</td>
<td class="py-2 px-4">TPM 2.0 Specification (ISO/IEC 11889)</td>
<td class="py-2 px-4">Enhanced security, better algorithms, Windows 11 support</td>
<td class="py-2 px-4">Windows 11, modern security requirements, recommended</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">TPM v1.2</td>
<td class="py-2 px-4">TPM 1.2 Specification</td>
<td class="py-2 px-4">Legacy support, basic TPM functionality</td>
<td class="py-2 px-4">Legacy systems, older Windows versions, compatibility</td>
</tr>
</tbody>
</table>
<h5 class="text-md font-semibold mt-4 mb-2">TPM Device Configuration:</h5>
<div class="bg-background border border-neutral rounded-md p-4 mb-3">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-secondary" />
Platform Configuration
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># TPM device configuration via platform API
PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"tpmstate0": "local-lvm:vm-100-tpm-0,size=4M,version=v2.0",
"machine": "q35" # TPM requires Q35 chipset
}
# TPM storage format:
# tpmstate0: storage:disk-name,size=4M,version=v2.0
# - storage: Storage backend (local-lvm, cephpool, etc.)
# - size: Fixed at 4MB (platform standard)
# - version: v2.0 (recommended) or v1.2 (legacy)
# Multiple TPM devices (advanced):
# tpmstate0: local-lvm:vm-100-tpm-0,size=4M,version=v2.0
# tpmstate1: local-lvm:vm-100-tpm-1,size=4M,version=v2.0</code></pre>
</div>
<h5 class="text-md font-semibold mt-4 mb-2">TPM Storage Details:</h5>
<div class="bg-background border border-neutral rounded-md p-4 mb-3">
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 mb-3">
<li><strong>Size:</strong> Fixed at 4MB (sufficient for TPM state and keys)</li>
<li><strong>Format:</strong> Raw format, stores TPM persistent state</li>
<li><strong>Storage:</strong> Can be stored on any storage backend (local-lvm, cephpool, etc.)</li>
<li><strong>Location:</strong> Automatically provisioned on cephpool if available</li>
<li><strong>State Persistence:</strong> TPM state is preserved across VM reboots and migrations</li>
<li><strong>Backup:</strong> Included in VM backups (critical for encrypted systems)</li>
<li><strong>Security:</strong> TPM state file should be protected - loss prevents access to encrypted data</li>
</ul>
</div>
<div class="bg-warning/10 border border-warning/30 rounded-md p-4 mb-3">
<div class="flex items-start gap-3">
<x-ri-alert-line class="size-5 text-warning flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-1">Critical: TPM State Backup</p>
<p class="text-sm text-base/70">
If a VM uses TPM with BitLocker or disk encryption, losing the TPM state file will result in permanent data loss. Always ensure TPM state files are included in backups and stored securely.
</p>
</div>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-settings-3-line class="size-5 text-base/60" />
EFI/TPM Implementation Guide
</h4>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<h5 class="text-md font-semibold mt-4 mb-2">Step-by-Step Configuration:</h5>
<div class="space-y-4">
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-primary font-bold text-xs">1</span>
Configure Firmware and Machine Type
</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto mt-2"><code>PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"bios": "ovmf", # Required for EFI/TPM
"machine": "q35" # Required for UEFI/TPM support
}</code></pre>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-primary font-bold text-xs">2</span>
Add EFI Disk (if using UEFI)
</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto mt-2"><code>PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"efidisk0": "local-lvm:vm-100-efi-0,size=4M,format=raw",
"efidisk0_pre_enrolled_keys": 1 # Enable if Secure Boot needed
}</code></pre>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-primary font-bold text-xs">3</span>
Add TPM Device (if required)
</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto mt-2"><code>PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"tpmstate0": "local-lvm:vm-100-tpm-0,size=4M,version=v2.0"
}</code></pre>
</div>
<div class="bg-background-secondary border border-neutral rounded-md p-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-primary font-bold text-xs">4</span>
Verify Configuration
</p>
<pre class="bg-background p-3 rounded text-xs overflow-x-auto mt-2"><code>GET /api2/json/nodes/{node}/qemu/{vmid}/config
# Verify efidisk0 and tpmstate0 entries exist</code></pre>
</div>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-question-line class="size-5 text-base/60" />
Common Use Case Scenarios
</h4>
<div class="space-y-4 mb-4">
<div class="bg-background border border-neutral rounded-lg p-5">
<h5 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-windows-line class="size-5 text-primary" />
Windows 11 Installation
</h5>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">EFI Disk</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Required (UEFI boot)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">TPM Device</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Required (TPM 2.0)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">Preenroll Keys</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Recommended (Secure Boot)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Machine Type</td>
<td class="py-2 px-4">Q35 (required for UEFI/TPM)</td>
</tr>
</tbody>
</table>
<p class="text-sm text-base/70">
Windows 11 has strict hardware requirements including TPM 2.0 and UEFI firmware with Secure Boot capability. Both EFI disk and TPM device are mandatory.
</p>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h5 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-lock-line class="size-5 text-primary" />
BitLocker Encrypted Windows
</h5>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">EFI Disk</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Required (UEFI)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">TPM Device</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Required (key storage)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">TPM Version</td>
<td class="py-2 px-4">v2.0 (recommended for BitLocker)</td>
</tr>
</tbody>
</table>
<p class="text-sm text-base/70">
BitLocker uses TPM to store encryption keys securely. Without TPM, BitLocker requires a recovery key or password on every boot, which is less secure and less convenient.
</p>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h5 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-ubuntu-line class="size-5 text-primary" />
Security-Hardened Linux
</h5>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">EFI Disk</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-success inline" /> Required (Secure Boot)</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">TPM Device</td>
<td class="py-2 px-4"><x-ri-checkbox-circle-line class="size-4 text-warning inline" /> Optional (measured boot)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Preenroll Keys</td>
<td class="py-2 px-4">Enable for Secure Boot with signed kernels</td>
</tr>
</tbody>
</table>
<p class="text-sm text-base/70">
Linux distributions with Secure Boot support (Ubuntu, RHEL, etc.) require EFI disk. TPM is optional but recommended for measured boot and disk encryption with TPM integration.
</p>
</div>
<div class="bg-background border border-neutral rounded-lg p-5">
<h5 class="text-md font-semibold mb-2 flex items-center gap-2">
<x-ri-server-line class="size-5 text-primary" />
Standard Linux Server (No Security Features)
</h5>
<table class="w-full text-sm mb-3">
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold w-1/3">EFI Disk</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> Not required (use SeaBIOS)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">TPM Device</td>
<td class="py-2 px-4"><x-ri-close-circle-line class="size-4 text-error inline" /> Not required</td>
</tr>
</tbody>
</table>
<p class="text-sm text-base/70">
Standard Linux servers without security requirements can use legacy BIOS (SeaBIOS) and don't need EFI or TPM devices. This reduces complexity and resource usage.
</p>
</div>
</div>
<h4 class="text-lg font-semibold mt-6 mb-3 flex items-center gap-2">
<x-ri-bug-line class="size-5 text-base/60" />
Troubleshooting EFI/TPM Issues
</h4>
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
<table class="w-full text-sm mb-3">
<thead>
<tr class="border-b border-neutral/40">
<th class="text-left py-2 px-2 font-semibold">Issue</th>
<th class="text-left py-2 px-2 font-semibold">Cause</th>
<th class="text-left py-2 px-2 font-semibold">Solution</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">VM won't boot with UEFI</td>
<td class="py-2 px-2">EFI disk missing or incorrectly configured</td>
<td class="py-2 px-2">Add efidisk0 with correct storage backend</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Windows 11 installation fails</td>
<td class="py-2 px-2">TPM 2.0 not detected</td>
<td class="py-2 px-2">Add tpmstate0 with version=v2.0</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">Secure Boot not working</td>
<td class="py-2 px-2">Keys not pre-enrolled in EFI disk</td>
<td class="py-2 px-2">Recreate EFI disk with preenroll keys enabled</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-2">BitLocker recovery required</td>
<td class="py-2 px-2">TPM state lost or corrupted</td>
<td class="py-2 px-2">Restore TPM state from backup or use recovery key</td>
</tr>
<tr>
<td class="py-2 px-2">EFI/TPM not available</td>
<td class="py-2 px-2">Using i440fx machine type</td>
<td class="py-2 px-2">Change machine type to Q35</td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Platform Storage & Disk Management
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-database-2-line class="size-4 text-primary" />
Disk Configuration Format
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Platform disk configuration format
# scsi0: storage:disk-name,size=32G,format=raw,cache=writeback,iothread=1
# Storage types:
# - local-lvm: LVM thin pool (local-lvm:vm-100-disk-0)
# - cephpool: Ceph RBD (cephpool:vm-100-disk-0)
# - local: Directory storage (local:100/vm-100-disk-0.raw)
# - nfs: NFS mount (nfs:vm-100-disk-0)
# Disk options:
# - size: Disk size (e.g., 32G, 100G)
# - format: raw|qcow2|vmdk
# - cache: none|writeback|writethrough|unsafe|directsync
# - iothread: Enable I/O thread (1|0)
# - discard: Enable TRIM/discard (on|ignore)
# - ssd: Emulate SSD (1|0)
# - replicate: Enable replication (1|0) - for Ceph
# Example configurations:
{
"scsi0": "local-lvm:vm-100-disk-0,size=32G,format=raw,cache=writeback",
"scsi1": "cephpool:vm-100-disk-1,size=100G,format=raw,replicate=1",
"ide2": "local:iso/debian-12.iso,media=cdrom"
}
# Add disk via API
POST /api2/json/nodes/{node}/qemu/{vmid}/config
{
"scsi1": "local-lvm:vm-100-disk-1,size=50G"
}</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-server-line class="size-5 text-base/60" />
Resource Pools & Limits
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Platform Resource Management:</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Resource pools allow grouping VMs for management
POST /api2/json/pools
{
"poolid": "production",
"comment": "Production VMs"
}
# Add VM to pool
PUT /api2/json/pools/{poolid}
{
"vms": "100,101,102"
}
# Resource limits per VM
PUT /api2/json/nodes/{node}/qemu/{vmid}/config
{
"memory": 4096, # RAM in MB
"cores": 4, # CPU cores
"cpu": "host", # CPU type
"balloon": 1024, # Balloon device memory (MB)
"shares": 1000, # CPU shares (relative priority)
"cpulimit": 2, # CPU limit (cores)
"cpuunits": 1024, # CPU weight (relative to 1024)
"net0": "virtio=...,rate=100" # Network rate limit (MB/s)
}
# Platform automatically enforces limits via:
# - cgroups (CPU, memory)
# - tc (traffic control for network)
# - iotune (disk I/O limits)</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-check-line class="size-5 text-base/60" />
High Availability (HA) Configuration
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
The platform supports high availability for VMs across cluster nodes using Corosync and Pacemaker.
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Enable HA for VM
POST /api2/json/cluster/ha/groups
{
"group": "production",
"nodes": "pve-node-01,pve-node-02,pve-node-03",
"restart": 1,
"max_restart": 3,
"max_relocate": 3
}
POST /api2/json/cluster/ha/resources
{
"sid": "vm:100",
"group": "production",
"max_restart": 3,
"max_relocate": 3
}
# HA behavior:
# - Automatic VM restart on node failure
# - VM migration to healthy node
# - Fencing of failed nodes
# - Requires shared storage (Ceph, NFS)
# HA requirements:
# - Minimum 3 nodes for quorum
# - Shared storage for VM disks
# - Network connectivity between nodes
# - Corosync cluster configuration</code></pre>
</div>
</div>
<!-- Backups Section -->
<div x-show="activeSection === 'backups'" x-transition style="display: none;" data-section-id="backups">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-database-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Backups Tab</h2>
</div>
<div class="bg-warning/10 border border-warning/30 rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-alert-line class="size-5 text-warning flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-1">Restoration Warning</p>
<p class="text-sm text-base/70">Restoring a backup will replace the current VM state. All changes made after the backup was created will be permanently lost.</p>
</div>
</div>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Platform Backup System Architecture
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-database-2-line class="size-4 text-primary" />
Backup Storage & Format
</p>
<p class="text-sm text-base/70 mb-2">
The management platform uses a proprietary backup format (VMA - Virtual Machine Archive) that stores complete VM state including disks, configuration, and snapshots.
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Backup file format
vzdump-qemu-{vmid}-{timestamp}.vma.zst
# Backup contents:
# - VM configuration (QEMU config)
# - Disk images (raw or qcow2)
# - Metadata (VM name, description, tags)
# - Compression: zstd (default) or gzip
# Backup storage locations
# - local storage: /var/lib/vz/dump/
# - NFS storage: mounted NFS share
# - S3-compatible: object storage
# - PBS (Platform Backup Server): dedicated backup server
# Create backup via API
POST /api2/json/nodes/{node}/qemu/{vmid}/vzdump
{
"storage": "local",
"compress": "zstd",
"mode": "snapshot",
"remove": 0
}
# Backup modes:
# - snapshot: Live backup (VM continues running)
# - stop: Stop VM before backup
# - suspend: Suspend VM during backup
# Restore backup via API
POST /api2/json/nodes/{node}/storage/{storage}/content
{
"filename": "vzdump-qemu-100-20240101_120000.vma.zst",
"vmid": 200,
"storage": "local-lvm"
}</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-time-line class="size-5 text-base/60" />
Backup Scheduling & Retention
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2">Platform Backup Jobs:</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Create backup job
POST /api2/json/config/backup
{
"vmid": "100",
"storage": "local",
"compress": "zstd",
"mode": "snapshot",
"schedule": "0 2 * * *", # Cron format: daily at 2 AM
"prune-backups": "keep-last=7,keep-daily=30,keep-weekly=12,keep-monthly=12"
}
# Retention policy:
# - keep-last: Keep last N backups
# - keep-daily: Keep daily backups for N days
# - keep-weekly: Keep weekly backups for N weeks
# - keep-monthly: Keep monthly backups for N months
# List backup jobs
GET /api2/json/config/backup
# Backup job execution
# Platform runs backup jobs via cron or systemd timers
# Logs available at: /var/log/pve/tasks/active</code></pre>
</div>
</div>
<!-- Console Section -->
<div x-show="activeSection === 'console'" x-transition style="display: none;" data-section-id="console">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-terminal-box-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Console Access</h2>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4">Console Options Comparison</h3>
<table class="w-full border border-neutral rounded-md mb-4">
<thead class="bg-background">
<tr>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Console Type</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Interface</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Best For</th>
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">Protocol</th>
</tr>
</thead>
<tbody class="text-sm text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-4 font-semibold">NoVNC</td>
<td class="py-2 px-4">Graphical (web-based)</td>
<td class="py-2 px-4">Desktop environments, installation</td>
<td class="py-2 px-4">VNC (RFC 6143)</td>
</tr>
<tr>
<td class="py-2 px-4 font-semibold">Xterm.js</td>
<td class="py-2 px-4">Text-based (web-based)</td>
<td class="py-2 px-4">Command-line administration</td>
<td class="py-2 px-4">Serial console</td>
</tr>
</tbody>
</table>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
Platform Console Access Architecture
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-terminal-box-line class="size-4 text-primary" />
VNC Proxy & WebSocket
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Platform VNC proxy API
GET /api2/json/nodes/{node}/qemu/{vmid}/vncproxy
{
"port": "5900",
"user": "root@pam",
"ticket": "PVE:root@pam:65A8B123::..."
}
# VNC WebSocket URL format
wss://{host}:8006/api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket?port={port}&vncticket={ticket}
# Platform automatically:
# - Creates VNC server on VM startup
# - Manages VNC port allocation
# - Provides WebSocket proxy for browser access
# - Handles authentication via tickets
# VNC configuration in VM
{
"vga": "std", # Standard VGA (includes VNC)
"vnc": 1, # Enable VNC
"vncdisplay": 0, # VNC display number
"keyboard": "en-us" # Keyboard layout
}
# Serial console access
{
"serial0": "socket",
"vga": "serial0"
}
# Platform serial console
GET /api2/json/nodes/{node}/qemu/{vmid}/termproxy
# Returns WebSocket URL for serial console</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-keyhole-line class="size-5 text-base/60" />
Console Security & Authentication
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
The platform implements ticket-based authentication for console access, providing secure temporary access tokens.
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Ticket format
PVE:username@realm:timestamp:signature
# Ticket components:
# - PVE: Platform identifier
# - username@realm: User and authentication realm (pam, pve, etc.)
# - timestamp: Unix timestamp
# - signature: HMAC-SHA256 signature
# Ticket validation:
# - Tickets expire after 2 hours (configurable)
# - Signature verified against shared secret
# - Realm determines authentication method:
# - pam: Linux PAM authentication
# - pve: Platform-specific authentication
# - ldap: LDAP authentication
# - openid: OpenID Connect
# Console access permissions:
# - VM.Audit: Read-only console access
# - VM.Console: Full console access
# - VM.PowerMgmt: Power management (required for some operations)</code></pre>
</div>
</div>
<!-- BGP Routing Section -->
<div x-show="activeSection === 'bgp'" x-transition style="display: none;" data-section-id="bgp">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-router-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">BGP Routing</h2>
</div>
<p class="text-base/80 mb-6">
Border Gateway Protocol (BGP) is the routing protocol that makes the internet work. This guide explains how BGP works and how to get started with BIRD2, a popular open-source BGP implementation.
</p>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-information-line class="size-5 text-base/60" />
What is BGP?
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
BGP (Border Gateway Protocol) is an exterior gateway routing protocol (RFC 4271) used to exchange routing information between autonomous systems (AS) on the internet. Unlike interior gateway protocols like OSPF or RIP, BGP is designed for routing between different organizations and networks.
</p>
<ul class="text-sm text-base/70 list-disc list-inside space-y-1 mb-2">
<li><strong>Autonomous System (AS):</strong> A collection of IP networks under a single administrative control, identified by a unique AS number (ASN)</li>
<li><strong>Path Vector Protocol:</strong> BGP maintains not just routes, but the entire path (AS path) to reach destinations</li>
<li><strong>TCP-based:</strong> Uses TCP port 179 for reliable communication between BGP peers</li>
<li><strong>Policy-based:</strong> Routes are selected and filtered based on configurable policies</li>
</ul>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-s-slash-line class="size-5 text-base/60" />
How BGP Works
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-router-line class="size-4 text-primary" />
BGP Session Establishment
</p>
<p class="text-sm text-base/70 mb-2">
BGP operates through sessions between routers (BGP speakers). The process involves:
</p>
<ol class="text-sm text-base/70 list-decimal list-inside space-y-1 mb-2">
<li><strong>TCP Connection:</strong> BGP peers establish a TCP connection on port 179</li>
<li><strong>OPEN Message:</strong> Exchange BGP capabilities, AS numbers, and hold timers</li>
<li><strong>UPDATE Messages:</strong> Exchange routing information (prefixes, attributes)</li>
<li><strong>KEEPALIVE Messages:</strong> Maintain session (sent every 30 seconds by default)</li>
<li><strong>NOTIFICATION Messages:</strong> Error handling and session termination</li>
</ol>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># BGP Message Types (RFC 4271)
# 1. OPEN - Initial session negotiation
# 2. UPDATE - Route advertisements/withdrawals
# 3. NOTIFICATION - Error messages
# 4. KEEPALIVE - Session maintenance
# BGP Finite State Machine:
# Idle → Connect → Active → OpenSent → OpenConfirm → Established
# Session States:
# - Idle: Initial state, no connection
# - Connect: TCP connection attempt
# - Active: TCP connection failed, retrying
# - OpenSent: OPEN message sent, waiting for response
# - OpenConfirm: OPEN message received, waiting for KEEPALIVE
# - Established: Session active, exchanging routes</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-route-line class="size-4 text-primary" />
BGP Route Selection Process
</p>
<p class="text-sm text-base/70 mb-2">
When multiple paths exist to a destination, BGP uses a decision process to select the best route:
</p>
<ol class="text-sm text-base/70 list-decimal list-inside space-y-1 mb-2">
<li><strong>Valid Next-Hop:</strong> Next-hop must be reachable</li>
<li><strong>Highest Local Preference:</strong> Administrative preference (default: 100)</li>
<li><strong>Shortest AS Path:</strong> Fewer AS hops preferred</li>
<li><strong>Lowest Origin Type:</strong> IGP &lt; EGP &lt; Incomplete</li>
<li><strong>Lowest MED (Multi-Exit Discriminator):</strong> Prefer lower MED values</li>
<li><strong>eBGP over iBGP:</strong> External routes preferred over internal</li>
<li><strong>Lowest IGP Metric:</strong> Shortest path to BGP next-hop</li>
<li><strong>Oldest Route:</strong> Prefer route received first</li>
<li><strong>Lowest Router ID:</strong> Tie-breaker using BGP router ID</li>
<li><strong>Shortest Cluster List:</strong> For route reflectors</li>
<li><strong>Lowest Neighbor Address:</strong> Final tie-breaker</li>
</ol>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># BGP Attributes (Path Attributes):
# - AS_PATH: List of AS numbers traversed
# - NEXT_HOP: IP address of next router
# - ORIGIN: Route origin (IGP, EGP, Incomplete)
# - LOCAL_PREF: Local preference (iBGP only)
# - MED: Multi-Exit Discriminator
# - COMMUNITY: Route tagging for policy
# - ORIGINATOR_ID: Route reflector originator
# - CLUSTER_LIST: Route reflector cluster IDs</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-shield-line class="size-4 text-primary" />
BGP Route Types
</p>
<table class="w-full border border-neutral rounded-md mb-2 text-sm">
<thead class="bg-background">
<tr>
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Type</th>
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Description</th>
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Use Case</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">eBGP</td>
<td class="py-2 px-3">External BGP between different ASes</td>
<td class="py-2 px-3">ISP peering, internet routing</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">iBGP</td>
<td class="py-2 px-3">Internal BGP within same AS</td>
<td class="py-2 px-3">Large enterprise networks, data centers</td>
</tr>
<tr>
<td class="py-2 px-3 font-semibold">Route Reflector</td>
<td class="py-2 px-3">iBGP scaling mechanism</td>
<td class="py-2 px-3">Avoid full mesh iBGP requirement</td>
</tr>
</tbody>
</table>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-code-box-line class="size-5 text-base/60" />
Getting Started with BIRD2
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm text-base/70 mb-2">
BIRD (BIRD Internet Routing Daemon) is a full-featured routing daemon that supports BGP, OSPF, RIP, and other routing protocols. BIRD2 is the current version, with improved IPv6 support and better performance.
</p>
<p class="text-sm font-semibold mb-2 flex items-center gap-2 mt-4">
<x-ri-download-line class="size-4 text-primary" />
Installation
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Debian/Ubuntu
sudo apt update
sudo apt install bird2
# CentOS/RHEL/Fedora
sudo dnf install bird2
# or
sudo yum install bird2
# Arch Linux
sudo pacman -S bird2
# Verify installation
birdc -v
# Should show: BIRD 2.x.x</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-file-settings-line class="size-4 text-primary" />
Basic BIRD2 Configuration
</p>
<p class="text-sm text-base/70 mb-2">
BIRD2 uses a single configuration file: <code class="bg-background-secondary px-1 rounded">/etc/bird/bird.conf</code>
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># /etc/bird/bird.conf
# Basic BIRD2 configuration
# Router ID (unique identifier, typically an IP address)
router id 192.168.1.1;
# Protocol kernel - sync routes with Linux kernel
protocol kernel {
ipv4 {
import all;
export all;
};
learn; # Learn routes from kernel
scan time 10; # Scan kernel routing table every 10 seconds
}
# Protocol device - scan network interfaces
protocol device {
scan time 10; # Scan interfaces every 10 seconds
}
# Static routes (optional)
protocol static {
ipv4;
route 10.0.0.0/8 via 192.168.1.254;
}
# BGP protocol definition
protocol bgp peer1 {
description "BGP peer to AS 65001";
local as 65000; # Your AS number
neighbor 192.168.1.100 as 65001; # Peer IP and AS
# IPv4 configuration
ipv4 {
import filter {
# Accept all routes by default
accept;
};
export filter {
# Export all routes
accept;
};
};
# Connection settings
connect retry time 30; # Retry connection every 30 seconds
hold time 90; # Hold timer (seconds)
keepalive time 30; # Keepalive interval (seconds)
# Authentication (optional)
password "your-secure-password";
# Graceful restart (optional)
graceful restart;
}</code></pre>
<p class="text-xs text-base/60 mt-2">
<strong>Note:</strong> Replace AS numbers, IP addresses, and passwords with your actual values. AS numbers must be obtained from your Regional Internet Registry (RIR).
</p>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-play-line class="size-4 text-primary" />
Starting and Managing BIRD2
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Start BIRD2
sudo systemctl start bird
sudo systemctl enable bird # Enable on boot
# Check status
sudo systemctl status bird
# View BIRD2 status
sudo birdc show status
# View BGP protocols
sudo birdc show protocols
# View BGP neighbors
sudo birdc show protocols all bgp1
# View routes
sudo birdc show route
sudo birdc show route for 192.168.1.0/24
sudo birdc show route protocol bgp1
# View route details
sudo birdc show route all
# Reload configuration
sudo birdc configure
# or restart service
sudo systemctl restart bird
# View BIRD2 logs
sudo journalctl -u bird -f</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-filter-line class="size-4 text-primary" />
Route Filtering and Policy
</p>
<p class="text-sm text-base/70 mb-2">
BIRD2 allows sophisticated route filtering using filter functions:
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Define filter functions
filter bgp_import {
# Reject default route
if (net = 0.0.0.0/0) then reject;
# Accept only /24 or smaller prefixes
if (net.len > 24) then reject;
# Reject RFC 1918 private addresses
if (net ~ [10.0.0.0/8+, 172.16.0.0/12+, 192.168.0.0/16+]) then reject;
# Set local preference for specific routes
if (net ~ [203.0.113.0/24+]) then {
bgp_local_pref = 200;
accept;
}
# Accept all others
accept;
}
filter bgp_export {
# Only export our own prefixes
if (source = RTS_STATIC) then accept;
if (source = RTS_DEVICE) then accept;
reject;
}
# Apply filters to BGP protocol
protocol bgp peer1 {
local as 65000;
neighbor 192.168.1.100 as 65001;
ipv4 {
import filter bgp_import;
export filter bgp_export;
};
}</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-community-line class="size-4 text-primary" />
BGP Communities
</p>
<p class="text-sm text-base/70 mb-2">
Communities allow tagging routes for policy control:
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Set communities on export
filter bgp_export_with_communities {
if (source = RTS_STATIC) then {
bgp_community.add((65000, 100)); # Add community (AS, value)
accept;
}
reject;
}
# Filter based on communities on import
filter bgp_import_communities {
# Reject routes with NO_EXPORT community
if (bgp_community ~ [(65001, 65535)]) then reject;
# Prefer routes with HIGH_PREF community
if (bgp_community ~ [(65001, 200)]) then {
bgp_local_pref = 150;
}
accept;
}
# Well-known communities:
# (0, 0) - Internet (no special meaning)
# (65535, 0) - NO_EXPORT - Don't export to eBGP peers
# (65535, 1) - NO_ADVERTISE - Don't advertise to any peer
# (65535, 2) - NO_EXPORT_SUBCONFED - Don't export outside confederation</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-router-line class="size-4 text-primary" />
Route Reflector Configuration
</p>
<p class="text-sm text-base/70 mb-2">
For large iBGP networks, use route reflectors to avoid full mesh:
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Route Reflector Server
protocol bgp rr_client1 {
local as 65000;
neighbor 192.168.1.10 as 65000;
ipv4 {
import all;
export all;
};
# Enable route reflection
rr client; # This is a route reflector client
}
# Route Reflector Client
protocol bgp rr_server {
local as 65000;
neighbor 192.168.1.1 as 65000; # Route reflector server
ipv4 {
import all;
export all;
};
# No special configuration needed on client
}</code></pre>
</div>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<p class="text-sm font-semibold mb-2 flex items-center gap-2">
<x-ri-global-line class="size-4 text-primary" />
IPv6 BGP (MP-BGP)
</p>
<p class="text-sm text-base/70 mb-2">
BIRD2 supports IPv6 through Multiprotocol BGP (MP-BGP):
</p>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code>protocol bgp peer1 {
local as 65000;
neighbor 2001:db8::1 as 65001;
# IPv6 configuration
ipv6 {
import all;
export all;
};
# Can also configure both IPv4 and IPv6
ipv4 {
import all;
export all;
};
ipv6 {
import all;
export all;
};
}</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-tools-line class="size-5 text-base/60" />
Troubleshooting BGP
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<table class="w-full border border-neutral rounded-md mb-2 text-sm">
<thead class="bg-background">
<tr>
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Issue</th>
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Solution</th>
</tr>
</thead>
<tbody class="text-base/70">
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">Session not establishing</td>
<td class="py-2 px-3">Check TCP connectivity (telnet peer-ip 179), verify AS numbers match, check firewall rules</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">Routes not received</td>
<td class="py-2 px-3">Check import filters, verify routes exist on peer, check BGP table: <code>birdc show route protocol bgp1</code></td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">Routes not exported</td>
<td class="py-2 px-3">Check export filters, verify routes in BIRD table, check source protocol</td>
</tr>
<tr class="border-b border-neutral/20">
<td class="py-2 px-3 font-semibold">Session flapping</td>
<td class="py-2 px-3">Check network stability, verify hold timers match, check for authentication mismatches</td>
</tr>
<tr>
<td class="py-2 px-3 font-semibold">Wrong route selected</td>
<td class="py-2 px-3">Review BGP decision process, check local preference, verify AS path length</td>
</tr>
</tbody>
</table>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto mt-2"><code># Useful debugging commands
sudo birdc show protocols all # Detailed protocol status
sudo birdc show route all # All routes with attributes
sudo birdc show route filtered # Filtered routes
sudo birdc show route rejected # Rejected routes
sudo birdc show route count # Route count statistics
sudo birdc show route protocol bgp1 all # Routes from specific peer
# Enable debug logging
# Edit /etc/bird/bird.conf and add:
# log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
# View detailed logs
sudo journalctl -u bird -f -n 100</code></pre>
</div>
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
<x-ri-shield-check-line class="size-5 text-base/60" />
Security Best Practices
</h3>
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
<ul class="text-sm text-base/70 list-disc list-inside space-y-1">
<li><strong>Use BGP passwords:</strong> Always configure MD5 authentication or TCP-AO for BGP sessions</li>
<li><strong>Route filtering:</strong> Implement strict import/export filters to prevent route hijacking</li>
<li><strong>Prefix limits:</strong> Set maximum prefix limits to prevent resource exhaustion</li>
<li><strong>RPKI validation:</strong> Use Resource Public Key Infrastructure to validate route origins</li>
<li><strong>BGP communities:</strong> Use communities for traffic engineering and policy enforcement</li>
<li><strong>Monitor sessions:</strong> Set up monitoring for BGP session state and route changes</li>
<li><strong>AS path filtering:</strong> Reject routes with unexpected AS paths</li>
</ul>
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto mt-2"><code># Example secure BGP configuration
protocol bgp secure_peer {
local as 65000;
neighbor 192.168.1.100 as 65001;
password "strong-random-password-here";
# Prefix limits
ipv4 {
import limit 1000 action block; # Max 1000 routes
import filter strict_import;
export filter strict_export;
};
# Connection security
connect retry time 30;
hold time 90;
keepalive time 30;
# Graceful restart
graceful restart;
}
# Strict import filter
filter strict_import {
# Reject default route
if (net = 0.0.0.0/0) then reject;
# Reject private addresses
if (net ~ [10.0.0.0/8+, 172.16.0.0/12+, 192.168.0.0/16+]) then reject;
# Reject too-specific prefixes
if (net.len > 24) then reject;
# Accept valid routes
accept;
}</code></pre>
</div>
<div class="bg-info/10 border border-info/30 rounded-md p-4 mb-4">
<div class="flex items-start gap-3">
<x-ri-information-line class="size-5 text-info flex-shrink-0 mt-0.5" />
<div>
<p class="text-sm font-semibold mb-1">Additional Resources</p>
<ul class="text-sm text-base/70 list-disc list-inside space-y-1">
<li><strong>RFC 4271:</strong> BGP-4 Protocol Specification</li>
<li><strong>RFC 1997:</strong> BGP Communities Attribute</li>
<li><strong>RFC 4760:</strong> Multiprotocol Extensions for BGP-4</li>
<li><strong>BIRD Documentation:</strong> https://bird.network.cz/</li>
<li><strong>BGP Best Current Practices:</strong> RFC 7454</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Glossary Section - Expanded -->
<div x-show="activeSection === 'glossary'" x-transition style="display: none;" data-section-id="glossary">
<div class="flex items-center gap-3 mb-4">
<div class="flex items-center justify-center w-10 h-10 rounded-lg bg-primary/10">
<x-ri-book-2-line class="size-5 text-primary" />
</div>
<h2 class="text-2xl font-bold">Glossary</h2>
</div>
<p class="text-base/80 mb-6">
Comprehensive definitions of terms and concepts used throughout the virtual machine management interface.
</p>
<div class="space-y-6">
<!-- A -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">A</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">ACPI (Advanced Configuration and Power Interface)</dt>
<dd class="text-sm text-base/70 ml-4">A standard for power management and hardware configuration. Required for proper shutdown and power management in modern operating systems. Enables features like sleep, hibernate, and graceful shutdown.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">A Record</dt>
<dd class="text-sm text-base/70 ml-4">A DNS record type (RFC 1035) that maps a domain name to an IPv4 address. The most common DNS record type for pointing domains to IP addresses.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">AAAA Record</dt>
<dd class="text-sm text-base/70 ml-4">A DNS record type (RFC 3596) that maps a domain name to an IPv6 address. The IPv6 equivalent of an A record.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Aggregation</dt>
<dd class="text-sm text-base/70 ml-4">A method of combining multiple data points into a single value. Common aggregation functions include AVERAGE (typical usage) and MAX (peak usage) for performance metrics.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Anycast</dt>
<dd class="text-sm text-base/70 ml-4">A network addressing and routing method where the same IP address is assigned to multiple servers in different locations. Traffic is routed to the nearest server based on routing metrics. Used for DNS root servers, CDNs, and distributed services to improve performance and redundancy.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">API (Application Programming Interface)</dt>
<dd class="text-sm text-base/70 ml-4">A set of protocols and tools for building software applications. The management platform provides a RESTful API for programmatic VM management.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Authentication</dt>
<dd class="text-sm text-base/70 ml-4">The process of verifying the identity of a user or system. The platform uses ticket-based authentication with CSRF protection.</dd>
</div>
</div>
</div>
<!-- B -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">B</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Backup</dt>
<dd class="text-sm text-base/70 ml-4">A copy of VM data and configuration stored for recovery purposes. The platform uses VMA (Virtual Machine Archive) format with compression.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Balloon Driver</dt>
<dd class="text-sm text-base/70 ml-4">A memory management feature that allows the hypervisor to reclaim memory from VMs by inflating a "balloon" inside the guest OS. Helps with memory overcommitment.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">BGP (Border Gateway Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">An exterior gateway routing protocol (RFC 4271) used to exchange routing information between autonomous systems (AS) on the internet. BGP is the protocol that makes the internet work by routing traffic between ISPs and large networks. Operates on TCP port 179. BGP uses path vector routing, maintaining a table of network reachability information along with the path (AS path) to reach those networks. Key features include: AS path attributes for loop prevention, route selection based on multiple criteria (local preference, AS path length, origin, MED), support for IPv4 (BGP-4) and IPv6 (MP-BGP), route reflectors and confederations for scaling, and communities for policy control. BGP sessions can be internal (iBGP) within an AS or external (eBGP) between ASes. Used extensively in data centers, cloud providers, and internet backbone routing. Supports route filtering, prefix limits, and graceful restart for high availability.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">BIOS (Basic Input/Output System)</dt>
<dd class="text-sm text-base/70 ml-4">Legacy firmware interface for system initialization and boot. SeaBIOS is a common open-source BIOS implementation for virtual machines.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Boot Order</dt>
<dd class="text-sm text-base/70 ml-4">The sequence in which a system attempts to boot from available devices (hard disk, CD/DVD, network, etc.). Configured via QEMU boot parameters.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Bridge</dt>
<dd class="text-sm text-base/70 ml-4">A network device that connects multiple network segments at Layer 2 (Ethernet). Linux bridges (vmbr0) connect VM network interfaces to physical networks. Operates at the data link layer (OSI Layer 2).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Broadcast</dt>
<dd class="text-sm text-base/70 ml-4">A network transmission method where data is sent to all devices on a network segment. Broadcast address for IPv4 is typically the last address in a subnet (e.g., 192.168.1.255/24).</dd>
</div>
</div>
</div>
<!-- C -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">C</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">CDN (Content Delivery Network)</dt>
<dd class="text-sm text-base/70 ml-4">A geographically distributed network of servers that delivers web content to users based on their location. Reduces latency and bandwidth usage by caching content closer to end users. Uses techniques like edge caching, anycast routing, and intelligent routing to optimize content delivery.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">CD-ROM</dt>
<dd class="text-sm text-base/70 ml-4">A virtual optical disc drive used for mounting ISO images or physical media. Typically mapped to IDE devices in boot order.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Ceph</dt>
<dd class="text-sm text-base/70 ml-4">A distributed storage system that provides object, block, and file storage. Ceph RBD (RADOS Block Device) is used for VM disk storage in clustered environments.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">CIDR (Classless Inter-Domain Routing)</dt>
<dd class="text-sm text-base/70 ml-4">A method for allocating IP addresses and routing (RFC 4632). Expressed as IP address followed by slash and number (e.g., 192.168.1.0/24). Replaces classful addressing (Class A, B, C) for more efficient address allocation.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Cirrus VGA</dt>
<dd class="text-sm text-base/70 ml-4">An emulated VGA adapter based on the Cirrus Logic CLGD 5446 chipset. Provides maximum compatibility across all operating systems.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Cloud-init</dt>
<dd class="text-sm text-base/70 ml-4">A standard method for customizing cloud instances during boot. Allows automatic configuration of users, SSH keys, network settings, and more.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Cluster</dt>
<dd class="text-sm text-base/70 ml-4">A group of physical nodes working together to provide high availability and resource sharing. Uses Corosync for cluster communication.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Console</dt>
<dd class="text-sm text-base/70 ml-4">A text or graphical interface for accessing and controlling a VM. Options include VNC (graphical), serial (text), and web-based terminals.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Corosync</dt>
<dd class="text-sm text-base/70 ml-4">A cluster communication framework used by the management platform for node coordination, quorum, and high availability features.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">CPU (Central Processing Unit)</dt>
<dd class="text-sm text-base/70 ml-4">The processor allocated to a VM. Can be configured with specific CPU types, cores, and limits for performance control.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">CSRF (Cross-Site Request Forgery)</dt>
<dd class="text-sm text-base/70 ml-4">A security attack that forces authenticated users to execute unwanted actions. The platform uses CSRF tokens to prevent such attacks.</dd>
</div>
</div>
</div>
<!-- D -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">D</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">DHCP (Dynamic Host Configuration Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A network protocol (RFC 2131) that automatically assigns IP addresses and network configuration to devices. Used for PXE network boot. DHCP server provides IP address, subnet mask, gateway, DNS servers, and other network parameters. Supports both IPv4 (DHCP) and IPv6 (DHCPv6, RFC 3315).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">DHCPv6</dt>
<dd class="text-sm text-base/70 ml-4">The IPv6 version of DHCP (RFC 3315). Provides stateful address configuration for IPv6 networks. Can work alongside stateless address autoconfiguration (SLAAC, RFC 4862).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">DNS (Domain Name System)</dt>
<dd class="text-sm text-base/70 ml-4">A hierarchical naming system (RFC 1034/1035) that translates domain names to IP addresses. Essential for internet connectivity and name resolution. Uses UDP port 53 for queries, TCP port 53 for zone transfers.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">DNSSEC (DNS Security Extensions)</dt>
<dd class="text-sm text-base/70 ml-4">A suite of extensions (RFC 4033-4035) that adds security to DNS by providing authentication and data integrity for DNS responses. Uses cryptographic signatures to verify DNS record authenticity.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Disk</dt>
<dd class="text-sm text-base/70 ml-4">Virtual storage device attached to a VM. Can be stored on various backends (local-lvm, Ceph, NFS) and formatted as raw, qcow2, or vmdk.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">DSCP (Differentiated Services Code Point)</dt>
<dd class="text-sm text-base/70 ml-4">A field in the IP header (RFC 2474) used for quality of service (QoS) classification. Replaces the Type of Service (ToS) field. Allows traffic prioritization and classification.</dd>
</div>
</div>
</div>
<div>
<dt class="font-semibold text-base mb-1">DNS (Domain Name System)</dt>
<dd class="text-sm text-base/70 ml-4">A hierarchical naming system (RFC 1034/1035) that translates domain names to IP addresses. Essential for internet connectivity and name resolution.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">DNSSEC (DNS Security Extensions)</dt>
<dd class="text-sm text-base/70 ml-4">A suite of extensions (RFC 4033-4035) that adds security to DNS by providing authentication and data integrity for DNS responses.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Disk</dt>
<dd class="text-sm text-base/70 ml-4">Virtual storage device attached to a VM. Can be stored on various backends (local-lvm, Ceph, NFS) and formatted as raw, qcow2, or vmdk.</dd>
</div>
</div>
</div>
<!-- E -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">E</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">E1000</dt>
<dd class="text-sm text-base/70 ml-4">A virtual network adapter that emulates the Intel 82540EM network controller. Provides good compatibility across all operating systems.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">EFI (Extensible Firmware Interface)</dt>
<dd class="text-sm text-base/70 ml-4">A specification for firmware interfaces, predecessor to UEFI. EFI disks store UEFI firmware variables and boot configuration.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">EFI Disk</dt>
<dd class="text-sm text-base/70 ml-4">A small storage device (typically 4MB) that stores UEFI firmware variables, boot entries, and Secure Boot keys. Required for UEFI-based VMs.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Emulation</dt>
<dd class="text-sm text-base/70 ml-4">The process of mimicking hardware behavior in software. QEMU emulates various hardware devices (VGA, network cards, etc.) for VMs.</dd>
</div>
</div>
</div>
<!-- F -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">F</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Firewall</dt>
<dd class="text-sm text-base/70 ml-4">A network security system that monitors and controls incoming and outgoing traffic. The platform includes an integrated firewall for VM-level protection. Can filter at Layer 3 (IP) and Layer 4 (TCP/UDP ports).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Firmware</dt>
<dd class="text-sm text-base/70 ml-4">Low-level software that initializes hardware and boots the operating system. Options include SeaBIOS (legacy) and OVMF (UEFI).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">FQDN (Fully Qualified Domain Name)</dt>
<dd class="text-sm text-base/70 ml-4">The complete domain name for a host, including all domain levels. Example: web.example.com. Always ends with a dot (absolute) or is relative to the search domain.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Fragmentation</dt>
<dd class="text-sm text-base/70 ml-4">The process of breaking IP packets into smaller pieces when they exceed the MTU of a network link. Fragments are reassembled at the destination. Can cause performance issues.</dd>
</div>
</div>
</div>
<!-- G -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">G</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Gateway</dt>
<dd class="text-sm text-base/70 ml-4">A network device that serves as an access point to another network. Typically the router's IP address on your local network. Also called default gateway or default route.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">GPT (GUID Partition Table)</dt>
<dd class="text-sm text-base/70 ml-4">A partitioning scheme that supports disks larger than 2TB and more partitions than MBR. Requires UEFI firmware.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">GRE (Generic Routing Encapsulation)</dt>
<dd class="text-sm text-base/70 ml-4">A tunneling protocol (RFC 2784) that encapsulates network layer protocols inside IP packets. Used for site-to-site VPNs, network extension, and protocol transport. Provides point-to-point connections without encryption (often combined with IPsec for security).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Guest Agent</dt>
<dd class="text-sm text-base/70 ml-4">Software running inside the virtual machine that provides additional information and control capabilities to the hypervisor. QEMU Guest Agent enables features like graceful shutdown and network statistics.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Guest OS</dt>
<dd class="text-sm text-base/70 ml-4">The operating system running inside a virtual machine. Also called the "guest" to distinguish it from the host OS.</dd>
</div>
</div>
</div>
<!-- H -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">H</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">HA (High Availability)</dt>
<dd class="text-sm text-base/70 ml-4">A system design that ensures services remain available even when components fail. The platform supports HA for VMs across cluster nodes using Corosync and Pacemaker.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Headless</dt>
<dd class="text-sm text-base/70 ml-4">A system configuration without a graphical display. VMs can run in headless mode with no VGA adapter for resource efficiency.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Host</dt>
<dd class="text-sm text-base/70 ml-4">The physical machine running the hypervisor. Also called the "host OS" or "host system".</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Hostname</dt>
<dd class="text-sm text-base/70 ml-4">The network name assigned to a computer. Must follow RFC 1035 standards (lowercase letters, numbers, hyphens, dots; 1-253 characters).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Hypervisor</dt>
<dd class="text-sm text-base/70 ml-4">Software that creates and runs virtual machines. KVM/QEMU is a type-2 hypervisor that runs on a host operating system.</dd>
</div>
</div>
</div>
<!-- I -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">I</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">i440fx</dt>
<dd class="text-sm text-base/70 ml-4">A legacy Intel chipset emulation that provides maximum compatibility with older operating systems. Uses PCI (not PCIe) bus.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IDE (Integrated Drive Electronics)</dt>
<dd class="text-sm text-base/70 ml-4">A legacy interface for connecting storage devices. Typically used for CD/DVD drives in VMs.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">I/O Thread</dt>
<dd class="text-sm text-base/70 ml-4">A dedicated thread for handling disk I/O operations, improving performance by reducing CPU contention. Can be enabled for VirtIO disk devices.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">ICMP (Internet Control Message Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A network protocol (RFC 792) used for diagnostic and error reporting. ICMP messages include ping (echo request/reply), destination unreachable, and time exceeded. Essential for network troubleshooting.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IGMP (Internet Group Management Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A communications protocol (RFC 3376) used by hosts and routers to establish multicast group memberships. Enables efficient multicast traffic delivery.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IPv4 (Internet Protocol Version 4)</dt>
<dd class="text-sm text-base/70 ml-4">The fourth version of the Internet Protocol (RFC 791). Uses 32-bit addresses (e.g., 192.168.1.1). The most widely used IP version. Address space: 0.0.0.0 to 255.255.255.255.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IPv6 (Internet Protocol Version 6)</dt>
<dd class="text-sm text-base/70 ml-4">The sixth version of the Internet Protocol (RFC 2460). Uses 128-bit addresses (e.g., 2001:db8::1) to address IPv4 address exhaustion. Supports stateless address autoconfiguration (SLAAC) and improved security.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">ISO (International Organization for Standardization)</dt>
<dd class="text-sm text-base/70 ml-4">A file format for disk images. ISO files are commonly used for operating system installation media and can be mounted as virtual CD/DVD drives.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">iptables</dt>
<dd class="text-sm text-base/70 ml-4">A Linux firewall utility that manages packet filtering and NAT rules. The platform uses iptables to implement firewall rules for VMs. Operates on chains: INPUT, OUTPUT, FORWARD, and custom chains.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IPsec (Internet Protocol Security)</dt>
<dd class="text-sm text-base/70 ml-4">A suite of protocols (RFC 4301) that provides secure communication at the IP layer. Supports authentication, encryption, and key management. Used for VPNs, site-to-site tunnels, and secure network connections.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IS-IS (Intermediate System to Intermediate System)</dt>
<dd class="text-sm text-base/70 ml-4">A link-state interior gateway routing protocol (ISO/IEC 10589, RFC 1195). Used in large service provider networks. Supports both IPv4 and IPv6 routing.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">IXP (Internet Exchange Point)</dt>
<dd class="text-sm text-base/70 ml-4">A physical infrastructure where multiple Internet Service Providers (ISPs), Content Delivery Networks (CDNs), cloud providers, and enterprises connect to exchange internet traffic through peering agreements. IXPs enable direct peering between networks, reducing latency, improving performance, and significantly reducing transit costs by avoiding upstream providers. Major IXPs include AMS-IX (Amsterdam), DE-CIX (Frankfurt), LINX (London), and Equinix. IXPs typically use Ethernet switches (Layer 2) with participants connecting via 1G, 10G, 100G, or higher speed ports. They facilitate both public peering (via shared switch fabric) and private peering (direct cross-connects). IXPs use BGP for route exchange and often provide route servers to simplify peering. Benefits include: reduced latency (local traffic stays local), cost savings (avoiding transit fees), improved redundancy (multiple paths), and better performance (direct interconnections). IXPs are critical infrastructure for internet routing efficiency and are often non-profit organizations managed by their participants.</dd>
</div>
</div>
</div>
<!-- K -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">K</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">KVM (Kernel-based Virtual Machine)</dt>
<dd class="text-sm text-base/70 ml-4">A virtualization infrastructure for Linux that turns the kernel into a hypervisor. Works with QEMU to provide full virtualization with hardware acceleration.</dd>
</div>
</div>
</div>
<!-- L -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">L</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">LVM (Logical Volume Manager)</dt>
<dd class="text-sm text-base/70 ml-4">A storage management system that allows flexible disk space allocation. LVM thin pools provide efficient storage for VM disks with snapshot support.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">local-lvm</dt>
<dd class="text-sm text-base/70 ml-4">A storage type using LVM thin provisioning on the local node. Provides efficient disk allocation and snapshot capabilities.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Link Aggregation</dt>
<dd class="text-sm text-base/70 ml-4">A method of combining multiple network interfaces into a single logical interface (IEEE 802.3ad, LACP). Provides increased bandwidth, redundancy, and load balancing. Also called bonding or teaming.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">LACP (Link Aggregation Control Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A protocol (IEEE 802.3ad) used to dynamically aggregate multiple physical links into a single logical link. Provides automatic link management and failure detection.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Load Balancer</dt>
<dd class="text-sm text-base/70 ml-4">A device or service that distributes network traffic across multiple servers to improve performance, availability, and reliability. Methods include round-robin, least connections, IP hash, and weighted distribution. Can operate at Layer 4 (TCP/UDP) or Layer 7 (HTTP/HTTPS).</dd>
</div>
</div>
</div>
<!-- M -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">M</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">MAC Address (Media Access Control)</dt>
<dd class="text-sm text-base/70 ml-4">A unique identifier assigned to network interfaces. Format: XX:XX:XX:XX:XX:XX in hexadecimal. Auto-generated for VM network adapters. Used for Layer 2 addressing in Ethernet networks.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">MBR (Master Boot Record)</dt>
<dd class="text-sm text-base/70 ml-4">A legacy partitioning scheme limited to 2TB disks and 4 primary partitions. Compatible with BIOS firmware.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Memory Balloon</dt>
<dd class="text-sm text-base/70 ml-4">See Balloon Driver.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">MLPS</dt>
<dd class="text-sm text-base/70 ml-4">See MPLS.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">MPLS (Multiprotocol Label Switching)</dt>
<dd class="text-sm text-base/70 ml-4">A routing technique (RFC 3031) that directs data using short path labels instead of long network addresses. Used in service provider networks for traffic engineering and VPNs. Operates between Layer 2 and Layer 3.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Multicast</dt>
<dd class="text-sm text-base/70 ml-4">A network transmission method where data is sent to a group of devices. IPv4 multicast addresses range from 224.0.0.0 to 239.255.255.255. Used for streaming, video conferencing, and service discovery.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Multiqueue</dt>
<dd class="text-sm text-base/70 ml-4">A network feature that uses multiple queues to distribute network processing across CPU cores, improving performance for high-speed networks. Enables parallel packet processing.</dd>
</div>
</div>
</div>
<!-- N -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">N</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">NAT (Network Address Translation)</dt>
<dd class="text-sm text-base/70 ml-4">A method of remapping IP addresses (RFC 3022). Allows VMs with private IPs to access the internet through the host's public IP. Types include SNAT (Source NAT) and DNAT (Destination NAT).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Network Bridge</dt>
<dd class="text-sm text-base/70 ml-4">See Bridge.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Node</dt>
<dd class="text-sm text-base/70 ml-4">A physical server in a cluster that runs the hypervisor and hosts VMs. Multiple nodes form a cluster for high availability.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">NoVNC</dt>
<dd class="text-sm text-base/70 ml-4">A web-based VNC client that provides graphical console access through a web browser. Uses the VNC protocol (RFC 6143) over WebSocket.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">NFS (Network File System)</dt>
<dd class="text-sm text-base/70 ml-4">A distributed file system protocol (RFC 7530) that allows access to files over a network. Can be used as shared storage for VM disks and backups. Versions include NFSv3, NFSv4, and NFSv4.1.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">MTU (Maximum Transmission Unit)</dt>
<dd class="text-sm text-base/70 ml-4">The largest packet size that can be transmitted over a network interface without fragmentation. Standard Ethernet MTU is 1500 bytes. Jumbo frames support MTU up to 9000 bytes for improved performance.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">NIC (Network Interface Card)</dt>
<dd class="text-sm text-base/70 ml-4">A hardware or virtual component that connects a computer to a network. Virtual NICs in VMs are emulated or paravirtualized adapters (VirtIO, E1000, etc.).</dd>
</div>
</div>
</div>
<!-- O -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">O</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">OpenVPN</dt>
<dd class="text-sm text-base/70 ml-4">An open-source VPN protocol that creates secure point-to-point or site-to-site connections. Uses SSL/TLS for key exchange and supports both UDP and TCP transport. Provides flexible configuration, strong encryption, and cross-platform compatibility. Commonly uses TUN (Layer 3) or TAP (Layer 2) interfaces.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">OSPF (Open Shortest Path First)</dt>
<dd class="text-sm text-base/70 ml-4">A link-state interior gateway routing protocol (RFC 2328) used within an autonomous system. OSPF calculates the shortest path using Dijkstra's algorithm and supports areas for hierarchical routing.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">OVMF (Open Virtual Machine Firmware)</dt>
<dd class="text-sm text-base/70 ml-4">An open-source UEFI firmware implementation for virtual machines. Required for UEFI boot, Secure Boot, and modern Windows installations.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Overcommitment</dt>
<dd class="text-sm text-base/70 ml-4">The practice of allocating more resources (CPU, memory) to VMs than physically available, based on the assumption that not all VMs will use their full allocation simultaneously.</dd>
</div>
</div>
</div>
<!-- P -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">P</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Pacemaker</dt>
<dd class="text-sm text-base/70 ml-4">A cluster resource manager that provides high availability services. Works with Corosync to manage VM failover in clustered environments.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Paravirtualization</dt>
<dd class="text-sm text-base/70 ml-4">A virtualization technique where the guest OS is modified to be aware of the virtualized environment, improving performance. VirtIO devices use paravirtualization.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">PCI (Peripheral Component Interconnect)</dt>
<dd class="text-sm text-base/70 ml-4">A legacy bus standard for connecting hardware devices. Used by i440fx chipset.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">PCIe (PCI Express)</dt>
<dd class="text-sm text-base/70 ml-4">A modern high-speed bus standard for connecting hardware devices. Used by Q35 chipset for better performance and UEFI compatibility.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Pool</dt>
<dd class="text-sm text-base/70 ml-4">A logical grouping of VMs for management purposes. Allows applying settings, permissions, and resource limits to multiple VMs at once.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Port</dt>
<dd class="text-sm text-base/70 ml-4">A 16-bit number (0-65535) that identifies a specific process or service on a network host. Well-known ports (0-1023) are reserved for system services. Used by TCP and UDP for multiplexing.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Proxy</dt>
<dd class="text-sm text-base/70 ml-4">An intermediary server that acts on behalf of clients, forwarding requests to other servers. Types include forward proxy (client-side, for access control and caching), reverse proxy (server-side, for load balancing and SSL termination), and transparent proxy (intercepts traffic without client configuration). Common protocols: HTTP, HTTPS, SOCKS.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Peering</dt>
<dd class="text-sm text-base/70 ml-4">A voluntary interconnection of separate networks for the purpose of exchanging traffic. Can be public (at Internet Exchange Points) or private (direct connections). Reduces transit costs and improves latency between networks.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">PXE (Preboot Execution Environment)</dt>
<dd class="text-sm text-base/70 ml-4">A network boot protocol that allows a computer to boot from a network server. Useful for automated OS installation and diskless systems. Uses DHCP and TFTP protocols.</dd>
</div>
</div>
</div>
<!-- Q -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">Q</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Q35</dt>
<dd class="text-sm text-base/70 ml-4">A modern virtual machine chipset type that provides PCIe support and UEFI-friendly layout. Recommended for modern operating systems and better performance.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">QEMU (Quick Emulator)</dt>
<dd class="text-sm text-base/70 ml-4">A generic and open-source machine emulator and virtualizer. Works with KVM to provide hardware-accelerated virtualization. Handles device emulation and VM lifecycle.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">QEMU Guest Agent</dt>
<dd class="text-sm text-base/70 ml-4">Software running inside the guest OS that communicates with QEMU to provide enhanced features like graceful shutdown, file system freeze for backups, and network statistics.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">QoS (Quality of Service)</dt>
<dd class="text-sm text-base/70 ml-4">Network mechanisms that manage bandwidth, latency, and packet loss to ensure acceptable service levels. Techniques include traffic shaping, prioritization, and bandwidth limiting. Uses DSCP, VLAN priorities, and traffic control.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">QXL</dt>
<dd class="text-sm text-base/70 ml-4">A paravirtualized 2D graphics adapter designed for use with SPICE protocol. Provides 2D acceleration and supports multiple displays.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">qcow2 (QEMU Copy-On-Write version 2)</dt>
<dd class="text-sm text-base/70 ml-4">A disk image format that supports snapshots, compression, and encryption. More flexible than raw format but with slight performance overhead.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Quorum</dt>
<dd class="text-sm text-base/70 ml-4">The minimum number of nodes that must be online for a cluster to operate. Typically requires more than half of the nodes (e.g., 3 nodes require 2 for quorum).</dd>
</div>
</div>
</div>
<!-- R -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">R</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">RAD (Rapid Application Development)</dt>
<dd class="text-sm text-base/70 ml-4">A software development methodology that emphasizes rapid prototyping and iterative development. Not directly related to networking, but may refer to RADIUS in network contexts.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RADIUS (Remote Authentication Dial-In User Service)</dt>
<dd class="text-sm text-base/70 ml-4">A networking protocol (RFC 2865) that provides centralized authentication, authorization, and accounting (AAA) for network access. Used for VPN, Wi-Fi, and network device authentication. Uses UDP ports 1812 (authentication) and 1813 (accounting).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Reverse Proxy</dt>
<dd class="text-sm text-base/70 ml-4">A server-side proxy that receives requests from clients and forwards them to backend servers. Provides load balancing, SSL termination, caching, and security features. Clients are unaware of the backend servers. Common implementations: Nginx, HAProxy, Apache mod_proxy.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RBD (RADOS Block Device)</dt>
<dd class="text-sm text-base/70 ml-4">A block storage interface provided by Ceph. Used for VM disk storage in distributed storage environments.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">REST (Representational State Transfer)</dt>
<dd class="text-sm text-base/70 ml-4">An architectural style for web services. The management platform provides a RESTful API for VM management operations.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RFC (Request for Comments)</dt>
<dd class="text-sm text-base/70 ml-4">A series of documents that define internet standards and protocols. Examples: RFC 791 (IPv4), RFC 1035 (DNS), RFC 2460 (IPv6).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RIP (Routing Information Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A distance-vector interior gateway routing protocol (RFC 2453). Uses hop count as the routing metric. RIP v1 and v2 support IPv4; RIPng supports IPv6.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RSS (Receive Side Scaling)</dt>
<dd class="text-sm text-base/70 ml-4">A network feature that distributes incoming network traffic across multiple CPU cores, improving performance for high-speed networks. Uses hash-based distribution to maintain flow affinity.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">RRD (Round Robin Database)</dt>
<dd class="text-sm text-base/70 ml-4">A time-series database format used for storing performance metrics. The platform uses RRD for CPU, memory, network, and disk statistics.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">rtl8139</dt>
<dd class="text-sm text-base/70 ml-4">A virtual network adapter that emulates the Realtek 8139 network controller. Provides legacy compatibility for older operating systems.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Routing</dt>
<dd class="text-sm text-base/70 ml-4">The process of selecting paths for network traffic. Routing protocols (BGP, OSPF, RIP) exchange routing information to build routing tables. Can be static (manual) or dynamic (protocol-based).</dd>
</div>
</div>
</div>
<!-- S -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">S</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">SCSI (Small Computer System Interface)</dt>
<dd class="text-sm text-base/70 ml-4">A standard interface for connecting storage devices. VirtIO SCSI is commonly used for VM disk devices due to better performance than IDE.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SeaBIOS</dt>
<dd class="text-sm text-base/70 ml-4">An open-source BIOS implementation for x86 systems. Provides legacy BIOS compatibility for VMs that don't require UEFI features.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Secure Boot</dt>
<dd class="text-sm text-base/70 ml-4">A security feature that ensures only signed, trusted software can boot. Requires UEFI firmware, EFI disks, and pre-enrolled keys.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Serial Console</dt>
<dd class="text-sm text-base/70 ml-4">A text-based console accessed via serial port (COM1, ttyS0). Provides remote access without network connectivity.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Snapshot</dt>
<dd class="text-sm text-base/70 ml-4">A point-in-time copy of a VM's disk state. Allows reverting to a previous state or creating multiple VM instances from a snapshot.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SPICE (Simple Protocol for Independent Computing Environments)</dt>
<dd class="text-sm text-base/70 ml-4">A remote desktop protocol that provides better performance than VNC. Works with QXL graphics adapter for optimized remote desktop access.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SNAT (Source Network Address Translation)</dt>
<dd class="text-sm text-base/70 ml-4">A type of NAT that translates the source IP address of outgoing packets. Used to allow private networks to access the internet through a public IP. Also called masquerading.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SNMP (Simple Network Management Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A protocol (RFC 1157) for network management and monitoring. Allows collection of network device statistics, configuration, and alerts. Uses UDP ports 161 (agent) and 162 (trap).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SPF (Shortest Path First)</dt>
<dd class="text-sm text-base/70 ml-4">A routing algorithm used by OSPF and IS-IS. Calculates the shortest path to destinations using Dijkstra's algorithm based on link costs.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SSH (Secure Shell)</dt>
<dd class="text-sm text-base/70 ml-4">A network protocol (RFC 4253) for secure remote access and command execution. Uses public-key cryptography for authentication. Operates on TCP port 22.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">SSL/TLS (Secure Sockets Layer / Transport Layer Security)</dt>
<dd class="text-sm text-base/70 ml-4">Cryptographic protocols (RFC 8446 for TLS 1.3) that provide secure communication over networks. Used for HTTPS, VPNs, and encrypted connections. TLS is the modern replacement for SSL.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Storage</dt>
<dd class="text-sm text-base/70 ml-4">A backend system for storing VM disks, ISO images, and backups. Types include local, local-lvm, Ceph, NFS, and others.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Subdomain</dt>
<dd class="text-sm text-base/70 ml-4">A domain that is part of a larger domain hierarchy. For example, "web.example.com" is a subdomain of "example.com".</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Subnet</dt>
<dd class="text-sm text-base/70 ml-4">A logical subdivision of an IP network. Defined by a network address and subnet mask (or CIDR notation). Enables network segmentation and efficient IP address allocation.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Subnet Mask</dt>
<dd class="text-sm text-base/70 ml-4">A 32-bit number (IPv4) that identifies which portion of an IP address is the network portion and which is the host portion. Expressed in dotted decimal (255.255.255.0) or CIDR notation (/24).</dd>
</div>
</div>
</div>
<!-- T -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">T</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">TCP (Transmission Control Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A connection-oriented transport protocol (RFC 793) that provides reliable, ordered delivery of data. Used by HTTP, HTTPS, SSH, and many other applications. Operates at OSI Layer 4.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TFTP (Trivial File Transfer Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A simple file transfer protocol (RFC 1350) used for PXE network boot to download boot files from a network server. Uses UDP port 69. No authentication or encryption.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Thin Provisioning</dt>
<dd class="text-sm text-base/70 ml-4">A storage allocation technique where disk space is allocated on-demand rather than upfront. Allows overcommitment of storage resources.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">ToS (Type of Service)</dt>
<dd class="text-sm text-base/70 ml-4">A field in the IP header (RFC 791) used for quality of service indication. Replaced by DSCP (Differentiated Services) in modern networks. Used for traffic prioritization.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TPM (Trusted Platform Module)</dt>
<dd class="text-sm text-base/70 ml-4">A hardware security module that provides secure storage for keys and cryptographic operations. Required for features like BitLocker and Secure Boot.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TSIG (Transaction Signature)</dt>
<dd class="text-sm text-base/70 ml-4">A DNS security mechanism (RFC 2845) that provides authentication for DNS updates using cryptographic signatures. Prevents unauthorized DNS zone modifications.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TTL (Time To Live)</dt>
<dd class="text-sm text-base/70 ml-4">A DNS record field (RFC 1035) that specifies how long a DNS record should be cached before being refreshed. Also used in IP packets to limit routing hops (prevents infinite loops).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Tailscale</dt>
<dd class="text-sm text-base/70 ml-4">A zero-configuration VPN service built on WireGuard that creates a secure mesh network. Provides automatic NAT traversal, centralized access control, and easy device management. Uses WireGuard protocol with additional coordination layer for seamless connectivity across firewalls and NAT devices.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TAP Device</dt>
<dd class="text-sm text-base/70 ml-4">A virtual network interface that operates at Layer 2 (Ethernet). Created automatically by the platform for each VM network adapter and connected to a Linux bridge. TAP (Network TAP) provides Layer 2 connectivity. Also used by VPN software like OpenVPN for bridging networks.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TCP (Transmission Control Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A connection-oriented transport protocol (RFC 793) that provides reliable, ordered delivery of data. Used by HTTP, HTTPS, SSH, and many other applications. Operates at OSI Layer 4.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Tunnel</dt>
<dd class="text-sm text-base/70 ml-4">A method of encapsulating one network protocol within another. Examples include VPN tunnels (IPsec, OpenVPN, WireGuard), GRE (Generic Routing Encapsulation), and VXLAN (Virtual Extensible LAN). Enables secure communication, network extension, and protocol transport across incompatible networks.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">TUN Device</dt>
<dd class="text-sm text-base/70 ml-4">A virtual network interface that operates at Layer 3 (IP). Used by VPN software like OpenVPN and WireGuard for routing-based VPNs. Provides IP-level connectivity without Ethernet framing.</dd>
</div>
</div>
</div>
<!-- U -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">U</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">UDP (User Datagram Protocol)</dt>
<dd class="text-sm text-base/70 ml-4">A connectionless transport protocol (RFC 768) that provides fast but unreliable data delivery. Used by DNS, DHCP, TFTP, and streaming applications. Operates at OSI Layer 4.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">UEFI (Unified Extensible Firmware Interface)</dt>
<dd class="text-sm text-base/70 ml-4">A modern firmware interface that replaces BIOS. Provides better security features (Secure Boot), faster boot times, and support for larger disks (GPT).</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Unicast</dt>
<dd class="text-sm text-base/70 ml-4">A network transmission method where data is sent from one source to one destination. The most common transmission method for point-to-point communication. Each packet has a single destination address.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">USB Tablet</dt>
<dd class="text-sm text-base/70 ml-4">A virtual input device that provides absolute pointer tracking for smoother mouse capture in VNC. Recommended for graphical environments.</dd>
</div>
</div>
</div>
<!-- V -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">V</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">VGA (Video Graphics Array)</dt>
<dd class="text-sm text-base/70 ml-4">A display standard. Virtual VGA adapters provide graphical output for virtual machines. Options include Standard VGA, VirtIO-GPU, QXL, and VMware SVGA.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VLAN (Virtual Local Area Network)</dt>
<dd class="text-sm text-base/70 ml-4">A network segmentation technique (IEEE 802.1Q) that logically separates network traffic. VLAN-aware bridges support tagged VLAN traffic. VLAN tags (1-4094) identify different network segments on the same physical infrastructure.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VXLAN (Virtual Extensible LAN)</dt>
<dd class="text-sm text-base/70 ml-4">A network virtualization technology (RFC 7348) that overlays Layer 2 networks over Layer 3. Enables large-scale network segmentation (24-bit VNI vs 12-bit VLAN). Used in cloud and data center environments.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VMA (Virtual Machine Archive)</dt>
<dd class="text-sm text-base/70 ml-4">A proprietary backup format used by the management platform. Stores complete VM state including disks, configuration, and metadata. Typically compressed with zstd or gzip.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VNC (Virtual Network Computing)</dt>
<dd class="text-sm text-base/70 ml-4">A remote desktop protocol (RFC 6143) that provides graphical console access to remote systems. The platform provides VNC access via WebSocket proxy.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VirtIO</dt>
<dd class="text-sm text-base/70 ml-4">A paravirtualization framework that provides high-performance virtual devices (network, disk, GPU) for virtual machines. Reduces overhead compared to emulated devices.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VirtIO-GPU</dt>
<dd class="text-sm text-base/70 ml-4">A paravirtualized graphics adapter that provides hardware acceleration and supports up to 256MB VRAM. Best performance option for Linux guests.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VM (Virtual Machine)</dt>
<dd class="text-sm text-base/70 ml-4">A software emulation of a physical computer that runs an operating system and applications. Also called a "guest" or "instance".</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VMID (Virtual Machine ID)</dt>
<dd class="text-sm text-base/70 ml-4">A unique numeric identifier assigned to each VM. Typically ranges from 100-999 for user VMs, with lower numbers reserved for system VMs.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VMware SVGA</dt>
<dd class="text-sm text-base/70 ml-4">A virtual graphics adapter that emulates VMware's SVGA II adapter. Provides good compatibility with VMware virtual machines and works well with VMware Tools.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">vhost-net</dt>
<dd class="text-sm text-base/70 ml-4">A kernel-based packet processing mechanism for VirtIO network adapters. Reduces latency by moving packet processing from userspace to kernel space.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">VRAM (Video Random Access Memory)</dt>
<dd class="text-sm text-base/70 ml-4">Memory allocated to the graphics adapter for storing frame buffers and graphics data. Allocated from the VM's main memory.</dd>
</div>
</div>
</div>
<!-- W -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">W</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">WebSocket</dt>
<dd class="text-sm text-base/70 ml-4">A communication protocol that provides full-duplex communication over a single TCP connection. Used by the platform for VNC and serial console access via web browsers.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">Wildcard</dt>
<dd class="text-sm text-base/70 ml-4">A DNS record that matches all subdomains. Represented by an asterisk (*). For example, *.example.com matches www.example.com, mail.example.com, etc.</dd>
</div>
<div>
<dt class="font-semibold text-base mb-1">WireGuard</dt>
<dd class="text-sm text-base/70 ml-4">A modern, high-performance VPN protocol that uses state-of-the-art cryptography (ChaCha20, Poly1305, Curve25519, BLAKE2). Simpler and faster than IPsec and OpenVPN. Uses UDP transport and supports both TUN (routing) and TAP (bridging) modes. Native support in Linux kernel 5.6+. Provides secure point-to-point and site-to-site VPN connections with minimal configuration overhead.</dd>
</div>
</div>
</div>
<!-- X -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">X</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">Xterm.js</dt>
<dd class="text-sm text-base/70 ml-4">A web-based terminal emulator that provides text-based console access to virtual machines through a web browser. Emulates a standard terminal interface.</dd>
</div>
</div>
</div>
<!-- Y -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">Y</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">YAML (YAML Ain't Markup Language)</dt>
<dd class="text-sm text-base/70 ml-4">A human-readable data serialization format. Used by cloud-init for configuration files (user-data, meta-data).</dd>
</div>
</div>
</div>
<!-- Z -->
<div>
<h3 class="text-xl font-semibold mb-3 flex items-center gap-2">
<span class="text-2xl">Z</span>
</h3>
<div class="bg-background border border-neutral rounded-lg p-4 space-y-3">
<div>
<dt class="font-semibold text-base mb-1">zstd (Zstandard)</dt>
<dd class="text-sm text-base/70 ml-4">A fast compression algorithm developed by Facebook. Used by the platform for compressing backup files (VMA format). Provides better compression ratios and speed than gzip.</dd>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</x-proxmox::layout>