Home Lab

Overview

flowchart TB
    cloudflare["Cloudflare"]
    router["Router"]
    switch["Switch"]
    serverA["Server A"]
    serverB["Server B"]
    serverC["Server C"]

    cloudflare -->|example.com| router

    router --> switch

    switch --> serverA
    switch --> serverB
    switch --> serverC

The above diagram documents the high level architecture for the physical infrastructure of my home lab.

Equipment

Router

Ubiquiti Dream Machine Pro

Switch

Ubiquiti 48 port PoE

Servers

  • HP ProLiant DL360 Gen 9
    • CPU: 2 x Intel(R) Xeon(R) CPU E5-2620 v3
    • Mem: 8 x 16GB DDR4-2133 RDIMM
    • Boot: 1 x 250GB Samsung 970 Evo Plus M.2-2280 PCIe 3.0 NVME
    • Storage: 4 x 1TB Samsung 870 Evo
    • Power: 2 x HP 500W Flex Slot Platinum Power Supply
    • Accelerator: N/A
  • HP ProLiant DL360 Gen 9
    • CPU: 2 x Intel(R) Xeon(R) CPU E5-2620 v3
    • Mem: 8 x 16GB DDR4-2133 RDIMM
    • Boot: 1 x 250GB Samsung 970 Evo Plus M.2-2280 PCIe 3.0 NVME
    • Storage: 4 x 1TB Samsung 870 Evo
    • Power: 2 x HP 500W Flex Slot Platinum Power Supply
    • Accelerator: N/A
  • Custom build
    • CPU: 1 x Ryzen 5 5600X
    • Mem: 2 x 8GB DDR4-3600 CL19
    • Boot: N/A
    • Storage: 1 x 1TB Samsung 970 Evo Plus M.2-2280 PCIe 3.0 NVME
    • Power: 1 x EVGA SuperNOVA 750 GT 750 W 80+ Gold
    • Accelerator: 1 x Gigabyte EAGLE Radeon RX 6700 XT 12 GB

Network Topology

flowchart TB
    serverA["Server A"]
    serverB["Server B"]
    serverC["Server C"]
    pi["Raspberry Pi"]
    homelab["Homelab VLAN"]
    admin["Admin VLAN"]

    pi --> homelab

    serverC --> homelab

    serverA --> homelab
    serverA -->|IPMI| admin

    serverB --> homelab
    serverB -->|IPMI| admin

The above topology represents how the machines are separated via VLANs from the rest of my home network for increased security.

Startup Procedure

All servers are network booted via iPXE chainloading. Below is a sequence diagram showcasing the boot sequence for each server.

sequenceDiagram
    server -->> server: Power On

    create participant router as Router
    server ->> router: DHCP
    destroy router
    router ->> server: FTP URL

    create participant pi as Raspberry Pi
    server ->> pi: FTP

    create participant cloudflare as Cloudflare
    pi ->> cloudflare: HTTPS with mTLS

    create participant cloud as Public Cloud
    cloudflare ->> cloud: Proxy HTTP request over mTLS
    cloud ->> cloudflare: Return iPXE chainload image

    cloudflare ->> pi: Return iPXE chainload image

    destroy pi
    pi ->> server: Return iPXE chainload image

    server ->> cloudflare: HTTPS with mTLS
    cloudflare ->> cloud: Proxy HTTP request over mTLS
    cloud ->> cloudflare: Return iPXE script for specific machine
    cloudflare ->> server: Return iPXE script for specific machine