# Infrastructure Topology
A visual map of the Kaburu MSP network. Designed for:
- AI models parsing the wiki (Mermaid is plain text they can read)
- Steve's network ops mate taking over cold if needed
- Anyone needing to understand what connects where and why
---
## Network Diagram (Mermaid)
```mermaid
graph TB
INTERNET[Internet] -->|PPPoE / Static IP 49.13.202.144| HZ[Hetzner VPS
kaburusvr.uk
Ubuntu 24 / CyberPanel
49.13.202.144]
INTERNET -->|Virgin Media 1Gbps| OP[OPNsense Firewall
192.168.0.1
FreeBSD]
OP -->|Mullvad VPN
WireGuard tunnel| INTERNET
OP -->|LAN 192.168.0.0/24| Z840[kaburuaibox
HP Z840 Workstation
192.168.0.253]
OP -->|LAN 192.168.0.0/24| UV[ubuntu-svr
Mini PC
192.168.0.252]
OP -->|LAN 192.168.0.0/24| TN[TrueNAS SCALE
HP MicroServer Gen8
192.168.0.251]
subgraph TAILSCALE_MESH["Tailscale Mesh 100.x.x.x"]
HZ_TS[kaburusvr
100.112.54.2]
Z840_TS[kaburuaibox
100.120.18.44]
UV_TS[ubuntu-svr
100.101.7.86]
OP_TS[OPNsense
100.127.64.74]
end
HZ_TS <-->|Tailscale SSH + WP-CLI| Z840_TS
HZ_TS ~~~|Tailscale blocked| TN
Z840_TS -.->|Tailscale SSH
LAN preferred| UV_TS
Z840_TS -.->|Tailscale SSH
ACL blocked| TN
Z840 -->|SSH ~/.ssh/id_ed256| UV
Z840 -->|SSH /opt/hermes/config/
hetzner_id_ed25519| HZ
Z840 -->|SSH ~/.ssh/id_ed256| TN
UV -->|Coral TPU passthrough| TN
```
---
## Node Roles
| Node | IPs | Role | What runs here |
|------|-----|------|----------------|
| **OPNsense** | 192.168.0.1 / 100.127.64.74 | Firewall + Router + VPN | DHCP, DNS (dnsmasq), Mullvad VPN, Tailscale, SNMP traps |
| **kaburuaibox** (Z840) | 192.168.0.253 / 100.120.18.44 | AI + Automation | Hermes Agent, llama-server, Ollama, Immich, ComfyUI, Portainer |
| **kaburusvr** (Hetzner) | 49.13.202.144 / 100.112.54.2 | Web Hosting | CyberPanel, 22 WordPress sites, MainWP, Matomo, Fusion Invoice, Postfix, Docker |
| **ubuntu-svr** | 192.168.0.252 / 100.101.7.86 | Surveillance + Network | Frigate NVR, Omada Controller, Coral TPU |
| **TrueNAS** | 192.168.0.251 / 100.74.178.14 | Storage + Backups | ZFS pools, NFS/SMB shares, backup targets |
---
## Access Summary
| Target | Via LAN | Via Tailscale | Credentials |
|--------|---------|---------------|-------------|
| OPNsense | Web UI 192.168.0.1 | N/A (SSH disabled) | API: opnsense MCP tools |
| kaburuaibox | `ssh kaburu@192.168.0.253` | `ssh kaburu@100.120.18.44` | Local user - no key needed |
| kaburusvr (Hetzner) | N/A | `ssh root@100.112.54.2` with `hetzner_id_ed25519` | Key: /opt/hermes/config/ |
| ubuntu-svr | `ssh kaburu@192.168.0.252` with `id_ed256` | `ssh kaburu@100.101.7.86` with `id_ed256` | Key: ~/.ssh/id_ed256 |
| TrueNAS | `ssh truenas_admin@192.168.0.251` with `id_ed256` | ❌ Tailscale ACL blocked | Key: ~/.ssh/id_ed256 |
**⚠️ Critical rules:**
- OPNsense NEVER responds to ping — intentional
- TrueNAS is LAN-only — Tailscale ACL blocks kaburuaibox → TrueNAS
- Never SSH as root to ubuntu-svr or TrueNAS
- SSH from LAN to internet is blocked by OPNsense — use Tailscale for external access
---
## Network Topology Details
### Internet Connectivity
- **Primary:** Virgin Media 1Gbps → OPNsense PPPoE
- **Hetzner:** Direct internet via 49.13.202.144 (routed through Cloudflare for HTTP/S)
- **VPN:** Mullvad WireGuard tunnel on OPNsense for privacy/exit
### LAN (192.168.0.0/24)
- OPNsense is DHCP server and local DNS (dnsmasq)
- All local servers have static DHCP leases
- No WiFi — everything wired
- Outbound SSH to internet is blocked by firewall policy
### Tailscale (100.x.x.x)
- Mesh VPN connecting all nodes
- Primary use: secure access from kaburuaibox to Hetzner and off-LAN access
- ACLs restrict TrueNAS access to SSH port 22 only
---
## Service Map
### kaburuaibox (Z840) — 192.168.0.253
| Service | Port | Notes |
|---------|------|-------|
| llama-server (qwen36-reap, glm47-reap) | 11440, 8787 | LLM inference, OpenAI-compatible API |
| Ollama | 11434 | Additional models |
| Hermes Agent (NousResearch) | 8642 (API), 9119 (UI) | Infrastructure AI agent |
| Hermes Docker Agent | Docker stack | Monitoring + Telegram alerts |
| Immich | 2283 | Photo management |
| ComfyUI | 8188 | Image generation |
| Portainer CE | 9443 (HTTPS) | Docker management |
### kaburusvr.uk (Hetzner) — 49.13.202.144
| Service | Port | Notes |
|---------|------|-------|
| CyberPanel (LiteSpeed) | 8090, 443, 80 | Web hosting control panel |
| 22 WordPress sites | 443 | Client sites, all behind Cloudflare |
| MainWP Dashboard | 443 | WordPress network management |
| Matomo Analytics | 443 | stats.kaburu.co — 18 sites tracked |
| Fusion Invoice | 443 | invoice.kaburu.co — billing |
| Postfix / Dovecot | 25, 587, 993 | Email — mail.kaburu.cc |
| RustDesk (Docker) | hbbs/hbbr | Remote desktop relay |
| MariaDB | 3306 (local) | All WordPress databases |
### ubuntu-svr — 192.168.0.252
| Service | Notes |
|---------|-------|
| Frigate NVR | Camera surveillance with Coral TPU |
| Omada Controller | TP-Link network management |
### TrueNAS — 192.168.0.251
| Service | Notes |
|---------|-------|
| ZFS pools | Main storage pool: kaburudata |
| SMB / NFS | Network shares for backups |
| Backup target | Wiki backups, system backups |
---
## Backup Flow
```
kaburuaibox → Hetzner (daily rsync of sites)
Hetzner → TrueNAS (daily ZFS send)
Wiki → git (local) + TrueNAS (nightly age-encrypted archive)
kaburuaibox config → TrueNAS NFS share
```
---
## Emergency Contacts
| Service | Contact | Account |
|---------|---------|---------|
| Hetzner | Hetzner Robot / Cloud Console | Email on file |
| Cloudflare | dashboard.cloudflare.com | web@kaburu.co |
| Brevo (email) | smtp-relay.brevo.com | a7cdba001@smtp-brevo.com |
| Virgin Media | Account holder | Steve |
| Namecheap (DNS exit pending) | namecheap.com | — |
| Chemicloud (exit Sept 2026) | dashboard.chemicloud.com | — |
---
## Single Points of Failure
| What | Risk | Mitigation |
|------|------|------------|
| OPNsense | Entire LAN goes down if it fails | Keep spare config backup |
| Virgin Media | Internet down | Mullvad VPN exit (still need Virgin for transport) |
| kaburuaibox | Hermes + AI + Immich down | All in one box, no HA |
| TrueNAS | All backups lost | Wiki is git-pushed, configs are scattered |
---
## Related Pages
- [[kaburusvr]] — Hetzner server details
- [[z840]] — kaburuaibox specs and services
- [[truenas]] — Storage pool layout
- [[ubuntu-svr]] — Frigate/Omada details
- [[opnsense]] — Firewall rules
- [[tailscale]] — Mesh VPN config
- [[credentials]] — API tokens and keys
- [[hermes]] — Agent documentation
- [[snmp]] — Monitoring traps