Home lab desk with Proxmox server rack showing VM layers, management dashboard, and network router
← Back
[ proxmox ]

How to Build a Home Lab with Proxmox VE

enim · Apr 27, 2026 · 11 min read · Updated: May 9, 2026

A VPS is great for running production services, but for learning, testing, and breaking things on purpose, nothing beats a home lab. I run my production blog on a Hetzner VPS, but my Proxmox home lab is where I test Docker configs, spin up vulnerable machines for CTF practice, and experiment with networking — all without risking anything that matters.

Proxmox VE (Virtual Environment) is a free, open-source hypervisor built on Debian that supports both full virtual machines (KVM) and lightweight containers (LXC). It has a web-based management interface, built-in backup tools, and clustering support. If you want a proxmox home lab setup that grows with your skills, this guide gets you from bare hardware to running VMs and containers.

Prerequisites

  • Hardware: A dedicated machine with at least 8GB RAM, a 64-bit CPU with virtualization support (Intel VT-x or AMD-V), and 120GB+ storage. An old desktop, a mini PC (like an Intel NUC or Beelink), or a used Dell Optiplex all work well.
  • A USB drive (2GB+) for the Proxmox installer
  • Network access (Ethernet recommended — WiFi is possible but painful)
  • A separate computer to access the Proxmox web interface
  • Basic Linux familiarity — if you need a refresher, my VPS hardening guide covers core Linux admin concepts
Note: Proxmox is a bare-metal hypervisor. It replaces whatever OS is currently on the machine. Don't install it on your daily-use computer. Dedicate hardware to it.

What Is Proxmox VE and Why Use It

Proxmox VE is a Type 1 hypervisor — it runs directly on hardware, not inside another operating system. This gives it better performance than Type 2 hypervisors like VirtualBox or VMware Workstation that run on top of Windows or Linux.

Here's what makes Proxmox the best choice for a home lab:

  • Free and open source. The enterprise subscription is optional — it unlocks the stable update repository and support, but the free "no-subscription" repository works fine for home use.
  • Full VMs (KVM) and containers (LXC) on the same platform. Use VMs when you need full OS isolation, containers when you want lightweight services.
  • Web-based management. Everything is done through a browser. No GUI installed on the host.
  • Snapshots and backups built in. Break something? Roll back in seconds.
  • Clustering. Start with one node, add more later. Proxmox scales from a single NUC to a rack of servers.

The trade-off: Proxmox's learning curve is steeper than spinning up a VM in VirtualBox. You're managing a real hypervisor with networking, storage pools, and resource allocation. That's also exactly why it's worth learning — these are production skills.

Hardware Recommendations for a Proxmox Home Lab

You don't need expensive hardware. Here's what I recommend at three budget levels:

Budget ($50-100 — used hardware): - Dell Optiplex 7050 or HP EliteDesk 800 G3 (used on eBay) - 16GB DDR4 RAM (upgrade from stock) - 256GB SSD - Runs 3-5 lightweight VMs or 10+ containers comfortably

Mid-range ($200-400 — mini PC): - Beelink SER5 or Intel NUC 12/13 - 32GB DDR4/DDR5 RAM - 500GB NVMe SSD - Runs 8-10 VMs or 20+ containers, enough for a serious lab

Performance ($500+ — enterprise surplus): - Dell PowerEdge T340/R640 or HP DL360 - 64GB+ ECC RAM - Multiple SSDs in ZFS mirror - Enterprise networking (IPMI/iDRAC for remote management)

My advice: Start cheap. A $75 used Optiplex with a RAM upgrade teaches you everything. Upgrade when you hit limits, not before.

Installing Proxmox VE

Step 1: Download the ISO

Grab the latest Proxmox VE ISO from the official site:

https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso

Download the .iso file (about 1.2GB).

Step 2: Create a Bootable USB

On Linux:

# Find your USB drive (be CAREFUL — wrong device = data loss)
lsblk

# Write the ISO (replace sdX with your USB device)
sudo dd bs=4M if=proxmox-ve_8.x-x.iso of=/dev/sdX conv=fsync status=progress

On Windows, use Rufus or Etcher. Select "DD mode" if Rufus asks — ISO mode won't boot correctly for Proxmox.

Warning: The dd command will destroy all data on the target device. Triple-check the device name with lsblk before running it. If your main drive is /dev/sda, your USB is probably /dev/sdb — but verify.

Step 3: Boot and Install

  1. Plug the USB into your Proxmox machine and boot from it (F2/F12/Del for BIOS/boot menu, varies by manufacturer).
  2. Select Install Proxmox VE (Graphical).
  3. Accept the EULA.
  4. Select the target disk. Proxmox will format this entire disk. If you have multiple drives, pick the one you want as the boot/system drive. For the filesystem, choose ext4 for simplicity or ZFS if you have multiple drives and want redundancy.
  5. Set your country, timezone, and keyboard layout.
  6. Set a strong root password and enter an email address (used for alerts).
  7. Configure networking: - Management Interface: Select your Ethernet adapter - Hostname: Something like pve.homelab.local - IP Address: Assign a static IP on your LAN (e.g., 192.168.1.50/24) - Gateway: Your router's IP (usually 192.168.1.1) - DNS Server: Your router or 1.1.1.1
  8. Review the summary and click Install.

Installation takes 3-5 minutes. When done, remove the USB and reboot.

Step 4: Access the Web Interface

From another computer on the same network, open a browser and go to:

https://192.168.1.50:8006

Replace with the IP you set during installation. You'll get a certificate warning — that's expected (Proxmox uses a self-signed cert). Accept it and log in with:

  • Username: root
  • Realm: Linux PAM standard authentication
  • Password: The password you set during install

You're in. The Proxmox dashboard shows your node's CPU, RAM, storage, and network usage.

Post-Install Configuration

Disable the Enterprise Repository (Free Users)

By default, Proxmox is configured to use the enterprise repository, which requires a paid subscription. Without it, you'll get errors on apt update. Fix this:

# SSH into your Proxmox host
ssh [email protected]

# Disable the enterprise repo
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list

# Add the free no-subscription repo
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

# Update and upgrade
apt update && apt full-upgrade -y

Remove the Subscription Nag (Optional)

Every time you log into the web UI, a popup reminds you that you don't have a subscription. It's harmless but annoying. To remove it:

sed -Ezi.bak "s/(Ext\.Msg\.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.service
Note: This change gets overwritten on Proxmox updates. You'll need to reapply it after upgrades. If you use Proxmox professionally, consider buying a subscription — it supports the project.

Enable IOMMU (For GPU/PCI Passthrough)

If you plan to pass physical hardware (like a GPU) into a VM, enable IOMMU now:

# For Intel CPUs, edit GRUB
nano_is_not_allowed  # edit with vim instead
vim /etc/default/grub

Change the GRUB_CMDLINE_LINUX_DEFAULT line:

For Intel CPUs:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

For AMD CPUs:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

Then update GRUB and reboot:

update-grub
reboot

Creating Your First Virtual Machine

Let's create an Ubuntu Server VM — the most common starting point.

Step 1: Upload an ISO

  1. In the Proxmox web UI, click your node in the left sidebar.
  2. Click local (pve) storage → ISO ImagesUpload.
  3. Upload the Ubuntu Server 24.04 LTS ISO (download from ubuntu.com if you don't have it).

Alternatively, download directly on the Proxmox host:

cd /var/lib/vz/template/iso/
wget https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso

Step 2: Create the VM

  1. Click Create VM (top right of the web UI).
  2. General: Give it a name (e.g., ubuntu-server) and a VM ID.
  3. OS: Select the ISO you uploaded. Guest OS type: Linux, version: 6.x - 2.6 Kernel.
  4. System: Leave defaults. Check Qemu Agent if you plan to install it (recommended).
  5. Disks: Set disk size (32GB minimum for Ubuntu, I usually do 50GB). Use VirtIO Block for best performance. Enable Discard if using SSD storage.
  6. CPU: Allocate cores (2 is fine for testing, 4 for heavier workloads). Set type to host for best performance.
  7. Memory: Allocate RAM in MiB (2048 = 2GB minimum, 4096 = 4GB recommended).
  8. Network: Leave default bridge (vmbr0), model VirtIO (paravirtualized).
  9. Confirm and check Start after created.

Step 3: Install the OS

Click on your new VM → Console. You'll see the Ubuntu installer. Go through the standard installation — select language, configure networking (DHCP is fine for now), create a user, install OpenSSH server when prompted.

Once installed, you can SSH into the VM from your main computer:

ssh your-user@<VM_IP_ADDRESS>
Tip: Install the QEMU guest agent inside the VM for better integration (graceful shutdown, IP reporting, etc.):

bash sudo apt install qemu-guest-agent -y sudo systemctl enable qemu-guest-agent --now

Creating LXC Containers — Lightweight Alternative to VMs

LXC containers share the host kernel, which makes them use far less RAM and CPU than full VMs. They start in seconds instead of minutes. For services like web servers, databases, DNS, or monitoring tools, containers are the better choice.

Download a Container Template

  1. Click local (pve) storage → CT TemplatesTemplates.
  2. Search for "ubuntu" or "debian" and download the template you want.

Or via CLI:

pveam update
pveam available --section system | grep ubuntu
pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.zst

Create the Container

  1. Click Create CT (top right).
  2. General: Set hostname (e.g., docker-host), set a root password.
  3. Template: Select the template you downloaded.
  4. Disks: 8-20GB depending on use case.
  5. CPU: 1-2 cores.
  6. Memory: 512MB-2048MB depending on what you're running.
  7. Network: Bridge vmbr0, DHCP or static IP.
  8. DNS: Use host settings or set custom.
  9. Confirm and start.

The container boots in under 5 seconds. Access it via the console or SSH.

Running Docker Inside LXC

This is a common home lab pattern — run Docker inside an LXC container to keep things isolated without the overhead of a full VM. I use this setup for many of my services.

You need to enable nesting and a few features on the container. In the Proxmox web UI: select the container → OptionsFeatures → enable Nesting and keyctl.

Or edit the container config directly:

# On the Proxmox host
vim /etc/pve/lxc/<CT_ID>.conf

Add or modify:

features: nesting=1,keyctl=1

Then inside the container, install Docker:

apt update && apt install -y curl
curl -fsSL https://get.docker.com | sh

Docker inside LXC works well for most use cases. For more on securing your Docker setup, see my Docker security best practices.

Networking in Proxmox

Default Bridge (vmbr0)

Out of the box, Proxmox creates a Linux bridge called vmbr0 that connects to your physical NIC. All VMs and containers attached to this bridge get IPs on your LAN — they're visible to other devices on your network.

This is the simplest setup and works for most home labs.

Creating an Internal Network

For isolated lab environments (like a pentesting lab), create a bridge without a physical interface:

  1. Go to your NodeNetworkCreateLinux Bridge.
  2. Name it vmbr1.
  3. Leave Bridge ports empty (no physical NIC).
  4. Assign a subnet: 10.10.10.1/24 as the bridge IP.

VMs connected to vmbr1 can talk to each other but not to your LAN or the internet — perfect for vulnerable machine labs.

To give them internet access through the Proxmox host (NAT), run on the host:

# Enable IP forwarding
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

# Add NAT rule
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o vmbr0 -j MASQUERADE

To make the iptables rule persistent:

apt install iptables-persistent -y
netfilter-persistent save

If you've set up WireGuard before (I covered it in my WireGuard VPN guide), the networking concepts here — bridges, NAT, forwarding — are the same principles.

Storage Configuration

Understanding Proxmox Storage Types

Proxmox supports multiple storage backends:

Storage Type Best For Supports Snapshots Notes
Local (dir) ISOs, backups, container templates No Default, always available
LVM VM disks No (use LVM-Thin instead) Created during install
LVM-Thin VM disks, efficient snapshots Yes Recommended for VM storage
ZFS Everything, data integrity Yes Needs more RAM (1GB per TB of storage)
NFS/CIFS Shared storage, backups Depends on backend For NAS integration

For a single-disk home lab, the default LVM-Thin partition created during installation is fine. If you add a second drive later, I recommend ZFS mirror for redundancy:

# Create a ZFS mirror from two drives
zpool create tank mirror /dev/sdb /dev/sdc

# Add it to Proxmox
pvesm add zfspool tank-pool --pool tank --content images,rootdir

Backups — Don't Skip This

The number one advantage of running a home lab on Proxmox is the ability to snapshot and back up everything. Use it.

Manual Backup

In the web UI: select a VM or container → BackupBackup now. Choose: - Storage: Where to store the backup (local or NFS) - Mode: Snapshot (no downtime), Suspend, or Stop - Compression: ZSTD (best ratio/speed balance)

Scheduled Backups

  1. Go to DatacenterBackupAdd.
  2. Set the schedule (e.g., daily at 2:00 AM).
  3. Select which VMs/containers to include.
  4. Set retention (e.g., keep last 3 backups).
# Check existing backup jobs via CLI
cat /etc/pve/jobs.cfg

Snapshots

Snapshots capture the current state of a VM or container. They're instant and stored on the same disk.

# Create a snapshot
qm snapshot <VMID> pre-update --description "Before apt upgrade"

# Roll back to a snapshot
qm rollback <VMID> pre-update

Use snapshots before risky changes — kernel upgrades, config rewrites, experimental software installs. If something breaks, roll back in seconds.

Warning: Snapshots are not backups. They live on the same disk as the VM. If the disk fails, snapshots are gone too. Use both: snapshots for quick rollback, backups for disaster recovery.

Security Considerations

Your Proxmox host is the single most important machine in your home lab. If it's compromised, every VM and container on it is compromised. Treat it accordingly:

  • Change the default web UI port from 8006 if exposing to the internet (though you shouldn't expose it).
  • Create a non-root user for daily management. Go to DatacenterPermissionsUsersAdd.
  • Enable the firewall. Proxmox has a built-in firewall configurable from the web UI. At minimum, restrict management access to your LAN.
  • Keep Proxmox updated. Run apt update && apt full-upgrade regularly.
  • Don't expose the web interface to the internet. If you need remote access, use a VPN (like WireGuard) to connect to your home network first.
  • Use strong passwords and consider two-factor authentication. Proxmox supports TOTP 2FA out of the box. Enable it under DatacenterPermissionsTwo Factor.

Troubleshooting

Problem: Web interface unreachable after installation. Cause: Incorrect IP configuration during install, or the machine is on a different subnet than your computer. Fix: Connect a monitor and keyboard directly. Check the IP with ip addr show vmbr0. Verify your computer is on the same subnet. Test with ping 192.168.1.50.

Problem: VM boots but gets no network connectivity. Cause: The VM's network interface isn't connected to the bridge, or DHCP isn't available on the bridged network. Fix: Check that the VM's network device is set to bridge vmbr0. Inside the VM, verify the interface is up with ip link. Try a static IP configuration if DHCP isn't working.

Problem: "No valid subscription" error on apt update. Cause: The enterprise repository is enabled but you don't have a subscription key. Fix: Disable the enterprise repo and enable the no-subscription repo as shown in the post-install section above.

Problem: LXC container can't run Docker. Cause: Nesting and keyctl features aren't enabled on the container. Fix: Enable nesting in the container options: OptionsFeatures → check Nesting and keyctl. Restart the container.

Problem: ZFS is using too much RAM. Cause: ZFS uses RAM for its ARC (Adaptive Replacement Cache) and defaults to claiming up to 50% of system RAM. Fix: Limit the ARC size. Add to /etc/modprobe.d/zfs.conf: options zfs zfs_arc_max=2147483648 (2GB limit). Run update-initramfs -u and reboot.

Conclusion

A Proxmox home lab is the best investment you can make in your technical skills. It costs less than a month of cloud hosting, runs on hardware you probably already have, and gives you a safe environment to learn virtualization, networking, containers, and security — all on real infrastructure, not simulators.

Start with a single machine, create a few VMs and containers, and experiment. Break things on purpose. That's what a lab is for. When you're ready to run production services, the skills transfer directly to cloud VPS management.

For next steps, harden your Proxmox host using my Linux hardening guide, run Docker inside an LXC container following my Docker security guide, and set up WireGuard for remote access using my VPN setup tutorial.

Your lab. Your rules. No monthly bill.

enim

Security researcher, CTF player, and compulsive self-hoster. Building byte-guard.net from a $10/mo Hetzner VPS. Everything I publish I have actually run in production.

Comments

Sign in with GitHub to comment. Threads live in the byteguard-comments repo.