This document describes how a Body (GPU render node) gets provisioned with a WireGuard tunnel to the district server, making it reachable from any Head in the mesh.
sequenceDiagram
participant BM as Body Machine
participant HC as HydraCluster
participant HG as HydraGuard Hub
BM->>HC: 1. Enroll (browser)
HC->>HC: 2. Create node (pending)
HC-->>BM: 3. Install script with token
BM->>BM: 4. Install hydranode
BM->>HC: 5. Heartbeat (token)
HC->>HC: 6. Node online
HC->>HG: 7. Provision WireGuard (API call)
HG-->>HC: 8. Assign Air peer 10.10.100.x + config
HC-->>BM: 9. Return WireGuard config
BM->>BM: Apply WireGuard config
BM->>HG: 10. WireGuard tunnel active
A technician opens the HydraCluster enrollment page (/enroll) on the Body machine's browser and fills in:
HydraCluster creates the node in pending status and generates a unique bearer token.
The technician downloads the install script from HydraCluster. The script contains:
The install script downloads and installs HydraNode, which:
enroll.yamlOn the first heartbeat, HydraCluster transitions the node from pending to online and records:
When the node's roles include WireGuard, HydraCluster calls the HydraGuard API:
For standalone Bodies (Air peers):
POST /api/v1/air/provision to HydraGuard10.10.100.x rangeFor venue gateway Bodies:
POST /api/v1/gateway/provision to HydraGuardThe WireGuard config is applied on the Body:
/etc/wireguard/wg0.confwg-quick up wg0The Body is now reachable from any point in the WireGuard mesh via its assigned address (e.g., 10.10.100.42).
HydraCluster stores both IPs for the Body:
| Field | Value | Purpose |
|---|---|---|
IP |
LAN IP (e.g., 192.168.1.50) |
Local streaming path |
WireGuardIP |
Mesh IP (e.g., 10.10.100.42) |
Remote streaming path |
Both IPs are served to Heads as stream_url (WireGuard) and stream_url_lan (LAN).
After WireGuard is active, HydraNode also provisions the streaming software:
Sunshine -- NVIDIA GPU streaming server (Moonlight protocol compatible)
C:\Sunshine (Windows Bodies)47990 (TCP)HydraBody -- Experience launcher service
47991Once provisioned, the Body:
releases.experiencenet.com every 6 hours