5980 lines
428 KiB
PHP
5980 lines
428 KiB
PHP
<x-proxmox::layout :server="$server" view="help" :status="$status" :status-polling="true" :status-polling-interval="'2s'">
|
||
<style>
|
||
.help-search-input {
|
||
padding-left: 2.75rem;
|
||
}
|
||
pre {
|
||
position: relative;
|
||
}
|
||
.code-copy-btn {
|
||
position: absolute;
|
||
top: 0.5rem;
|
||
right: 0.5rem;
|
||
padding: 0.25rem;
|
||
border-radius: 0.375rem;
|
||
background: transparent;
|
||
color: var(--base, #9ca3af);
|
||
opacity: 0;
|
||
transition: opacity 150ms, background-color 150ms, color 150ms;
|
||
cursor: pointer;
|
||
border: none;
|
||
line-height: 0;
|
||
}
|
||
pre:hover .code-copy-btn {
|
||
opacity: 0.7;
|
||
}
|
||
.code-copy-btn:hover {
|
||
opacity: 1 !important;
|
||
background: var(--neutral, rgba(255,255,255,0.1));
|
||
color: var(--primary, #60a5fa);
|
||
}
|
||
.code-copy-btn.copied {
|
||
opacity: 1 !important;
|
||
color: #22c55e;
|
||
}
|
||
</style>
|
||
<div class="flex items-center gap-1.5 text-xs text-base/50 mb-4">
|
||
<a href="{{ route('proxmox.server.overview', ['server' => $server->id]) }}" wire:navigate class="hover:text-primary transition-colors">Overview</a>
|
||
<x-ri-arrow-right-s-line class="size-3" />
|
||
<span class="text-base/70">Help</span>
|
||
</div>
|
||
<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', 'reinstall', '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="help-search-input 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"
|
||
/>
|
||
</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>
|
||
<button @click="activeSection = 'reinstall'"
|
||
x-show="shouldShowSection('reinstall', 'reinstall operating system os template fresh install', 'reinstall operating system os template fresh install')"
|
||
:class="activeSection === 'reinstall' ? '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-refresh-line class="size-4" />
|
||
<span>How to Reinstall</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 = 'firewall'"
|
||
x-show="shouldShowSection('firewall', 'firewall rules allow block port access security', 'firewall rules allow block port access security')"
|
||
:class="activeSection === 'firewall' ? '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-shield-line class="size-4" />
|
||
<span>Firewall</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">
|
||
<!-- Quick Jump Bar (mobile-friendly, visible on lg too) -->
|
||
<div class="mb-4 bg-background-secondary border border-neutral rounded-lg p-3 lg:hidden">
|
||
<label class="text-xs font-semibold text-base/50 mb-1.5 block">Jump to section</label>
|
||
<select @change="activeSection = $event.target.value" :value="activeSection"
|
||
class="w-full text-sm rounded-md border border-neutral/60 bg-background py-1.5 px-2 focus:outline-none focus:ring-1 focus:ring-primary focus:border-primary">
|
||
<optgroup label="Getting Started">
|
||
<option value="overview">Overview</option>
|
||
<option value="quick-start">Quick Start Guide</option>
|
||
<option value="reinstall">How to Reinstall</option>
|
||
</optgroup>
|
||
<optgroup label="Configuration">
|
||
<option value="boot-settings">Boot Settings</option>
|
||
<option value="firewall">Firewall</option>
|
||
<option value="network">Network</option>
|
||
<option value="subdomain">Subdomain</option>
|
||
<option value="cloud-init">Cloud-init</option>
|
||
<option value="display">Display</option>
|
||
<option value="statistics">Statistics</option>
|
||
</optgroup>
|
||
<optgroup label="Advanced">
|
||
<option value="system">System</option>
|
||
<option value="backups">Backups</option>
|
||
<option value="console">Console Access</option>
|
||
<option value="bgp">BGP Routing</option>
|
||
</optgroup>
|
||
<optgroup label="Reference">
|
||
<option value="glossary">Glossary</option>
|
||
<option value="rfc-standards">RFC Standards</option>
|
||
<option value="troubleshooting">Troubleshooting</option>
|
||
</optgroup>
|
||
</select>
|
||
</div>
|
||
|
||
<!-- Section indicator breadcrumb -->
|
||
<div class="hidden lg:flex items-center gap-2 mb-3 text-xs text-base/50">
|
||
<span>Help</span>
|
||
<svg class="size-3" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/></svg>
|
||
<span x-text="({
|
||
'overview': 'Overview',
|
||
'quick-start': 'Quick Start Guide',
|
||
'reinstall': 'How to Reinstall',
|
||
'boot-settings': 'Boot Settings',
|
||
'firewall': 'Firewall',
|
||
'network': 'Network',
|
||
'subdomain': 'Subdomain',
|
||
'cloud-init': 'Cloud-init',
|
||
'display': 'Display',
|
||
'statistics': 'Statistics',
|
||
'system': 'System',
|
||
'backups': 'Backups',
|
||
'console': 'Console Access',
|
||
'bgp': 'BGP Routing',
|
||
'glossary': 'Glossary',
|
||
'rfc-standards': 'RFC Standards',
|
||
'troubleshooting': 'Troubleshooting'
|
||
})[activeSection] || activeSection" class="text-base/70 font-medium"></span>
|
||
</div>
|
||
|
||
<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>
|
||
|
||
<!-- How to Reinstall Section -->
|
||
<div x-show="activeSection === 'reinstall'" x-transition style="display: none;" data-section-id="reinstall">
|
||
<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-refresh-line class="size-5 text-primary" />
|
||
</div>
|
||
<h2 class="text-2xl font-bold">How to Reinstall</h2>
|
||
</div>
|
||
|
||
<p class="text-base/80 mb-6">
|
||
Learn how to reinstall your virtual machine with a fresh operating system. Reinstalling will completely wipe your current installation and install a new OS from scratch.
|
||
</p>
|
||
|
||
<div class="bg-warning/10 border border-warning/30 rounded-lg p-4 mb-6">
|
||
<div class="flex items-start gap-3">
|
||
<x-ri-error-warning-line class="size-5 text-warning flex-shrink-0 mt-0.5" />
|
||
<div>
|
||
<p class="text-sm font-semibold mb-2 text-warning">Important: Data Loss Warning</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
|
||
<li><strong>All data will be permanently deleted</strong> - This includes files, applications, configurations, and user data</li>
|
||
<li><strong>Backups are not automatically restored</strong> - Make sure to restore any needed data from backups after reinstallation</li>
|
||
<li><strong>IP addresses are preserved</strong> - Your assigned IP addresses will remain the same</li>
|
||
<li><strong>Network configuration is reset</strong> - You may need to reconfigure network settings after reinstall</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<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>
|
||
Before You Begin
|
||
</h3>
|
||
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
|
||
<li><strong>Backup important data</strong> - Download or backup any files, databases, or configurations you need to keep</li>
|
||
<li><strong>Document your current configuration</strong> - Note down network settings, installed packages, and custom configurations</li>
|
||
<li><strong>Verify server protection status</strong> - Some servers may have reinstall protection enabled (contact support if needed)</li>
|
||
<li><strong>Ensure you have console access</strong> - You'll need NoVNC or Xterm.js access to complete the installation</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>
|
||
Accessing the Reinstall Feature
|
||
</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 of your server</li>
|
||
<li>Scroll down to find the <strong>"Reinstall Server"</strong> button (usually in the server management section)</li>
|
||
<li>Click the button to open the reinstall dialog</li>
|
||
<li>If the button is disabled or shows a warning, your server may be protected - contact support</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>
|
||
Selecting an Operating System
|
||
</h3>
|
||
<p class="text-sm text-base/70 mb-3 ml-10">
|
||
The reinstall dialog displays available operating system templates organized by category:
|
||
</p>
|
||
<ul class="list-disc list-inside space-y-2 text-sm text-base/70 ml-10">
|
||
<li><strong>Ubuntu</strong> - Popular Linux distribution with LTS (Long Term Support) versions</li>
|
||
<li><strong>Debian</strong> - Stable, community-driven Linux distribution</li>
|
||
<li><strong>CentOS / Enterprise / RHEL Family</strong> - Enterprise Linux distributions (AlmaLinux, Rocky Linux, Oracle Linux)</li>
|
||
<li><strong>Community & Rolling</strong> - Fedora, Arch Linux, openSUSE, Gentoo</li>
|
||
<li><strong>Lightweight</strong> - Alpine Linux for minimal resource usage</li>
|
||
<li><strong>BSD Family</strong> - FreeBSD, NetBSD, OpenBSD</li>
|
||
<li><strong>Windows Server</strong> - Microsoft Windows Server editions</li>
|
||
<li><strong>Proxmox Hypervisor</strong> - Proxmox VE for virtualization hosts</li>
|
||
</ul>
|
||
<p class="text-sm text-base/70 mt-3 ml-10">
|
||
<strong>Tip:</strong> Look for "Recommended" badges on certain OS versions for best compatibility and support.
|
||
</p>
|
||
</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>
|
||
Confirming the Reinstall
|
||
</h3>
|
||
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
|
||
<li>Select your desired operating system from the list</li>
|
||
<li>Review the warning message about data loss</li>
|
||
<li>Check the confirmation checkbox to acknowledge data will be deleted</li>
|
||
<li>Click <strong>"Reinstall"</strong> to begin the process</li>
|
||
<li>You will be redirected to the servers list - the reinstall happens in the background</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">5</span>
|
||
During Reinstallation
|
||
</h3>
|
||
<p class="text-sm text-base/70 mb-3 ml-10">
|
||
The reinstall process typically takes 5-15 minutes and involves:
|
||
</p>
|
||
<ul class="list-disc list-inside space-y-2 text-sm text-base/70 ml-10">
|
||
<li>Stopping the current virtual machine</li>
|
||
<li>Deleting the existing VM configuration and disk</li>
|
||
<li>Creating a new VM with the selected OS template</li>
|
||
<li>Installing the operating system from scratch</li>
|
||
<li>Configuring network settings with your assigned IP addresses</li>
|
||
<li>Setting up initial user credentials (password will be generated and sent via notification)</li>
|
||
</ul>
|
||
</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">6</span>
|
||
After Reinstallation
|
||
</h3>
|
||
<ol class="list-decimal list-inside space-y-2 text-sm text-base/70 ml-10">
|
||
<li><strong>Check your notifications</strong> - You'll receive a notification with the new root/admin password</li>
|
||
<li><strong>Access the console</strong> - Use NoVNC or Xterm.js to access the new installation</li>
|
||
<li><strong>Verify network connectivity</strong> - Check that IP addresses are configured correctly</li>
|
||
<li><strong>Update the system</strong> - Run system updates: <code class="bg-background-secondary px-2 py-1 rounded">apt update && apt upgrade</code> (Debian/Ubuntu) or equivalent</li>
|
||
<li><strong>Restore your data</strong> - Restore files and configurations from your backups</li>
|
||
<li><strong>Reconfigure services</strong> - Set up applications, web servers, databases, etc.</li>
|
||
<li><strong>Update Cloud-init settings</strong> - Configure hostname, SSH keys, and other settings in the Cloud-init tab</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">
|
||
<x-ri-question-line class="size-5 text-info" />
|
||
Frequently Asked Questions
|
||
</h3>
|
||
<div class="space-y-4 ml-10">
|
||
<div>
|
||
<p class="text-sm font-semibold mb-1 text-base/90">Will my IP addresses change?</p>
|
||
<p class="text-sm text-base/70">No, your assigned IP addresses (both IPv4 and IPv6) will remain the same after reinstallation.</p>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-semibold mb-1 text-base/90">Can I cancel a reinstall once it starts?</p>
|
||
<p class="text-sm text-base/70">No, once the reinstall process begins, it cannot be cancelled. The old VM is deleted immediately.</p>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-semibold mb-1 text-base/90">What if my server shows "Protected" status?</p>
|
||
<p class="text-sm text-base/70">Protected servers have reinstall disabled for safety. Contact support to enable reinstall if needed.</p>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-semibold mb-1 text-base/90">Will my backups be deleted?</p>
|
||
<p class="text-sm text-base/70">No, existing backups are preserved. However, you'll need to manually restore data from backups after reinstall.</p>
|
||
</div>
|
||
<div>
|
||
<p class="text-sm font-semibold mb-1 text-base/90">How long does reinstallation take?</p>
|
||
<p class="text-sm text-base/70">Typically 5-15 minutes depending on the OS template size and server resources. You'll receive a notification when complete.</p>
|
||
</div>
|
||
</div>
|
||
</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 <vmid> info block</code> or <code>qm config <vmid></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 -->
|
||
|
||
<!-- Firewall Section -->
|
||
<div x-show="activeSection === 'firewall'" x-transition style="display: none;" data-section-id="firewall">
|
||
<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-shield-line class="size-5 text-primary" />
|
||
</div>
|
||
<h2 class="text-2xl font-bold">Firewall Tab</h2>
|
||
</div>
|
||
|
||
<p class="text-base/80 mb-6">
|
||
The Firewall tab provides comprehensive firewall management for your virtual machine. You can enable or disable the firewall, create allow and block rules for network traffic, manage aliases for IP addresses and networks, and configure IP sets for advanced rule management.
|
||
</p>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-toggle-line class="size-5 text-base/60" />
|
||
Firewall Status
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
The firewall can be enabled or disabled using the toggle switch at the top of the Firewall tab. When enabled, all configured firewall rules will be active and enforced. When disabled, all traffic will be allowed by default.
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li><strong>Enabled:</strong> All firewall rules are active and traffic is filtered according to your rules</li>
|
||
<li><strong>Disabled:</strong> All traffic is allowed, firewall rules are ignored</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-list-check class="size-5 text-base/60" />
|
||
Firewall Rules
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
Firewall rules control which network traffic is allowed or blocked. Rules are processed in order from top to bottom, and the first matching rule determines the action taken.
|
||
</p>
|
||
|
||
<h4 class="text-lg font-semibold mt-4 mb-2">Rule Actions</h4>
|
||
<table class="w-full border border-neutral rounded-md mb-4">
|
||
<thead>
|
||
<tr>
|
||
<th class="text-left py-2 px-3 font-semibold border-b border-neutral text-sm">Action</th>
|
||
<th class="text-left py-2 px-3 font-semibold border-b border-neutral text-sm">Description</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="text-sm text-base/70">
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-3 font-semibold">ACCEPT</td>
|
||
<td class="py-2 px-3">Allows the matching traffic to pass through</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-3 font-semibold">REJECT</td>
|
||
<td class="py-2 px-3">Blocks the traffic and sends a rejection response to the sender</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="py-2 px-3 font-semibold">DROP</td>
|
||
<td class="py-2 px-3">Silently blocks the traffic without sending a response</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
<h4 class="text-lg font-semibold mt-4 mb-2">Rule Parameters</h4>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-2 ml-2">
|
||
<li><strong>Source:</strong> IP address or network (CIDR notation) where traffic originates from (e.g., <code>192.168.1.0/24</code>)</li>
|
||
<li><strong>Destination:</strong> IP address or network (CIDR notation) where traffic is going to</li>
|
||
<li><strong>Protocol:</strong> Network protocol (TCP, UDP, ICMP, ICMPv6, or Any)</li>
|
||
<li><strong>Destination Port:</strong> Port number or range (e.g., <code>80</code>, <code>443</code>, or <code>1000:2000</code>)</li>
|
||
<li><strong>Source Port:</strong> Source port number or range</li>
|
||
<li><strong>Interface:</strong> Network interface name (e.g., <code>net0</code>) to apply the rule to</li>
|
||
<li><strong>Log Level:</strong> Optional logging level for matching traffic (info, warning, error, etc.)</li>
|
||
<li><strong>Comment:</strong> Optional description for the rule</li>
|
||
</ul>
|
||
|
||
<h4 class="text-lg font-semibold mt-4 mb-2">Rule Order</h4>
|
||
<p class="text-sm text-base/70 mb-2">
|
||
Rules are processed in order from top to bottom. The first matching rule determines the action. It's important to place more specific rules before general ones. For example:
|
||
</p>
|
||
<ol class="list-decimal list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li>Allow specific IP addresses first</li>
|
||
<li>Then allow specific port ranges</li>
|
||
<li>Finally, block or reject all other traffic</li>
|
||
</ol>
|
||
</div>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-bookmark-line class="size-5 text-base/60" />
|
||
Aliases
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
Aliases allow you to create named references to IP addresses or networks. This makes firewall rules more readable and easier to maintain. Instead of typing IP addresses repeatedly, you can use an alias name.
|
||
</p>
|
||
<p class="text-sm text-base/70 mb-3">
|
||
<strong>Example:</strong> Create an alias named <code>trusted-network</code> for <code>192.168.1.0/24</code>, then use <code>trusted-network</code> in your firewall rules instead of the full CIDR notation.
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li>Alias names must be unique</li>
|
||
<li>CIDR notation is required (e.g., <code>192.168.1.0/24</code>)</li>
|
||
<li>Aliases can be used in firewall rule source and destination fields</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-stack-line class="size-5 text-base/60" />
|
||
IP Sets
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
IP sets are collections of IP addresses or networks that can be referenced in firewall rules. They are useful for managing large lists of IP addresses, such as blocked IPs or allowed IPs for specific services.
|
||
</p>
|
||
<p class="text-sm text-base/70 mb-3">
|
||
<strong>Use Cases:</strong>
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li>Blocking multiple IP addresses from accessing your services</li>
|
||
<li>Creating allow lists for specific applications</li>
|
||
<li>Managing IP addresses that change frequently</li>
|
||
</ul>
|
||
<p class="text-sm text-base/70 mt-3">
|
||
<strong>Note:</strong> After creating an IP set, you can add individual IP addresses or networks to it through the API. IP sets can then be referenced in firewall rules using the set name.
|
||
</p>
|
||
</div>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-lightbulb-line class="size-5 text-base/60" />
|
||
Best Practices
|
||
</h3>
|
||
<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 ml-2">
|
||
<li><strong>Default Deny:</strong> Start with a default deny policy and explicitly allow only necessary traffic</li>
|
||
<li><strong>Specific Rules First:</strong> Place more specific rules before general ones to ensure correct matching</li>
|
||
<li><strong>Use Aliases:</strong> Use aliases for frequently referenced networks to improve readability and maintenance</li>
|
||
<li><strong>Enable Logging:</strong> Enable logging on important rules to monitor traffic and troubleshoot issues</li>
|
||
<li><strong>Test Rules:</strong> Test new rules carefully to avoid accidentally blocking legitimate traffic</li>
|
||
<li><strong>Document Rules:</strong> Use comments to document the purpose of each rule</li>
|
||
<li><strong>Regular Review:</strong> Periodically review and clean up unused rules, aliases, and IP sets</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<h3 class="text-xl font-semibold mt-6 mb-4 flex items-center gap-2">
|
||
<x-ri-question-line class="size-5 text-base/60" />
|
||
Common Scenarios
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<h4 class="text-lg font-semibold mt-2 mb-2">Allow SSH from Specific IP</h4>
|
||
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto mb-3"><code>Action: ACCEPT
|
||
Source: 192.168.1.100
|
||
Protocol: TCP
|
||
Destination Port: 22
|
||
Comment: Allow SSH from office</code></pre>
|
||
|
||
<h4 class="text-lg font-semibold mt-4 mb-2">Block All Traffic from a Network</h4>
|
||
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto mb-3"><code>Action: DROP
|
||
Source: 10.0.0.0/8
|
||
Comment: Block private network range</code></pre>
|
||
|
||
<h4 class="text-lg font-semibold mt-4 mb-2">Allow Web Traffic on Ports 80 and 443</h4>
|
||
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto mb-3"><code>Action: ACCEPT
|
||
Protocol: TCP
|
||
Destination Port: 80,443
|
||
Comment: Allow HTTP and HTTPS</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 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 <vmid></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 <vmid></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>
|
||
|
||
<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" />
|
||
IPv6 vs IPv4: Understanding the Differences
|
||
</h3>
|
||
<div class="bg-background border border-neutral rounded-lg p-5 mb-4">
|
||
<p class="text-base/80 mb-4">
|
||
IPv4 and IPv6 are separate and independent network protocols that operate at the same layer (Layer 3) but use completely different addressing schemes and have distinct characteristics. Understanding their differences is crucial for proper network configuration.
|
||
</p>
|
||
|
||
<div class="space-y-6">
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">Fundamental Differences</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">Characteristic</th>
|
||
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">IPv4</th>
|
||
<th class="text-left py-3 px-4 font-semibold border-b border-neutral">IPv6</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">Address Length</td>
|
||
<td class="py-2 px-4">32 bits (4 bytes)</td>
|
||
<td class="py-2 px-4">128 bits (16 bytes)</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">Address Format</td>
|
||
<td class="py-2 px-4"><code>192.168.1.1</code> (dotted decimal)</td>
|
||
<td class="py-2 px-4"><code>2001:db8::1</code> (hexadecimal)</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">Address Space</td>
|
||
<td class="py-2 px-4">~4.3 billion addresses</td>
|
||
<td class="py-2 px-4">~340 undecillion addresses</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">NAT Requirement</td>
|
||
<td class="py-2 px-4">Commonly required due to address exhaustion</td>
|
||
<td class="py-2 px-4">Not required (sufficient addresses)</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">Header Size</td>
|
||
<td class="py-2 px-4">20 bytes (minimum)</td>
|
||
<td class="py-2 px-4">40 bytes (fixed)</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">Fragmentation</td>
|
||
<td class="py-2 px-4">Performed by routers</td>
|
||
<td class="py-2 px-4">Performed by source only</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-4 font-semibold">Security</td>
|
||
<td class="py-2 px-4">Optional (IPsec)</td>
|
||
<td class="py-2 px-4">Built-in (IPsec mandatory)</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="py-2 px-4 font-semibold">Configuration</td>
|
||
<td class="py-2 px-4">Manual or DHCP</td>
|
||
<td class="py-2 px-4">SLAAC (Stateless) or DHCPv6</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">Separate and Independent Operation</h4>
|
||
<div class="bg-background-secondary border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
<strong>IPv4 and IPv6 are completely separate protocols:</strong>
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-2 ml-2">
|
||
<li>They operate independently on the same network interface (dual-stack)</li>
|
||
<li>Each protocol has its own routing table and forwarding logic</li>
|
||
<li>IPv4 addresses cannot communicate directly with IPv6 addresses</li>
|
||
<li>Both can be assigned to the same network interface simultaneously</li>
|
||
<li>Applications must explicitly support IPv6 to use it (IPv4 is the default fallback)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">Functionalities and Use Cases</h4>
|
||
<div class="grid md:grid-cols-2 gap-4 mb-4">
|
||
<div class="bg-background border border-neutral rounded-md p-4">
|
||
<h5 class="font-semibold mb-2 text-base/90 flex items-center gap-2">
|
||
<x-ri-wifi-line class="size-4 text-primary" />
|
||
IPv4 Functionalities
|
||
</h5>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
|
||
<li>Universal compatibility (all systems support IPv4)</li>
|
||
<li>Mature ecosystem with extensive tooling</li>
|
||
<li>Required for legacy applications and services</li>
|
||
<li>Essential for email (SMTP) and many mail servers</li>
|
||
<li>Widely supported by CDNs and hosting providers</li>
|
||
<li>Standard for most web hosting and APIs</li>
|
||
<li>Required for many third-party integrations</li>
|
||
</ul>
|
||
</div>
|
||
<div class="bg-background border border-neutral rounded-md p-4">
|
||
<h5 class="font-semibold mb-2 text-base/90 flex items-center gap-2">
|
||
<x-ri-global-line class="size-4 text-primary" />
|
||
IPv6 Functionalities
|
||
</h5>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1">
|
||
<li>Massive address space (no NAT needed)</li>
|
||
<li>Improved routing efficiency and performance</li>
|
||
<li>Built-in security features (IPsec)</li>
|
||
<li>Better support for mobile and IoT devices</li>
|
||
<li>Simplified network configuration (SLAAC)</li>
|
||
<li>Future-proof for growing internet needs</li>
|
||
<li>Reduced latency in some scenarios</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">IPv4-Only Services and Compatibility</h4>
|
||
<div class="bg-warning/10 border border-warning/30 rounded-lg p-4 mb-4">
|
||
<div class="flex items-start gap-3">
|
||
<x-ri-information-line class="size-5 text-warning flex-shrink-0 mt-0.5" />
|
||
<div>
|
||
<p class="text-sm font-semibold mb-2 text-warning">Why Some Services Remain IPv4-Only</p>
|
||
<p class="text-sm text-base/70 mb-3">
|
||
Many critical internet services, particularly email and legacy systems, are typically deployed only on IPv4 for compatibility reasons:
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li><strong>Email (SMTP/POP3/IMAP):</strong> Many mail servers and email providers only accept connections over IPv4 due to legacy infrastructure, spam filtering systems, and compatibility with older mail clients</li>
|
||
<li><strong>Legacy Applications:</strong> Older software and enterprise applications may not support IPv6 at all</li>
|
||
<li><strong>Third-Party APIs:</strong> Many external services and APIs only provide IPv4 endpoints</li>
|
||
<li><strong>CDN and Hosting:</strong> Some content delivery networks and hosting providers have limited IPv6 support</li>
|
||
<li><strong>DNS and Infrastructure:</strong> Some DNS resolvers and network infrastructure components are IPv4-only</li>
|
||
<li><strong>Security Tools:</strong> Firewalls, intrusion detection systems, and security appliances may have better IPv4 support</li>
|
||
</ul>
|
||
<p class="text-sm text-base/70 mt-3">
|
||
<strong>Best Practice:</strong> Deploy services on both IPv4 and IPv6 (dual-stack) when possible, but always ensure IPv4 connectivity for maximum compatibility, especially for email and critical business applications.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">IPv6 Adoption Worldwide</h4>
|
||
<p class="text-sm text-base/70 mb-3">
|
||
The following chart from <a href="https://stats.labs.apnic.net/cgi-bin/ccpagev6?c=XA" target="_blank" rel="noopener noreferrer" class="text-primary hover:underline">APNIC Labs</a> shows the current IPv6 adoption rate for the world. IPv6 adoption varies significantly by region, with some countries having over 50% adoption while others remain primarily on IPv4.
|
||
</p>
|
||
<style>
|
||
.ipv6-iframe-container {
|
||
width: 100%;
|
||
max-width: 100%;
|
||
overflow-x: hidden !important;
|
||
overflow-y: visible;
|
||
box-sizing: border-box;
|
||
}
|
||
.ipv6-iframe-wrapper {
|
||
width: 100%;
|
||
max-width: 100%;
|
||
overflow: hidden;
|
||
position: relative;
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: flex-start;
|
||
}
|
||
.ipv6-iframe-wrapper iframe {
|
||
width: 1200px;
|
||
height: 600px;
|
||
border: 0;
|
||
box-sizing: border-box;
|
||
overflow: hidden;
|
||
zoom: 0.8;
|
||
-moz-transform: scale(0.8);
|
||
-moz-transform-origin: top center;
|
||
-webkit-transform: scale(0.8);
|
||
-webkit-transform-origin: top center;
|
||
transform: scale(0.8);
|
||
transform-origin: top center;
|
||
}
|
||
@media (max-width: 768px) {
|
||
.ipv6-iframe-wrapper iframe {
|
||
zoom: 0.4;
|
||
-moz-transform: scale(0.4);
|
||
-webkit-transform: scale(0.4);
|
||
transform: scale(0.4);
|
||
}
|
||
}
|
||
@media (min-width: 769px) and (max-width: 1023px) {
|
||
.ipv6-iframe-wrapper iframe {
|
||
zoom: 0.6;
|
||
-moz-transform: scale(0.6);
|
||
-webkit-transform: scale(0.6);
|
||
transform: scale(0.6);
|
||
}
|
||
}
|
||
@media (min-width: 1024px) and (max-width: 1279px) {
|
||
.ipv6-iframe-wrapper iframe {
|
||
zoom: 0.75;
|
||
-moz-transform: scale(0.75);
|
||
-webkit-transform: scale(0.75);
|
||
transform: scale(0.75);
|
||
}
|
||
}
|
||
@media (min-width: 1280px) {
|
||
.ipv6-iframe-wrapper iframe {
|
||
zoom: 0.9;
|
||
-moz-transform: scale(0.9);
|
||
-webkit-transform: scale(0.9);
|
||
transform: scale(0.9);
|
||
}
|
||
}
|
||
</style>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4 ipv6-iframe-container">
|
||
<div class="ipv6-iframe-wrapper">
|
||
<iframe
|
||
src="https://stats.labs.apnic.net/cgi-bin/ccpagev6?c=XA"
|
||
title="IPv6 Adoption Rate - World (XA)"
|
||
class="border-0 rounded"
|
||
loading="lazy"
|
||
allow="fullscreen"
|
||
sandbox="allow-same-origin allow-scripts allow-popups allow-forms"
|
||
scrolling="no"
|
||
></iframe>
|
||
</div>
|
||
<p class="text-xs text-base/60 mt-2 text-center">
|
||
Source: <a href="https://stats.labs.apnic.net/cgi-bin/ccpagev6?c=XA" target="_blank" rel="noopener noreferrer" class="text-primary hover:underline">APNIC IPv6 Statistics - World (XA)</a> - Asia-Pacific Network Information Centre
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">Dual-Stack Configuration</h4>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
<strong>Dual-stack</strong> refers to running both IPv4 and IPv6 simultaneously on the same network interface. This is the recommended approach for maximum compatibility:
|
||
</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2 mb-3">
|
||
<li>IPv4 ensures compatibility with all existing services and applications</li>
|
||
<li>IPv6 provides future-proofing and access to IPv6-only resources</li>
|
||
<li>Applications automatically choose the best protocol (IPv6 preferred, IPv4 fallback)</li>
|
||
<li>Both protocols can be configured independently with different gateways and DNS servers</li>
|
||
</ul>
|
||
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Example dual-stack configuration (Linux)
|
||
# IPv4 configuration
|
||
ifconfig eth0 203.0.113.10 netmask 255.255.255.0
|
||
route add default gw 203.0.113.1
|
||
|
||
# IPv6 configuration (SLAAC or static)
|
||
ip -6 addr add 2001:db8::100/64 dev eth0
|
||
ip -6 route add default via 2001:db8::1
|
||
|
||
# Both protocols operate independently on the same interface</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h4 class="text-lg font-semibold mb-3">NAT64 and DNS64: Bridging IPv4 and IPv6</h4>
|
||
<div class="bg-background border border-neutral rounded-md p-4 mb-4">
|
||
<p class="text-sm text-base/70 mb-3">
|
||
<strong>NAT64</strong> (Network Address Translation 64) and <strong>DNS64</strong> (DNS 64) are transition technologies defined in <strong>RFC 6146</strong> and <strong>RFC 6147</strong> that enable IPv6-only clients to communicate with IPv4-only servers. Together, they bridge the protocol gap during the IPv6 transition period.
|
||
</p>
|
||
|
||
<div class="space-y-4">
|
||
<div>
|
||
<h5 class="font-semibold mb-2 text-base/90">How NAT64 and DNS64 Work Together</h5>
|
||
<div class="bg-background-secondary border border-neutral rounded-md p-3 mb-3">
|
||
<p class="text-xs text-base/70 mb-2">
|
||
<strong>Step-by-step process:</strong>
|
||
</p>
|
||
<ol class="list-decimal list-inside text-xs text-base/70 space-y-1 ml-2">
|
||
<li><strong>IPv6-only client</strong> requests a domain name (e.g., <code>example.com</code>)</li>
|
||
<li><strong>DNS64 server</strong> queries for AAAA (IPv6) record first</li>
|
||
<li>If no AAAA record exists, DNS64 queries for A (IPv4) record</li>
|
||
<li>DNS64 <strong>synthesizes</strong> an IPv6 address by embedding the IPv4 address into a special IPv6 prefix (typically <code>64:ff9b::/96</code> or a NAT64 prefix)</li>
|
||
<li>Client receives the synthesized IPv6 address and connects to it</li>
|
||
<li><strong>NAT64 gateway</strong> intercepts the IPv6 packet, extracts the embedded IPv4 address, and translates it to IPv4</li>
|
||
<li>NAT64 forwards the packet to the IPv4-only server</li>
|
||
<li>Response follows the reverse path back to the IPv6 client</li>
|
||
</ol>
|
||
</div>
|
||
<pre class="bg-background-secondary p-3 rounded text-xs overflow-x-auto"><code># Example: DNS64 address synthesis
|
||
# IPv4 address: 203.0.113.10
|
||
# NAT64 prefix: 64:ff9b::/96
|
||
#
|
||
# DNS64 synthesizes: 64:ff9b::203.0.113.10
|
||
# (Embedded IPv4: 203.0.113.10 = 0xCB00710A in hex)
|
||
# Result: 64:ff9b::CB00:710A
|
||
|
||
# Client connects to: 64:ff9b::CB00:710A
|
||
# NAT64 extracts: 203.0.113.10
|
||
# NAT64 forwards to IPv4 server: 203.0.113.10</code></pre>
|
||
</div>
|
||
|
||
<div>
|
||
<h5 class="font-semibold mb-2 text-base/90">Why NAT64/DNS64 Are Needed</h5>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li><strong>IPv6-only networks:</strong> Allows IPv6-only clients to access IPv4-only internet resources</li>
|
||
<li><strong>Gradual transition:</strong> Enables organizations to deploy IPv6 without breaking IPv4 connectivity</li>
|
||
<li><strong>Address exhaustion:</strong> Helps conserve IPv4 addresses by allowing IPv6-only deployments</li>
|
||
<li><strong>Mobile networks:</strong> Commonly used in cellular networks where IPv6 is preferred</li>
|
||
<li><strong>Cost reduction:</strong> Reduces need for dual-stack infrastructure in some scenarios</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div>
|
||
<h5 class="font-semibold mb-2 text-base/90">Limitations and Considerations</h5>
|
||
<div class="bg-warning/10 border border-warning/30 rounded-lg p-3 mb-3">
|
||
<p class="text-sm font-semibold mb-2 text-warning">Important Limitations:</p>
|
||
<ul class="list-disc list-inside text-sm text-base/70 space-y-1 ml-2">
|
||
<li><strong>No IPv4-to-IPv6 translation:</strong> NAT64 only works one-way (IPv6→IPv4), not IPv4→IPv6</li>
|
||
<li><strong>Embedded IP addresses:</strong> Applications that embed IPv4 addresses in payloads may fail (e.g., FTP, SIP)</li>
|
||
<li><strong>Protocol limitations:</strong> Some protocols like ICMP may not translate correctly</li>
|
||
<li><strong>Performance overhead:</strong> Translation adds latency and processing overhead</li>
|
||
<li><strong>Stateful translation:</strong> NAT64 maintains connection state, which can be a bottleneck</li>
|
||
<li><strong>DNS dependency:</strong> Requires DNS64-capable DNS servers; won't work with hardcoded IPv4 addresses</li>
|
||
<li><strong>Port restrictions:</strong> Some NAT64 implementations have port range limitations</li>
|
||
<li><strong>Application compatibility:</strong> Applications using IPv4 literals or low-level socket APIs may not work</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div>
|
||
<h5 class="font-semibold mb-2 text-base/90">NAT64 Prefix Formats</h5>
|
||
<table class="w-full border border-neutral rounded-md mb-3 text-sm">
|
||
<thead class="bg-background">
|
||
<tr>
|
||
<th class="text-left py-2 px-3 font-semibold border-b border-neutral">Prefix</th>
|
||
<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>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="text-xs text-base/70">
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-3 font-mono"><code>64:ff9b::/96</code></td>
|
||
<td class="py-2 px-3">Well-Known</td>
|
||
<td class="py-2 px-3">RFC 6052 well-known prefix for NAT64 (most common)</td>
|
||
</tr>
|
||
<tr class="border-b border-neutral/20">
|
||
<td class="py-2 px-3 font-mono"><code>2001:db8::/96</code></td>
|
||
<td class="py-2 px-3">Documentation</td>
|
||
<td class="py-2 px-3">Example/documentation prefix (RFC 3849)</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="py-2 px-3 font-mono"><code>Custom /96</code></td>
|
||
<td class="py-2 px-3">Provider</td>
|
||
<td class="py-2 px-3">ISP or organization-specific prefix</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div>
|
||
<h5 class="font-semibold mb-2 text-base/90">When to Use NAT64/DNS64</h5>
|
||
<div class="grid md:grid-cols-2 gap-3">
|
||
<div class="bg-background border border-neutral rounded-md p-3">
|
||
<p class="text-xs font-semibold mb-2 text-base/90">✅ Good Use Cases:</p>
|
||
<ul class="list-disc list-inside text-xs text-base/70 space-y-1">
|
||
<li>IPv6-only mobile networks</li>
|
||
<li>Internal networks transitioning to IPv6</li>
|
||
<li>IoT deployments with IPv6 preference</li>
|
||
<li>Cloud environments with IPv6-first policies</li>
|
||
</ul>
|
||
</div>
|
||
<div class="bg-background border border-neutral rounded-md p-3">
|
||
<p class="text-xs font-semibold mb-2 text-base/90">❌ Not Recommended For:</p>
|
||
<ul class="list-disc list-inside text-xs text-base/70 space-y-1">
|
||
<li>High-performance applications</li>
|
||
<li>Protocols with embedded IPs (FTP, SIP)</li>
|
||
<li>Applications using IPv4 literals</li>
|
||
<li>When dual-stack is feasible</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="bg-info/10 border border-info/30 rounded-lg p-3">
|
||
<p class="text-sm font-semibold mb-2 text-info flex items-center gap-2">
|
||
<x-ri-information-line class="size-4" />
|
||
Best Practice
|
||
</p>
|
||
<p class="text-sm text-base/70">
|
||
<strong>Dual-stack is preferred</strong> over NAT64/DNS64 when possible, as it provides native connectivity without translation overhead. Use NAT64/DNS64 primarily for IPv6-only networks that need occasional IPv4 access, or as a transition mechanism during IPv6 deployment phases.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</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 < EGP < 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>
|
||
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', () => {
|
||
const copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>`;
|
||
const checkIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>`;
|
||
|
||
document.querySelectorAll('pre').forEach(pre => {
|
||
const btn = document.createElement('button');
|
||
btn.className = 'code-copy-btn';
|
||
btn.innerHTML = copyIcon;
|
||
btn.title = 'Copy to clipboard';
|
||
btn.addEventListener('click', (e) => {
|
||
e.preventDefault();
|
||
const code = pre.querySelector('code');
|
||
const text = (code || pre).textContent;
|
||
navigator.clipboard.writeText(text).then(() => {
|
||
btn.innerHTML = checkIcon;
|
||
btn.classList.add('copied');
|
||
setTimeout(() => {
|
||
btn.innerHTML = copyIcon;
|
||
btn.classList.remove('copied');
|
||
}, 2000);
|
||
});
|
||
});
|
||
pre.appendChild(btn);
|
||
});
|
||
});
|
||
</script>
|
||
</x-proxmox::layout>
|