architecture
How the homelab is built — decisions, not a recon dump.
I run a small enterprise-style lab to practice the same problems I want to work on: segmentation, storage under sustained write, hypervisor isolation, and identity-aware remote access. Operator details (addressing, credentials, full diagrams, camera topology) stay on a private wiki behind SSO. This page is what I'm comfortable putting in front of a hiring manager.
Sanitized snapshot from the lab — no hostnames, no graphs, no management UI.
01 / intent
Design goals
- Untrusted devices never share a broadcast domain with the workstation or hypervisor management plane.
- No inbound ports on the firewall. Remote access is outbound-only.
- Storage for continuous recording must survive a disk failure without a long, risky rebuild.
- Every service is a separate VM unless there is a hard reason not to.
02 / access
Zero Trust edge
Internal apps reach the internet through a Cloudflare Tunnel. Cloudflare Access sits in front of anything that is not meant to be anonymous. Identity is email-gated and easy to revoke. The public site is the only unauthenticated origin.
internal service → tunnel (egress) → Cloudflare edge → Access policy → operator
03 / network
Zones, not a flat LAN
Two managed switches and a pfSense box. The second switch only sees traffic that has already been firewalled. Core switching and the firewall sit on UPS so the control plane survives a power blip.
| Zone |
Purpose |
What lives there |
| trusted |
Day-to-day work and hypervisor |
Workstations, APs, Proxmox host |
| dmz |
Semi-trusted automation |
Home Assistant on bare metal |
| iot |
Isolated sensors / cameras |
NVR and PoE endpoints only |
| wan |
ISP handoff |
Fiber ONT into the firewall |
ISP → core switch → firewall → core switch → internal zones
04 / storage
RAID10 for the NVR
Continuous video is a sequential-write problem. RAID10 keeps write performance predictable and rebuilds shorter than RAID5/6. The cost is 50% of raw capacity — accepted on purpose.
- External SAS enclosure, hardware RAID controller
- ext4 volume presented into the hypervisor, then to the NVR VM
- Health via the vendor CLI (predictive failure, temps, BBU) plus Netdata
One unused spare currently has a predictive-failure flag. It is not in the array.
05 / compute
One hypervisor, split duties
Recycled Dell rack server running Proxmox. Workloads are separate VMs so a compromise or a bad upgrade does not take the whole lab with it.
| Workload | Why it is isolated |
| public web | Only anonymous origin |
| SIEM | Log ingest should outlive other VMs |
| NVR | Tied to the RAID volume |
| containers | App experiments, not on the hypervisor |
| home automation | Bare metal, in the DMZ |
06 / observe
Monitoring
Netdata on the host for CPU, memory, disk, and guests. Hardware RAID metrics (controller health, SMART, drive temperature) are scraped from the controller CLI so a dying disk shows up before the array does.
Live tank and pump telemetry is on the Lab Dashboard — a small public slice of the same idea.
07 / what is not here
Deliberate omissions
- No RFC1918 addresses, VLAN IDs, or switch configs
- No public hostnames for cameras, Portainer, or monitoring
- No firmware versions or full rack diagrams
- Operator runbooks stay behind Cloudflare Access
If you are hiring, I can walk through the private wiki on a screen share. I will not post it. You can also take a shift on the Incident Board.