Lachlan Cox

What started as a Plex server has slowly grown into a full home infrastructure setup. I also use it as a testing ground for work - we run Proxmox internally, so having my own cluster to break helps me break theirs less often.

Network Diagram

                          [WAN / NBN HFC]
                            [UDM-Pro]
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
    [Door Hub]              [USW-Flex]             [Aggregation]
         │                       │                       │
     [Camera]              ┌─────┴─────┐         ┌───────┼─────────┐
                           │           │         │       │         │
                      [Camera x2]  [U6-Pro]    [UNAS]  [UNAS]  [Pro-Max-24]
                                       │                           │
                                   ~~Mesh~~                    [Proxmox x4]
                       ┌───────────────┴───────────────┐
                       │                               │
                  [U6-Mesh]                       [U6-Mesh]
                       │                               │
                [Lite-8-PoE]                   [Lite-8-PoE]
                       │                               │
                   [Study]                        [Living]

Note: I might actually make a graphic for this instead of the ASCII art. This was way too much effort to build and I dread needing to add to it.

Hardware

Networking

DeviceRole
UDM-ProRouter, firewall, NVR
USW-Aggregation10Gbe backbone
USW-Pro-Max-24Main switch, Proxmox connectivity
USW-FlexCamera switch
USW-Lite-8-PoE (x2)Study and living room
U6-ProPrimary AP
U6-Mesh (x2)Mesh APs for study and living room
Unifi Door Hub MiniGarage door control

Compute (Proxmox Cluster)

Four micro PCs form a Proxmox cluster with Ceph storage across 16TB of NVMe.

NodeHardwareCPURAMStorageNIC
px-melbourneDell Optiplex 7010 Microi7-13700T (24t)64GB512GB + 4TB NVMe1Gbe + 2.5Gbe
px-suzukaDell Optiplex 7020 Microi7-14700T (28t)64GB512GB + 4TB NVMe1Gbe + 2.5Gbe
px-bahrainLenovo M70q Gen 6Ultra 7 265T (20t)64GB512GB + 4TB NVMe1Gbe + 2.5Gbe
px-jeddahLenovo M70q Gen 6Ultra 7 265T (20t)64GB512GB + 4TB NVMe1Gbe + 2.5Gbe

Each node has the built-in 1Gbe NIC plus a 2.5Gbe NIC added in place of the WiFi card. Boot drives hold ISOs and CT templates; the 4TB drives form the Ceph pool.

These sit in my server rack as 2x 1U mounts that hold 2 PCs each. I’ve been contemplating selling the Optiplexes and getting another Lenovo M70q Gen 6 so I’d have a 3-node cluster with identical hardware. This way I could build a single power supply for all of them instead of dealing with the absolute mess of power cables and bricks in the rack.

Storage

DeviceConfigCapacityPurpose
UNAS-Pro (x2)7x 10TB RAID 5 + hotspare~50TB eachMedia, backups
Ceph (across nodes)4x 4TB NVMe~16TB rawVM/CT storage

Power

2x CyberPower OR1000ERM1U (1000VA/600W) protecting the core infrastructure.

Network

Internal services run on *.home.lachlancox.dev, resolved by the UDM-Pro’s internal DNS. Public services are exposed through a reverse proxy on my main domain.

VLANs

VLANNameSubnetPurpose
1Management192.168.1.0/24Infrastructure hardware
2Internal Users10.10.20.0/24WiFi clients
20Infrastructure Services192.168.30.0/24Proxmox, infra services
21Internal Services192.168.32.0/24Internal-only services
22Public Services192.168.33.0/24Internet-exposed services

Services

ServiceTypeVLANDescription
infra-proxyLXC20Caddy reverse proxy
infra-authLXC20Authelia for SSO
svc-plexLXC22Plex media server
svc-headscaleLXC22Self-hosted Tailscale control server
svc-tandoorLXC21Recipe management
svc-actualLXC21Actual Budget
svc-mediaVM21The arr stack (Docker)
svc-uptimeLXC21Uptime Kuma

Note: Metrics and visibility are basically non-existent right now. Planning to add Grafana for dashboards at some point.

Naming Convention

Proxmox nodes are named after F1 circuits: px-{circuit}. Specifically the name of the node is in order of the circuits ran in 2025. With the exception of the px-shanghai as I completely forgot that this happened when I named the nodes and I don’t want to go through the trouble of fixing the naming now that they are setup.

Services follow a prefix convention:

Notes: