Lab Architecture
Logical architecture of the Home AI Lab - a Windows 11 Pro host (REX) running WSL2 GPU workloads and Hyper-V service VMs, connected to a six-VLAN Juniper core network and extended into Google Cloud over WireGuard VPN.
Overview
The lab centres on a single high-spec Windows 11 Pro workstation (REX) running an AMD Ryzen 9 7950X3D with 128GB RAM and an NVIDIA RTX 5090 (32GB VRAM) for local inference. Hyper-V isolates five always-on Linux service VMs, while WSL2 runs the local GPU inference engine, interactive coding agents, and stdio MCP servers without full VM virtualisation overhead.
Zones & Layers
1. Google Cloud Extension
Two LiteLLM proxies expose unified OpenAI- and Anthropic-compatible endpoints across roughly three dozen models - the Claude 5 family, Gemini via AI Studio with automatic Vertex AI failover, partner open-weights models on Vertex, and the local Qwen3.8 instance on REX.
- LiteLLM Private (GCE · nginx · Redis) - Reachable only over the site-to-site WireGuard tunnel. Interactive coding agents on REX route through this endpoint by default.
- LiteLLM Public (Cloud Run · Cloud Armor) - Sits behind an external HTTPS load balancer and Cloud Armor WAF, with direct
run.appingress disabled so the load balancer cannot be bypassed. - WireGuard Gateway - GCE endpoint terminating the site-to-site tunnel from OPNsense, allowing the private proxy and wearable relay to reach local lab services cleanly.
- Wearable Voice Relay (Cloud Run · WSS Bridge) - Stateless WebSocket bridge that authenticates a Google Glass Enterprise Edition 2 headset and forwards voice turns over the VPN to
VoiceGW.
2. Home Network (LAN)
The core is a two-member Juniper EX3400-24P stretched virtual chassis - one switch in each of two rooms, operating as a single logical switch. It carries six VLANs (wired access, WLAN, guest, lab/VM, server, and firewall transit), acts as the L3 gateway and DHCP server for every subnet, and runs 10GbE jumbo frames on the storage path between REX and the NAS.
- OPNsense Firewall - Sits at the WAN edge handling dual-WAN failover, NAT, Unbound DNS, local CrowdSec threat blocking, and both site-to-site and road-warrior WireGuard tunnels. It does not route between internal VLANs.
- Aruba 7010 WLAN - Manages three Wi-Fi 6 access points with static channel plans, a dedicated 5 GHz RF air monitor radio, per-SSID VLAN assignment, and an isolated internet-only guest role.
- Synology NAS - Authoritative internal DNS server, primary off-host backup target over 10GbE, and Synology VMM hypervisor hosting two lightweight Debian utility VMs (an out-of-band jump box and an off-host cloud sync worker).
3. Host: REX - WSL2 (Local GPU & Tooling)
- vLLM Engine (Qwen3.8-27B NVFP4 · RTX 5090) - Serves mixed FP8/NVFP4 local inference with direct CUDA access to the RTX 5090 and a host firewall rule blocking outbound internet egress from the inference environment.
- AI Coding Agents - Interactive sessions (Claude Code, Gemini CLI, Antigravity) routing cloud model traffic through LiteLLM Private and falling back to local vLLM when needed.
- MCP Servers (Read / Write Split) - Five custom stdio infrastructure MCP servers (Juniper, OPNsense, Aruba, Synology, and camera/alarm telemetry). Default sessions load the read-only instances (backed by read-only device accounts), while mutating tools live in separate write-enabled instances loaded only in explicit admin profiles.
- Secret Vault (
age· Session Key Cache) - Lab credentials live in a singleage-encrypted file managed via a custom CLI. It caches the decrypted key in the OS credential store per session and injects secrets straight into child process environments - keeping plaintext.envfiles off disk and out of AI session logs.
3. Host: REX - Hyper-V VMs
- VoiceGW VM - Dedicated local speech gateway running
faster-whisperSTT and Coqui VITS TTS for Home Assistant and the Google Glass EE2 wearable client, calling local vLLM for conversational replies. - UbuntuClaw (Homer) - Hermes Agent assistant running a deterministic
--no-agent7am morning health report, a two-stage Piper + RVC voice clone pipeline, and Telegram delivery. - DebApps VM - Hosts Home Assistant, SearXNG, the Traefik reverse proxy, Uptime Kuma monitoring, appliance bridges, and the internal lab portal.
- DebIdentity VM - Runs the Step-CA internal ACME certificate authority and the Authentik identity provider (LDAPS for Linux hosts and role-mapped RADIUS for network gear).
- KaliLinux VM - Runs monthly credentialed Greenbone/GVM vulnerability scans across all six VLANs and a 6.40am MAC-keyed device discovery job that pulls ARP/DHCP state from the Juniper core and spools new-device diffs to
UbuntuClaw.
Key Design Decisions
- Stdio MCP with a hard read/write split - Default agent sessions cannot mutate infrastructure even if prompted to, because the mutating tool definitions are not registered in the default servers.
- Cloud-hosted model gateways with local fallback - Running LiteLLM in Google Cloud keeps coding agents working during local host reboots, while the WireGuard tunnel lets the private proxy route to local vLLM when desired.
- Deterministic scheduled checks - Cron jobs gather facts and check thresholds directly in Python and bash, reserving the local LLM for interactive conversations rather than burning GPU watts on green status checks.
- Scoped credentials over network position - Infrastructure access relies on role-mapped RADIUS and read-only login classes, with local break-glass accounts retained so an identity-provider outage never locks the lab out.
- One morning report plus edge-triggered critical alerts - Outside the 7am summary, messages fire only when a monitored service transitions state.
Known Compromises
- No inter-VLAN ACLs on internal east-west traffic. VLANs provide broadcast separation, internet egress blocks for cameras and IoT devices, and guest isolation, not full east-west segmentation - internal lab routing on the core switch is unfiltered. I raised this in the June 2026 security audit and deliberately accepted it for a single-occupant lab.
- The virtual chassis backbone is the critical dependency. Both VC links run over copper transceivers that Junos manages as fibre optics and does not re-train after a loss of signal. A fabric split needs a member reboot, so the daily morning check verifies that all four VC port-links are up.