Select a box in the diagram to read what it does.
Internet
A domestic cable line with a changing address. Nothing is port-forwarded to it, which is the single decision the rest of this diagram is built around.
DNS and WAF
Every public request lands here first, never on a home address. The same zone is also an internal Active Directory domain, which needs a delegation to keep both halves resolving.
Guide: how this one was built
Zero Trust Access
Identity is settled before a request reaches any code. The site verifies the resulting token independently rather than trusting the header, so a misconfigured policy cannot quietly open the editor.
Site Worker
The pages you are reading. Server-rendered at the edge, content in a SQL database, images in object storage, no server to patch.
Guide: how this one was built
Tunnel
Internal services are published by a connector that dials out. There is no inbound rule anywhere on the router, so there is no inbound rule to get wrong.
pfSense
The LAN edge. Separate VLANs for trusted devices, IoT and guests, and every DNS query on the network is forced through the filtering resolvers, whatever a device has configured.
Tunnel connector
A small container that holds the tunnel open from the inside. If it stops, published services disappear from the internet and nothing else changes.
UniFi switch
Eight 2.5G ports and a single 10G uplink, which makes "what deserves the 10G port" a real decision: the hypervisor or the storage it reads from.
DNS resolver
Filters for the whole network over encrypted upstreams and forwards the Active Directory zone to the domain controllers, so domain members and phones both resolve correctly. A second copy runs on the other node.
Guide: how this one was built
Proxmox · main
The main node, carrying the lab itself. Memory, not CPU, is the limit -- it was twice overcommitted until the guests were right-sized and page sharing was turned back on.
Guide: how this one was built
Domain controller
Active Directory and the authoritative internal DNS. Right-sized from 16 GB to 6 GB once its real committed memory turned out to be under 5 GB.
Nextcloud + Office
The family cloud with Euro-Office for documents, in one VM with Docker Compose and published through the tunnel. It replaced OneDrive, behind strong passwords and two-factor sign-in.
Guide: how this one was built
Home Assistant
Home automation, including Matter and Thread devices -- the reason IoT gets its own VLAN and the reason multicast between VLANs had to be understood properly.
Endpoint mgmt lab
A Configuration Manager site built alongside the domain to practise collections, application deployment, patching and bare-metal Windows deployment.
Guide: how this one was built
Proxmox · pve2
A small second node for everything that has to keep running while the main one is down for maintenance. Standalone on purpose: a two-node cluster loses quorum the moment either node stops.
Domain controller 2
A second domain controller on the other node, so sign-ins and internal DNS survive the main node being down.
Guide: how this one was built
DNS resolver 2
A copy of the filtering resolver, kept in sync with the first, and handed out alongside it -- so DNS keeps working when either one, or the node under it, stops.
Guide: how this one was built
Backup server
Deduplicated nightly backups of every guest on both nodes, stored on the primary NAS. It lives on the second node so a broken main node never takes its own backups with it.
Guide: how this one was built
Prometheus + Grafana
Prometheus scrapes both nodes, the NAS, the network and the backups into its time-series database; Grafana draws it. The dashboards are what turned the swap problem from a feeling into a number.
Guide: how this one was built
Status page
Uptime Kuma checks every service each minute, sends phone alerts, and gives the family a page of green and red -- with an outside check watching the watcher.
Guide: how this one was built
Disk health
One page with the health and temperature of every disk in the house, fed by both NAS units, so a failing drive is a warning rather than a surprise.
Guide: how this one was built
NAS · primary
The pool everything else depends on: media, photos, and the backup datastore. Migrated off the vendor OS with rsync, keeping ownership and timestamps intact, so nothing had to be re-indexed afterwards.
Guide: how this one was built
NAS · backup
A second box that reaches out and pulls. A pull model means ransomware on the primary cannot reach the copy, because the copy holds the only credentials.
UPS
Battery backup reporting over the network so more than one machine can shut down cleanly.
Guide: how this one was built