Skip to content

Proxmox VE: a datacentre in a VM

Exercise Practical 2.8 PDF

You have three VMs on the class server, and so does everyone in your class. Netflix, your school's Moodle and your bank run thousands. So where is the person with the mouse, clicking New VM all day?

There is none. There is a room full of computers with no screen and no keyboard — and a web page. This page shows you that web page, Proxmox VE, first on a real server and then installed by you, inside a VM on the class server. A whole server room inside one file, with a snapshot in case you break it.

What you will learn

  • What a type 1 (bare-metal) hypervisor looks like in real use: no desktop, managed from a browser
  • Find your way in the Proxmox VE web interface: datacentre, node, VMs, containers, storage
  • What a datacentre does with many nodes: cluster, live migration, high availability
  • Check that the class server allows nested virtualisation, and install Proxmox VE in the VM pve
  • Reach a web page hidden behind NAT with an ssh tunnel
  • Prove with one command the difference between a container and a VM: who brings the kernel
  • Why a type 1 hypervisor does not use a "more powerful" engine than the one behind your virt-manager

A hypervisor with no screen

You met the two types of hypervisor in Virtualisation. Picture them side by side:

A desktop PC with virt-manager A server with Proxmox VE
What is installed on the metal Ubuntu, a desktop system The hypervisor itself
How VMs are managed virt-manager, one program among many A web page, from another computer
What else the machine does Everything: browser, editor, games Nothing: only runs guests

On the server, the hypervisor is what was installed on the metal, and the machine does nothing else. That is the classic picture of a type 1, or bare-metal, hypervisor. The class server you use is already closer to the right-hand column: nobody sits in front of it, and you manage it from another computer.

Proxmox VE (Virtual Environment) is a type 1 hypervisor: a Debian system prepared to do only one job — run virtual machines and containers — managed from a web browser.

Careful: type 1 is not a different, more powerful engine

Proxmox uses the same engine as the class server behind your virt-manager: KVM and QEMU. What changes is the job of the machine, the way you manage it — and that many servers can work as one.

A little history

Proxmox Server Solutions was founded in Vienna in 2005 by Martin and Dietmar Maurer. The first public version of Proxmox VE came out on 15 April 2008. It is free software.

For years the best-known name in this field was VMware. On 22 November 2023 the company Broadcom finished buying VMware and changed its licences and prices. Since then many companies and schools have been moving to Proxmox. The current version is 9.2 (21 May 2026), built on Debian 13 — the same Debian as deb-lab.

A tour of the web interface

The address of a Proxmox server always ends in port 8006: https://ADDRESS:8006.

Part What it is
Datacenter The top of the left tree: everything you manage
Node One physical server, under Datacenter
Screen icon A VM, with its number, the VMID
Box icon A container, a lighter kind of guest (more below)
Node → Summary CPU, memory, uptime, kernel version
A VM → Hardware, Console, Snapshots The same three things you know from virt-manager
Storage local ISO images and templates
Storage local-lvm The guests' disks

What a datacentre adds when it has many nodes, in one sentence each:

  • A cluster is several nodes managed from one page.
  • Live migration moves a running VM to another node without switching it off.
  • High availability restarts a VM on another node when its node dies.

The hunt

The Exercise sheet sends you into a real Proxmox server with a read-only account: you can look at everything and touch nothing. Three things will surprise you on the way in:

  • The browser warns you. The server signs its own certificate, so nobody outside vouches for it. On your own lab server that is expected; on your bank's website it would be an alarm. Choose Advanced → continue.
  • The Realm field. The login box asks for a realm, the place where your user is defined. For the read-only account choose Proxmox VE authentication server.
  • No valid subscription. Press OK. The software is complete; the company sells support subscriptions.

Try to press Start on a stopped VM. The button is grey, or the action is refused. That is least privilege: an intern, an auditor or a monitoring screen on the wall gets an account that can only look.

Russian dolls: nested virtualisation

Your turn to install one. Proxmox will run inside a VM on the class server, and then create guests inside itself:

flowchart TB
    PC["<b>Your PC</b><br>only shows the screens"]
    subgraph SRV["<b>Class server</b> · real hardware, KVM"]
        subgraph PVE["<b>VM pve</b> · Proxmox VE, also a hypervisor"]
            CT["<b>Container box1</b><br>Debian 13<br>borrows pve's kernel"]
            VM1["<b>VM vm1</b><br>Alpine Linux<br>brings its own kernel"]
        end
    end
    PC -->|"virt-manager and ssh,<br>over the internet"| SRV

Nested virtualisation is running a hypervisor inside a virtual machine: a VM in a VM.

To run the smallest doll, the middle doll must see the CPU's virtualisation instructions (VT-x on Intel, AMD-V on AMD). A normal VM gets a simplified, pretend CPU without them. So you tell virt-manager to hand over the real model: Copy host CPU configuration.

Nobody runs a production datacentre like this — there Proxmox is installed on the metal. But everybody learns like this.

Get ready

The host is the class server, so the checks run there. Open a terminal on your PC and log in with the user and password from your slip:

ssh <user>@<server>

The prompt changes to <user>@si: you are typing on the server. First, check that it allows nested virtualisation. One of these lines will say No such file or directory: that is normal.

cat /sys/module/kvm_intel/parameters/nested
cat /sys/module/kvm_amd/parameters/nested

The line that works must answer Y (Intel) or 1 (AMD). N or 0 means nested virtualisation is off: tell your teacher. It is one server, so the whole class gets the same answer.

Then verify the ISO, as you learned in Verify an ISO. It is already on the server, in /srv/isos:

cd /srv/isos
sha256sum proxmox-ve_9.2-1.iso

The 64 characters must match the value published on the Proxmox download page for proxmox-ve_9.2-1.iso:

4e88fe416df9b527624a175f24c9aa07c714d3332afb1ee3dbf3879573ef2c6c

Finally, check there is room:

free -h
df -h ~/.local/share/libvirt/images
exit

free -h shows the server's RAM: tens of GiB, but shared by the whole class. Your pve needs 4 GB of it, and so does every classmate's: shut down your other VMs before you start it. df -h should show at least 35 GB free where your VM disks live.

The plan Value
VM name pve
vCPU / RAM / disk 2 / 4096 MB / 32 GB
Network Bridge device virbr0 (NAT)
CPU model Copied from the host
Hostname pve.lab.internal

Install Proxmox VE

Shut down every other VM of yours first — the server is shared. In virt-manager, on your connection to the class server: New VM → Local install media → type /srv/isos/proxmox-ve_9.2-1.iso (not Browse Local: that browses your PC). If it cannot detect the system, untick the detection and type Debian 13. Memory 4096, CPUs 2, disk 32 GB, name pve, network Bridge device virbr0. Tick Customize configuration before install → Finish. Then CPUs → tick Copy host CPU configuration (host-passthrough) → Apply → Begin Installation.

Choose Install Proxmox VE (Graphical) and go screen by screen: licence → target disk (the 32 GB one) → country Spain, time zone Europe/Madrid, keyboard Spanish → a password of your own and an e-mail → network (hostname pve.lab.internal, address as proposed) → summary → Install. The copy takes five to ten minutes: start your report.

After the restart, the black console shows the address of the web interface, like https://192.168.122.x:8006/.

Where it usually goes wrong

  • The installer warns that it finds no support for KVM virtualisation: the CPU box was never ticked. Shut down, open the VM's details → CPUs, tick it, start again.
  • The hostname is refused: it must be a full name with dots (pve.lab.internal), not a single word.
  • The e-mail field refuses the example address: type any address of your own. Nothing is sent.
  • After the install it starts the installer again: the ISO is still first in the boot order. In Boot Options, put the disk first.

That address 192.168.122.x lives in the private NAT network behind virbr0, on the class server. The server can reach it. Your PC cannot: NAT lets guests go out, but nobody outside can come in.

First login: through a tunnel

So you dig a tunnel. You already have a door into the server: your ssh login. ssh can carry a web page through that same door.

An ssh tunnel carries traffic from a port on your own PC, through your ssh login, to an address that only the server can reach.

Open a terminal on your PC and type, with your pve address from the black console:

ssh -L 8006:192.168.122.x:8006 <user>@<server>

Read it as: "whatever reaches port 8006 of my PC, carry it to the server, and from there to 192.168.122.x, port 8006". Type your password. The prompt changes to <user>@si. Leave that terminal open: closing it closes the tunnel.

flowchart LR
    FF["<b>Firefox on your PC</b><br>https://localhost:8006"] -->|"enters the tunnel"| SSH["<b>ssh</b><br>through the internet"]
    SSH -->|"comes out on"| SRV["<b>Class server</b>"]
    SRV -->|"NAT network virbr0"| PVE["<b>pve</b><br>192.168.122.x:8006"]

Now, in Firefox on your PC, open https://localhost:8006. localhost means "this same computer": the entrance of the tunnel. Accept the warning. User root, your own password, realm Linux PAM standard authentication this time — root is a user of the Linux system itself. Press OK on the subscription box.

Careful: why a password of your own?

Every classmate's pve hangs from the same virtual router, virbr0. With a tunnel, a classmate could reach your login page too. The root password is the only lock on it — that is why it is yours, not a class one.

Open the node pve → Shell:

cat /etc/os-release
uname -r

cat /etc/os-release says Debian GNU/Linux 13 (trixie): Proxmox VE is Debian underneath. uname -r prints the version of the running kernel — the core of the operating system. On the node it ends in -pve. Write it down; it is the key to the rest of the page.

Containers and VMs: who brings the kernel?

Back to the dolls. A VM is a complete doll: pretend hardware, and inside it a whole operating system with its own kernel.

A container is a closed room inside the node's own system: it has its own files, programs and users, but no kernel of its own — it uses the node's.

Virtual machine Container
Brings its own kernel Yes No: it uses the node's kernel
Can run Any system: Linux, Windows… Only Linux
Starts in The time of a full boot About a second
Uses The RAM you give it, all the time Only what its programs need
Isolation Strong: pretend hardware Lighter: one shared kernel
In Proxmox KVM / QEMU, made from an ISO LXC, made from a template

A template is a ready-made small system in one compressed file: no installer, no questions.

Careful: a container is not a small VM

A VM brings its own kernel; a container borrows the node's. You are about to prove it with uname -r. Containers come back in Unit 6 with Docker.

A container: box1

Left tree: local (pve) → CT Templates → Templates → the one that starts with debian-13-standard → Download. Then Create CT: hostname box1, a password, that template, disk 4 GB, 1 core, 512 MB, network IPv4: DHCP. Finish → select box1 → Start. Count the seconds: one or two.

box1 → Console → press Enter → log in as root:

cat /etc/os-release
uname -r

Debian 13 — and exactly the same kernel as the node, ending in -pve.

A VM inside the VM: vm1

local (pve) → ISO Images → Download from URL → the address of a very small Linux ISO given in class (Alpine Linux, virtual edition) → Query URL (it must show the file's size) → Download. Then Create VM: name vm1, that ISO, disk 1 GB, 1 core, 512 MB. Start it, open its console, type root at login: and run:

uname -r

This time the kernel ends in -virt: not the node's kernel. vm1 brought its own.

Node pve Container box1 VM vm1
uname -r ends in -pve -pve (the same) -virt (its own)
System Debian 13 + Proxmox Debian 13 Alpine Linux
Start time — 1–2 seconds Slow: a VM inside a VM
Made from The Proxmox ISO A template An ISO

Count the kernels in your stack of dolls right now: the server's, pve's and vm1's — three. And one container riding on the second.

Shut down from the inside out

  1. vm1 → Stop (a live system: nothing to save). box1 → Shutdown.
  2. Node pve → Shutdown (top right).
  3. Wait until virt-manager shows pve as Shutoff.
  4. In virt-manager: pve → View → Snapshots → + → clean.

Never just close the virt-manager window

The window is only a screen; the VM keeps running on the server. Forcing a hypervisor off is pulling the plug on every guest inside it. Always from the inside out: guests, then the node.

Key takeaways

  • Proxmox VE is a type 1 hypervisor built on Debian, managed from a browser on port 8006; it runs the same KVM/QEMU engine as the class server.
  • Its tree goes Datacenter → node → guests; a cluster joins nodes, live migration moves running VMs, high availability restarts them elsewhere.
  • Nested virtualisation needs the host's real CPU model passed to the VM (host-passthrough).
  • pve lives behind NAT on the server; an ssh tunnel brings its page to https://localhost:8006 on your PC.
  • A VM brings its own kernel; a container (LXC, from a template) uses the node's — uname -r proves it.
  • A read-only account is least privilege: look, never touch.
  • Shut down from the inside out, then take the snapshot clean.

Quick check

1. How do you normally manage a Proxmox VE server?
  • From a web browser on another computer
  • With a screen and mouse plugged into it
  • With virt-manager on the server's own desktop
  • By reinstalling it for each change

A type 1 hypervisor has no desktop. You open https://ADDRESS:8006 in a browser on any computer that can reach it.

2. Which engine does Proxmox VE use to run virtual machines?
  • KVM and QEMU
  • VirtualBox
  • The Windows Recovery Environment
  • GRUB

Proxmox runs the same KVM/QEMU engine as the class server behind your virt-manager. Type 1 describes the machine's job, not a different engine.

3. What does live migration mean?
  • Moving a running VM to another node without stopping it
  • Copying a VM's ISO image to another server
  • Taking a snapshot of every VM each hour
  • Restarting a VM on another node after a crash

Live migration keeps the VM running while it moves. Restarting a VM on another node when its node dies is high availability.

4. Why did you tick Copy host CPU configuration for the VM pve?
  • So that pve can run virtual machines itself
  • To give pve more memory than the host has
  • To make the installer copy files faster
  • To connect pve to the classroom network

A normal VM gets a pretend CPU without VT-x/AMD-V. Passing the host's real model is what makes nested virtualisation possible.

5. uname -r shows the same kernel on the node and inside box1. Why?
  • A container uses the kernel of the node
  • Both were installed from the same ISO
  • It is a coincidence of version numbers
  • The container copied the kernel when it was created

A container has its own files, programs and users, but no kernel. It borrows the node's — which is why vm1, a real VM, showed a different one.

6. Select the two statements about https://192.168.122.x:8006 that are true.
  • The class server can reach it, but your PC cannot directly
  • It lives in the private NAT network behind virbr0
  • Any PC in the classroom can open it directly
  • Any computer on the internet can open it directly

pve sits on the NAT network behind virbr0, on the class server. Guests can go out, but nobody outside can come in — which is why your PC needs an ssh tunnel.

7. Your tunnel is open and Firefox shows the Proxmox login at https://localhost:8006. Where does that page really come from?
  • From pve, carried by ssh through the class server
  • From a copy of Proxmox installed on your PC
  • From the Proxmox company's website
  • From the Firefox cache of last class

localhost is your own PC, the entrance of the tunnel. ssh carries the request to the class server, which hands it to pve on the NAT network. Close the tunnel terminal and the page stops loading.

8. What is the right order to switch everything off?
  • Guests first, then the node
  • The node first, then the guests
  • Close the virt-manager window
  • Force off the VM pve

Always from the inside out: stop vm1 and box1, shut down the node, and only then take the snapshot. Forcing pve off pulls the plug on every guest.

Unit 2 ends here: you can install, update, recover and virtualise systems. Now it is time to really live inside them — the terminal and the directory tree: Terminal survival and the directory tree.