Skip to content

Proxmox VE Setup Guide

Mini PC configuration for running OPNsense router and Docker VM.

Hardware Requirements

Component Spec Notes

| CPU | Intel N150 | VT-x/VT-d enabled | | RAM | 12GB | ~1GB host + 2GB OPNsense + 9GB Docker | | Storage | 512GB SSD | VMs + ISO storage | | NIC | Dual port | nic0/vmbr0 (WAN) + nic1/vmbr1 (LAN) |


Installation

1. Download Proxmox VE

# Download from proxmox.com
# Latest stable: Proxmox VE 8.x
# Create bootable USB with balenaEtcher or Rufus

2. Boot from USB

  • Enable UEFI boot in BIOS
  • Disable Secure Boot
  • Boot from Proxmox installer USB

3. Installation Wizard

Setting Value

| Target Disk | 512GB SSD | | Country | Paraguay | | Timezone | America/Asuncion | | Keyboard | us | | Admin Password | (strong password) | | Email | augusto@cronova.dev | | Hostname | pve.cronova.local | | Management IP | 192.168.0.237/24 | | Gateway | 192.168.0.1 (temporary) | | DNS | 1.1.1.1 |

Note: Initial IP is temporary. After OPNsense setup, DHCP will assign static IPs.


Post-Installation

1. Access Web UI

https://192.168.0.237:8006
Username: root
Password: (set during install)

2. Remove Subscription Notice

# SSH into Proxmox
ssh root@192.168.0.237

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

# Add 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
apt update && apt full-upgrade -y

3. Enable IOMMU (optional, for future PCI passthrough)

# Edit GRUB config
nano /etc/default/grub

# Change line to:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

# Update GRUB
update-grub

# Add VFIO modules
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules

# Reboot
reboot

4. Verify IOMMU

dmesg | grep -e DMAR -e IOMMU
# Should show: DMAR: IOMMU enabled

Network Configuration

Identify NICs

ip link show
# Example:
# enp1s0 - WAN (vmbr0 bridge)
# enp2s0 - LAN (vmbr1 bridge)

Edit Network Config

nano /etc/network/interfaces
auto lo
iface lo inet loopback

# WAN Bridge (OPNsense WAN - public IP via DHCP)
auto vmbr0
iface vmbr0 inet manual
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0

# LAN Bridge (OPNsense LAN + Docker VM + Proxmox mgmt)
auto vmbr1
iface vmbr1 inet static
    address 192.168.0.237/24
    gateway 192.168.0.1
    bridge-ports enp2s0
    bridge-stp off
    bridge-fd 0
# Apply changes
ifreload -a

Storage Configuration

Default Storage

Storage Path Content

| local | /var/lib/vz | ISO images, CT templates | | local-lvm | LVM thin pool | VM disks |

Upload ISOs

  1. Datacenter > Storage > local > ISO Images
  2. Upload:
  3. OPNsense-24.x-amd64.iso
  4. debian-12-amd64.iso (for Docker VM)

Create OPNsense VM

1. Create VM

General

Setting Value

| VM ID | 100 | | Name | opnsense |

OS

Setting Value

| ISO | OPNsense-24.x-amd64.iso | | Type | Other |

System

Setting Value

| Machine | q35 | | BIOS | OVMF (UEFI) | | Add EFI Disk | Yes | | SCSI Controller | VirtIO SCSI |

Disks

Setting Value

| Bus | SCSI | | Size | 20 GB | | Storage | local-lvm | | Discard | Enabled |

CPU

Setting Value

| Cores | 2 | | Type | host |

Memory

Setting Value

| Memory | 2048 MB |

Network:

Setting Value

| Bridge | vmbr0 | | Model | VirtIO |

2. Add Second NIC (WAN)

The OPNsense VM needs two bridged NICs — one for WAN (vmbr0) and one for LAN (vmbr1). The first NIC (vmbr0) was added during VM creation. Now add the second:

VM > Hardware > Add > Network Device

Setting Value

| Bridge | vmbr1 | | Model | VirtIO |

3. VM Options

VM > Options

Setting Value

| Start at boot | Yes | | Start/Shutdown order | 1 | | Startup delay | 0 |

4. Install OPNsense

See docs/guides/opnsense-setup.md for installation steps.


Create Docker VM

1. Create VM

General

Setting Value

| VM ID | 101 | | Name | docker |

OS

Setting Value

| ISO | debian-13-amd64.iso | | Type | Linux | | Version | 6.x - 2.6 Kernel |

System

Setting Value

| Machine | q35 | | BIOS | OVMF (UEFI) | | Add EFI Disk | Yes | | SCSI Controller | VirtIO SCSI |

Disks

Setting Value

| Bus | SCSI | | Size | 100 GB | | Storage | local-lvm | | Discard | Enabled |

CPU

Setting Value

| Cores | 2 | | Type | host |

Memory

Setting Value

| Memory | 9216 MB | | Ballooning | Disabled |

Network:

Setting Value

| Bridge | vmbr1 | | Model | VirtIO |

2. VM Options

VM > Options

Setting Value

| Start at boot | Yes | | Start/Shutdown order | 2 | | Startup delay | 30 |

3. Install Debian

  1. Boot from ISO
  2. Graphical install (or text)
  3. Hostname: docker
  4. Domain: cronova.local
  5. Root password: (set strong password)
  6. User: augusto
  7. Partitioning: Guided - entire disk
  8. Software: SSH server, standard system utilities only
  9. Install GRUB to disk

4. Post-Install Configuration

# SSH into Docker VM
ssh augusto@192.168.0.10

# Become root
su -

# Update system
apt update && apt upgrade -y

# Install Docker
apt install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Add user to docker group
usermod -aG docker augusto

# Enable Docker service
systemctl enable docker

# Install useful tools
apt install -y vim git htop ncdu nfs-common

# Configure static IP (if not using DHCP reservation)
# Edit /etc/network/interfaces

Note: OpenClaw runs on a dedicated Raspberry Pi 5 (not a Proxmox VM). See docs/architecture/hardware.md for RPi 5 specs and ansible/playbooks/openclaw.yml for automated setup.


Intel QuickSync (Hardware Acceleration)

For Frigate and Jellyfin transcoding.

Enable on Proxmox Host

# Verify Intel GPU
ls -la /dev/dri
# Should show: card0, renderD128

# Check GPU
lspci | grep -i vga

Pass through to Docker VM

Method 1: Device Passthrough

Edit VM config:

nano /etc/pve/qemu-server/101.conf

# Add line:
args: -device vfio-pci,host=00:02.0

Method 2: LXC Container (Alternative)

If using LXC instead of VM:

# Edit container config
nano /etc/pve/lxc/101.conf

# Add:
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir

Verify in Docker VM

ls -la /dev/dri
# Should show renderD128

# Install vainfo
apt install -y vainfo
vainfo
# Should show Intel QuickSync capabilities

Backup Configuration

Enable VM Backups

Datacenter > Backup > Add

Setting Value

| Storage | local | | Schedule | Daily 03:00 | | Selection Mode | Include selected VMs | | VMs | 100 (opnsense), 101 (docker) | | Mode | Snapshot | | Compression | ZSTD | | Retention | Keep last 7 |

Manual Backup

# Backup specific VM
vzdump 100 --storage local --compress zstd

# List backups
ls /var/lib/vz/dump/

Monitoring

Enable Email Alerts

Datacenter > Options > Email from address

  • Set to: <pve@cronova.dev>

User > root > Email

  • Set to: <augusto@cronova.dev>

System Metrics

Available in Proxmox web UI:

  • CPU usage
  • Memory usage
  • Network I/O
  • Disk I/O

Integration with Uptime Kuma

Add Proxmox health check:


Verification Checklist

Proxmox Host

  • [ ] Proxmox VE installed and accessible
  • [ ] IOMMU enabled and verified
  • [ ] Network bridge (vmbr0) configured
  • [ ] WAN NIC identified for vmbr0 bridge
  • [ ] ISOs uploaded

OPNsense VM

  • [ ] VM created with correct resources
  • [ ] Dual bridged NICs configured (vmbr0 WAN, vmbr1 LAN)
  • [ ] Boots successfully
  • [ ] See docs/guides/opnsense-setup.md for configuration

Docker VM

  • [ ] VM created with 9GB RAM, 100GB disk
  • [ ] Debian 13 (trixie) installed
  • [ ] Docker and docker-compose installed
  • [ ] User added to docker group
  • [ ] NFS client installed
  • [ ] Intel QuickSync accessible (if needed)

Backups

  • [ ] Automated backups scheduled
  • [ ] Test restore performed

Resource Summary

VM vCPU RAM Disk Purpose

| OPNsense | 2 | 2GB | 20GB | Router/Firewall | | Docker | 2 | 9GB | 100GB | All containers | | Total | 4 | 11GB | 120GB | | | Host Reserve | - | ~1GB | 392GB | Proxmox + buffers |


Troubleshooting

Cannot Access Web UI

# Check if Proxmox is running
systemctl status pveproxy

# Check IP address
ip addr show vmbr0

# Restart networking
systemctl restart networking

IOMMU Not Working

# Verify BIOS settings
# - VT-d: Enabled
# - IOMMU: Enabled

# Check kernel parameters
cat /proc/cmdline | grep iommu

VM Won't Start

# Check VM status
qm status 100

# View VM config
qm config 100

# Start with debug
qm start 100 --debug

  • docs/guides/opnsense-setup.md - OPNsense configuration
  • docs/guides/vlan-design.md - Network segmentation
  • docs/guides/nfs-setup.md - NFS for Frigate recordings
  • docs/architecture/hardware.md - Hardware specifications