This is an old revision of the document!


VM Reactor

Virtual machines, containers and applications – one web interface for your Debian host.

KVM virtual machines, LXC system containers and Docker applications side by side: one list, one number for every guest, one place to start, watch, back up and protect them. Part of the Stratum project – your host remains Debian.

VM Reactor – overview of the host

VM Reactor 0.05 – Technical Preview · Debian 13 (trixie) and Debian 14 (forky) · amd64 and arm64 · free software (GPL-3+) · package vm-reactor in the Stratum repository (component contrib)

Technical preview. VM Reactor is new and still changing: features, settings and the web interface may change from one version to the next. Try it, test it and tell us what you think – but keep backups of your guests and do not rely on it alone for production systems yet.

Overview

VM Reactor turns a Debian computer into a host for guests. It manages virtual machines (KVM with libvirt), system containers (LXC) and applications (Docker compose projects) in one web interface with its own port – HTTPS, 8443 by default. Every guest has a number: the host is ID 0, the guests are 1, 2, 3 …, whatever their type. Each guest has exactly one configuration file (/etc/vm-reactor/guests/<id>.conf) and one directory in a storage – nothing is hidden in a database, and everything the web interface does can also be done on the command line with vm-reactor.

VM Reactor uses the tools Debian already has: libvirt and QEMU, LXC, Docker from Docker's repository (through stratum-docker), nftables and dnsmasq. It works together with the Stratum modules – firewall, security, WireGuard mesh, Ansible, support, telemetry – when they are installed.

Machines
KVM · libvirt
Create a virtual machine with a wizard, install it from an ISO image, use the graphical console (VNC) or the serial console in the browser. Disks, snapshots, clones, guest agent, hardware watchdog, start order with the host.
Containers
LXC · unprivileged
Complete Linux systems – Debian, Ubuntu, Alpine and more – from the LXC image server, started in seconds. A shell in the browser, resource limits, snapshots, backups, the same network and firewall as the machines.
Applications
Docker · compose
Docker installed from Docker's own repository; applications as compose projects – paste a compose file or start from a template (nginx, Uptime Kuma, Vaultwarden, MariaDB, Adminer …). Registries, mirrors and images in one place.

Storage
dir · XFS · NFS · ZFS · LVM thin
Guests, ISO images, LXC templates and backups in the storage you choose. Copy-on-write with XFS (reflink), volumes and data sets with quotas on ZFS, thin volumes on LVM; storage snapshots on ZFS and LVM thin.
Network
NAT · LAN · bridges
A NAT network with DHCP, DNS, fixed addresses and published ports; guests directly in your local network (macvtap / macvlan); internal bridges and bridges on network cards – with confirmation and automatic rollback.
Protection
firewall · backups · watchdog
A firewall for every guest (nftables, anti-spoofing), backups as one file each – manual or scheduled with retention, restore under a new ID – and a watchdog that restarts what has failed.

Users and roles
5 roles · guest scopes
viewer, user, operator, manager and admin – each user sees only the guests you give them. Two-factor sign-in (TOTP), allowed networks, sign-in limits, session timeout and an audit log of every change.
Memory
advanced · zram · deduplication
An advanced feature: compressed swap with stratum-zram in a type tuned for virtualization hosts, memory deduplication (KSM) with recommended settings and free page reporting of the virtual machines – more guests in the same RAM.
Stratum integrations
one layer, one host
fail2ban guards the sign-in, the WireGuard mesh reaches the guests of every host, Ansible finds them in its inventory, a support session and report include VM Reactor – each one switched on in the settings.

A look inside

Guests

Guests – machines, containers and applications in one list, one ID each.

A virtual machine

A virtual machine – state, configuration and load charts.

Shell of a container

The console in the browser – the shell of a container.

Network

Network – the NAT network, bridges and the interfaces of the host.

More guests in the same memory – an advanced feature of VM Reactor. Memory compression keeps idle guest memory compressed in RAM (zram, typically 3:1 and more), and memory deduplication keeps identical memory pages of the virtual machines only once (KSM). VM Reactor sets both up with values recommended for a virtualization host and shows in real time how much RAM they save.

Memory compression

Memory compression – compressed swap in RAM, tuned for virtual machines and containers.

Memory deduplication

Memory deduplication – KSM with the settings recommended for a virtualization host, applied with one click.

Backups

Backups – one file per backup, scheduled jobs with retention.

Integrations

Settings – the integrations with the Stratum modules.

Installation

What you need

Item Requirement
System Debian 13 (trixie) or Debian 14 (forky), amd64 or arm64 – a physical computer or a virtual machine with nested virtualization
Virtualization VT-x / AMD-V switched on in the firmware for KVM machines; without it, machines run emulated and slowly (containers and applications do not need it)
Stratum stratum-init 0.40 or newer and the Stratum repository with the components main and contrib – see Stratum – quick setup
Memory and disk Enough for the host and all guests; memory compression and deduplication help when it gets tight
Browser Any current browser; the web interface uses HTTPS on port 8443

1. The Stratum repository

If Stratum is not installed yet, follow the quick setup first. VM Reactor is in the component contrib – check that the APT source has it:

Terminal — root@host

grep Components /etc/apt/sources.list.d/stratum.sources
# Components: main contrib

Sources written by older versions of stratum-archive-keyring have only main; installing the current stratum-archive-keyring (or stratum-init) adds contrib by itself.

2. Install the package

Terminal — root@host

apt-get update
apt-get install vm-reactor

APT brings everything VM Reactor needs from Debian – libvirt and QEMU, LXC, nftables, dnsmasq, noVNC – and recommends stratum-firewall, stratum-docker and stratum-zram. At the end, the installation prints the address of the web interface and where the first password is:

Output

vm-reactor: first sign-in as user admin, password in /etc/vm-reactor/initial-admin-password
         (change it in the web interface: Security - My account; then delete the file)
vm-reactor: web interface https://10.0.0.22:8443/

3. First sign-in

  1. Open the address in the browser (vm-reactor url prints it again). The certificate is created on the host and is not signed by an authority – the browser asks once whether to trust it.
  2. Sign in as admin with the password from /etc/vm-reactor/initial-admin-password.
  3. In Users & security → My account set your own password and switch on two-factor sign-in (an authenticator app); then delete the file: rm /etc/vm-reactor/initial-admin-password.
  4. Look at the Overview: the warnings at the top tell you what is still missing (for example hardware virtualization or noVNC).

Docker applications need Docker from Docker's repository. If stratum-docker is installed, open Docker in the menu and let VM Reactor install it – or run stratum docker setup.

4. Your first guests

Create guest opens a wizard: choose the type, the name and the storage; a machine gets an ISO image, cores, memory and a disk, a container a system image, an application a compose file or a template. The guest appears in the list with the next free ID. By default it is in the NAT network and gets an address from the host's DHCP; publish ports to reach it from outside, or put it directly into your LAN.

Administration

Users and roles

Every role includes the rights of the ones before it. Users other than admins see only the guests in their scope (all, or a list of IDs).

Role May
viewer see the guests of the scope: state, configuration, tasks
user + start, shut down, stop, reboot and use the console
operator + snapshots, backups and logs
manager + create, change, clone and delete guests, Docker compose, disks, ISO images; restore and delete backups; schedules
admin + the host: shell, storage, network, users, security, settings (always all guests)

Terminal — root@host

vm-reactor user add anna operator 3,4,7     # asks for the password
vm-reactor user list
vm-reactor user guests anna all
vm-reactor user 2fa-off anna                 # lost phone: switch two-factor sign-in off
vm-reactor user disable anna                 # sessions end at once

Securing the web interface

  • Allowed networks (Users & security, ALLOW_FROM): only these networks reach the web interface; VM Reactor refuses a change that would lock you out.
  • Sign-in limits: after LOGIN_ATTEMPTS failed sign-ins an address is blocked for 10 minutes; session timeout in minutes (SESSION_TIMEOUT).
  • stratum-security: the protected service vm-reactor – fail2ban bans addresses with too many failed sign-ins.
  • stratum-firewall: VM Reactor writes its own rules (port 8443, DHCP and DNS of the NAT network, forwarding of the guests) to /etc/stratum/firewall.d/vm-reactor.rules.
  • Own certificate: replace /etc/vm-reactor/tls/vm-reactor.crt and vm-reactor.key and run systemctl restart vm-reactor. Behind a reverse proxy on the same host, LOCAL_HTTP_PORT offers plain HTTP on 127.0.0.1 only.
  • Audit log: every sign-in and change is in /var/log/vm-reactor/audit.log.

Network

Network What the guest gets
NAT (bridge vmnat0, 10.10.10.0/24 by default) a private address from the host's DHCP, names <name>.vm-reactor.lan; reachable from outside through published ports. Fixed addresses below the DHCP range.
Local network its own address in your LAN (machines: macvtap, containers: macvlan) – the host itself cannot reach these guests
Bridge a bridge on a network card (vmbrN) – guests are like computers next to the host; the change of /etc/network/interfaces must be confirmed, otherwise it is rolled back after 2 minutes
Internal bridge a bridge without a network card – guests talk only to each other

Every guest also has its own firewall (nftables on the bridge): policies, rules and protection against address spoofing. With stratum-wireguard the NAT network can be announced in the mesh – the other members then reach the guests directly; when several hosts share a mesh, give each one its own NAT network (the guests keep the host part of their address).

Storage

The storages are listed in /etc/vm-reactor/storage.conf – one line each: name, type, path, content (guests, ISO images, templates, backups):

File — /etc/vm-reactor/storage.conf

local dir /var/lib/vm-reactor guests,iso,templates,backup
thin lvmthin /var/lib/vm-reactor/storage/thin guests source=vmr-thin/data

Types: dir, xfs (reflink copies), nfs, zfs (zvols and data sets with quotas) and lvmthin. Add them in Storage; the web interface checks the tools and can format a new disk.

Backups and restore

Terminal — root@host

vm-reactor backup 2                        # guest 2, paused during the backup (default)
vm-reactor backup 2 --mode stop            # shut down, back up, start again
vm-reactor restore /var/lib/vm-reactor/backup/<file> --id 12   # restore as guest 12

A backup is one file in the backup storage; it can be exported, copied to another host and imported there. Backups → Schedules runs backups by itself – on the days and at the time you choose, for all guests or a list, with a number of backups to keep.

Start, shutdown, watchdog

  • Start with the host: guests with autostart start in their start order with delays (vm-reactor-guests.service); at host shutdown they are shut down in reverse order, each with a timeout (SHUTDOWN_TIMEOUT).
  • Watchdog: every WATCHDOG_INTERVAL seconds it checks the components (libvirt, LXC, Docker, the NAT network, the firewall rules, the storages) and the guests. A guest that should run but stopped or crashed is started again when its option restart is on – at most three times an hour; a machine whose guest agent stops answering is reset. With stratum-watchdog, VM Reactor itself is watched too.
  • Memory (advanced): Settings – Memory compression (stratum-zram with a type for VM hosts and the recommended kernel values for a hypervisor) and Memory deduplication (KSM with ksmtuned; KSM belongs to the physical host – inside a virtual machine ksmtuned does not start).

Stratum integrations

Module With VM Reactor
stratum-firewall rules of the web interface, the NAT network and published ports
stratum-security fail2ban protects the sign-in (jail vm-reactor)
stratum-wireguard the NAT network is announced in the mesh; the members reach the guests
stratum-ansible dynamic inventory of the machines and containers (vm-reactor inventory)
stratum-support support sessions; vm-reactor report is part of the diagnostic report
stratum-database guests may use the MariaDB server of the host
stratum-telemetry numbers about the guests in the extended report (no names, no addresses)
stratum-zram, stratum-docker memory compression for VM hosts; Docker for the applications

Command line

Terminal — root@host

vm-reactor list                 # all guests: ID, type, name, state, storage
vm-reactor start 3              # also: shutdown, stop, reboot
vm-reactor url                  # address of the web interface
vm-reactor help                 # every command and switch
systemctl status vm-reactor     # the web interface and the API

Files

Path Contents
/etc/vm-reactor/vm-reactor.conf settings (port, allowed networks, sign-in limits, watchdog …)
/etc/vm-reactor/guests/<id>.conf one file per guest
/etc/vm-reactor/storage.conf, network.conf, users.conf storages, networks, users
/etc/vm-reactor/tls/ certificate of the web interface
/var/lib/vm-reactor/ guests, ISO images, templates, backups (storage local)
/var/log/vm-reactor/ audit.log and the logs of the tasks

Updates

VM Reactor is updated with APT like every other package (apt-get upgrade). Restarting the web interface does not touch the guests – they keep running.

VM Reactor Handbook

The VM Reactor Handbook is in preparation. It will describe every page of the web interface, every setting and every command, with examples – in the same style as the Stratum Handbook. Until then, vm-reactor help and the hints in the web interface describe every option.

© skraba.net · vm-reactor/start.1793127744.txt.gz · Last modified: 27.10.2026 19:02