diff --git a/docs/INFRASTRUCTURE-DIAGRAM.md b/docs/INFRASTRUCTURE-DIAGRAM.md new file mode 100644 index 0000000..1f1937c --- /dev/null +++ b/docs/INFRASTRUCTURE-DIAGRAM.md @@ -0,0 +1,354 @@ +# Infrastructure Diagram - xtrm-lab.org + +**Generated:** 2026-01-22 +**Domain:** xtrm-lab.org +**WAN IP:** 62.73.120.142 + +--- + +## Network Topology Overview + +``` +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ INTERNET │ +│ WAN: 62.73.120.142 │ +└────────────────────────────────────────────────┬────────────────────────────────────────────────────────────┘ + │ + ┌──────────────────────┴──────────────────────┐ + │ MikroTik hAP ax³ Router │ + │ 192.168.31.1 │ + │ RouterOS 7.20.6 │ + │ │ + │ ┌────────────────────────────────────────┐ │ + │ │ Docker Containers (172.17.0.x) │ │ + │ │ ┌─────────────┐ ┌─────────────────┐ │ │ + │ │ │ AdGuard Home│ │ Tailscale │ │ │ + │ │ │ 172.17.0.5 │ │ 172.17.0.4 │ │ │ + │ │ │ DNS/DoH/DoT │ │ VPN Client │ │ │ + │ │ └─────────────┘ └─────────────────┘ │ │ + │ └────────────────────────────────────────┘ │ + │ │ + │ Interfaces: │ + │ • ether1 (WAN) - 62.73.120.142/23 │ + │ • bridge (LAN) - 192.168.31.1/24 │ + │ • docker-bridge - 172.17.0.1/24 │ + │ • back-to-home-vpn - 192.168.216.1/24 │ + └──────────────────────────┬───────────────────┘ + │ + ┌─────────────────────────────────────┼─────────────────────────────────────┐ + │ │ │ + ▼ ▼ ▼ +┌──────────────────────────┐ ┌──────────────────────────────────────────────────────────────────┐ +│ MikroTik CSS326 Switch │ │ Unraid Server │ +│ 192.168.31.9 │ │ 192.168.31.2 │ +│ 24x Gigabit + 2x SFP │ │ Tailscale: 100.100.208.70 │ +│ SwOS │ │ SSH Port: 422 │ +└──────────────────────────┘ └──────────────────────────────────────────────────────────────────┘ + │ + ▼ +┌──────────────────────────┐ +│ MikroTik cAP ac │ +│ 192.168.31.6 │ +│ CAPsMAN Access Point │ +│ RouterOS 7.20.1 │ +└──────────────────────────┘ +``` + +--- + +## Port Forwarding / NAT Rules (WAN → LAN) + +``` +┌─────────────────────────────────────────────────────────────────────────────────────────┐ +│ INTERNET (62.73.120.142) │ +└────────┬──────────┬──────────┬──────────┬──────────┬──────────┬──────────┬─────────────┘ + │ │ │ │ │ │ │ + │:80 │:443 │:853 │:8853 │:32400 │:51413 │:21115-21119 + │ │ │ │ │ │ │ + ▼ ▼ ▼ ▼ ▼ ▼ ▼ +┌─────────────┐ ┌─────────────┐ ┌───────────────┐ ┌───────────────┐ ┌─────────────┐ +│ Traefik │ │ Traefik │ │ AdGuard Home │ │ AdGuard Home │ │ Plex │ +│192.168.31.2 │ │192.168.31.2 │ │ 172.17.0.5 │ │ 172.17.0.5 │ │192.168.31.2 │ +│ :8001 │ │ :44301 │ │ :853 │ │ :8853 │ │ :32400 │ +│ (HTTP) │ │ (HTTPS) │ │ (DoT) │ │ (DoQ) │ │ (Media) │ +└─────────────┘ └─────────────┘ └───────────────┘ └───────────────┘ └─────────────┘ + +┌─────────────────────────────────────────────────────────────────────────────────────────┐ +│ Transmission │ RustDesk Server │ DNS Redirect (LAN) │ +│ 192.168.31.2 │ 192.168.31.2 │ 53 → 172.17.0.5:5355 │ +│ :51413 │ :21115-21119 │ (Force to AdGuard) │ +│ (BitTorrent) │ (Remote Desktop) │ │ +└─────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## Unraid Docker Services Map + +``` +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ UNRAID SERVER (192.168.31.2) │ +├─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─── dockerproxy Network (172.18.0.0/16) ──────────────────────────────────────────────────────────────┐ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ CORE INFRASTRUCTURE │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ dockersocket │ │ traefik │ │ homarr │ │ │ │ +│ │ │ │ 172.18.0.2 │ │ 172.18.0.3 │ │ 172.18.0.4 │ │ │ │ +│ │ │ │ :2375 │ │ :8001→80 │ │ :10004→7575 │ │ │ │ +│ │ │ │ Socket Proxy │ │ :44301→443 │ │ Dashboard │ │ │ │ +│ │ │ │ │ │ :8183→8080 │ │ xtrm-lab.org │ │ │ │ +│ │ │ │ │ │ traefik.xtrm- │ │ │ │ │ │ +│ │ │ │ │ │ lab.org │ │ │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ SECURITY │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ authentik │ │ authentik-worker│ │ vaultwarden │ │ │ │ +│ │ │ │ 172.18.0.11 │ │ 172.18.0.12 │ │ 172.18.0.15 │ │ │ │ +│ │ │ │ :9000, :9443 │ │ (Worker) │ │ :4743→80 │ │ │ │ +│ │ │ │ auth.xtrm- │ │ │ │ vault.xtrm- │ │ │ │ +│ │ │ │ lab.org │ │ │ │ lab.org │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ DATABASES │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ postgresql17 │ │ Redis │ │ │ │ +│ │ │ │ 172.18.0.13 │ │ 172.18.0.14 │ │ │ │ +│ │ │ │ :5432 │ │ :6379→6379 │ │ │ │ +│ │ │ │ PostgreSQL │ │ Key-Value │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ DEVOPS │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ gitea │ │woodpecker-server│ │ woodpecker-agent│ │ │ │ +│ │ │ │ 172.18.0.31 │ │ 172.18.0.32 │ │ 172.18.0.33 │ │ │ │ +│ │ │ │ :2222→22 │ │ :80, :443 │ │ :3000 │ │ │ │ +│ │ │ │ :3005→3000 │ │ :8000, :9000 │ │ CI/CD Agent │ │ │ │ +│ │ │ │ git.xtrm-lab.org│ │ ci.xtrm-lab.org │ │ │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ MONITORING │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ UptimeKuma │ │ Uptime-Kuma-API│ │ AutoKuma │ │speedtest-tracker│ │ │ │ +│ │ │ │ 172.18.0.20 │ │ 172.18.0.18 │ │ 172.18.0.19 │ │ 172.18.0.21 │ │ │ │ +│ │ │ │ :3001→3001 │ │ :8000→8000 │ │ (Auto Mgmt) │ │ :1180→80 │ │ │ │ +│ │ │ │ uptime.xtrm- │ │ │ │ │ │ speedtest.xtrm- │ │ │ │ +│ │ │ │ lab.org │ │ │ │ │ │ lab.org │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ PRODUCTIVITY │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ actual-budget │ │ n8n │ │ karakeep │ │ Nextcloud │ │ │ │ +│ │ │ │ 172.18.0.16 │ │ 172.18.0.17 │ │ 172.18.0.25 │ │ 172.18.0.24 │ │ │ │ +│ │ │ │ :5006→5006 │ │ :5678 │ │ :3000 │ │ :8666→80 │ │ │ │ +│ │ │ │ actual.xtrm- │ │ n8n.xtrm- │ │ karakeep.xtrm- │ │ nextcloud.xtrm- │ │ │ │ +│ │ │ │ lab.org │ │ lab.org │ │ lab.org │ │ lab.org │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ │ ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │ │ +│ │ │ NETWORK MANAGEMENT │ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ netdisco-web │ │ netdisco-backend│ │ pangolin │ │ │ │ +│ │ │ │ 172.18.0.41 │ │ 172.18.0.42 │ │ 172.18.0.51 │ │ │ │ +│ │ │ │ :5000 │ │ (Backend) │ │ :3003→3001 │ │ │ │ +│ │ │ │ netdisco.xtrm- │ │ │ │ :3004→3002 │ │ │ │ +│ │ │ │ lab.org │ │ │ │ Tunnel Mgmt │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ │ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─── netbox Network (172.24.0.0/16) ───────────────────────────────────────────────────────────────────┐ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │ │ +│ │ │ netbox │ │ netbox-worker │ │ netbox-postgres │ │ netbox-redis │ │netbox-redis-│ │ │ +│ │ │ 172.24.0.5 │ │ 172.24.0.6 │ │ 172.24.0.4 │ │ 172.24.0.2 │ │ cache │ │ │ +│ │ │ :8090→8080 │ │ (Worker) │ │ :5432 │ │ :6379 │ │ 172.24.0.3 │ │ │ +│ │ │ netbox.xtrm- │ │ │ │ PostgreSQL │ │ Redis │ │ :6379 │ │ │ +│ │ │ lab.org │ │ │ │ │ │ │ │ │ │ │ +│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────┘ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─── slurpit Network ──────────────────────────────────────────────────────────────────────────────────┐ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │ slurpit-portal │ │ slurpit-scanner │ │ slurpit-scraper │ │slurpit-warehouse│ │ │ +│ │ │ (dockerproxy) │ │ │ │ │ │ │ │ │ +│ │ │ :80, :3306 │ │ (Discovery) │ │ (Scraping) │ │ (Storage) │ │ │ +│ │ │ slurpit.xtrm- │ │ │ │ │ │ │ │ │ +│ │ │ lab.org │ │ │ │ │ │ │ │ │ +│ │ ├─────────────────┴──┴─────────────────┴──┴─────────────────┴──┴─────────────────┤ │ │ +│ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ +│ │ │ │ slurpit-mariadb │ │ slurpit-mongodb │ │ │ │ +│ │ │ │ :3306 │ │ :27017 │ │ │ │ +│ │ │ │ MariaDB │ │ MongoDB │ │ │ │ +│ │ │ └─────────────────┘ └─────────────────┘ │ │ │ +│ │ └────────────────────────────────────────────────────────────────────────────────┘ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─── br0 macvlan Network (192.168.31.0/24) ────────────────────────────────────────────────────────────┐ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │binhex-pihole │ │ unbound │ │ TimeMachine │ │ │ +│ │ │ 192.168.31.4 │ │ 192.168.31.5 │ │ 192.168.31.12 │ │ │ +│ │ │ Secondary DNS │ │ Recursive DNS │ │ SMB/AFP │ │ │ +│ │ │ ph1.xtrm-lab.org│ │ │ │ Time Machine │ │ │ +│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─── Host Network ─────────────────────────────────────────────────────────────────────────────────────┐ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │ plex │ │ NetAlertX │ │ unimus │ │HomeAssistant │ │ │ +│ │ │ :32400 (Media) │ │ (Network Mon) │ │ unimus.xtrm- │ │ha.xtrm-lab.org │ │ │ +│ │ │ plex.xtrm- │ │ netalert.xtrm- │ │ lab.org │ │ │ │ │ +│ │ │ lab.org │ │ lab.org │ │ Config Backup │ │ Home Automation │ │ │ +│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ +│ │ ┌─────────────────┐ │ │ +│ │ │ UrBackup │ │ │ +│ │ │ urbackup.xtrm- │ │ │ +│ │ │ lab.org │ │ │ +│ │ │ Server Backup │ │ │ +│ │ └─────────────────┘ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +│ ┌─── Bridge Network ───────────────────────────────────────────────────────────────────────────────────┐ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │ rustdesk-hbbs │ │ rustdesk-hbbr │ │ portainer │ │ transmission │ │ │ +│ │ │ :21115-21119 │ │ (Relay) │ │ :9002 │ │ :9091→9091 │ │ │ +│ │ │ rustdesk.xtrm- │ │ │ │ Container │ │ :51413→51413 │ │ │ +│ │ │ lab.org │ │ │ │ Management │ │ BitTorrent │ │ │ +│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │ Libation │ │ stunnel-dot │ │ DoH-Server │ │ │ +│ │ │ 172.18.0.23 │ │ │ │ 172.18.0.22 │ │ │ +│ │ │ Audiobooks │ │ DoT Stunnel │ │ doh.xtrm-lab.org│ │ │ +│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ +│ └───────────────────────────────────────────────────────────────────────────────────────────────────────┘ │ +│ │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## Service Summary by Role + +### Core Infrastructure +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Reverse Proxy | traefik | 172.18.0.3 | 8001→80, 44301→443, 8183→8080 | traefik.xtrm-lab.org | +| Docker Socket | dockersocket | 172.18.0.2 | 2375 | - | +| Dashboard | homarr | 172.18.0.4 | 10004→7575 | xtrm-lab.org | + +### Security & Identity +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Identity Provider | authentik | 172.18.0.11 | 9000, 9443 | auth.xtrm-lab.org | +| Authentik Worker | authentik-worker | 172.18.0.12 | - | - | +| Password Manager | vaultwarden | 172.18.0.15 | 4743→80 | vault.xtrm-lab.org | + +### DNS Infrastructure +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| AdGuard Home (Primary) | adguardhome | 172.17.0.5 (Router) | 5355, 443, 853, 8853 | dns.xtrm-lab.org | +| Pi-hole (Secondary) | binhex-official-pihole | 192.168.31.4 | 53, 80 | ph1.xtrm-lab.org | +| Unbound | unbound | 192.168.31.5 | 53 | - | +| DoH Server | DoH-Server | 172.18.0.22 | - | doh.xtrm-lab.org | + +### DevOps & CI/CD +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Git Server | gitea | 172.18.0.31 | 2222→22, 3005→3000 | git.xtrm-lab.org | +| CI/CD Server | woodpecker-server | 172.18.0.32 | 80, 443, 8000, 9000 | ci.xtrm-lab.org | +| CI/CD Agent | woodpecker-agent | 172.18.0.33 | 3000 | - | + +### Network Management +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| NetBox | netbox | 172.24.0.5 | 8090→8080 | netbox.xtrm-lab.org | +| NetDisco | netdisco-web | 172.18.0.41 | 5000 | netdisco.xtrm-lab.org | +| Unimus | unimus | host | - | unimus.xtrm-lab.org | +| Slurpit | slurpit-portal | dockerproxy | 80, 3306 | slurpit.xtrm-lab.org | + +### Monitoring +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Uptime Kuma | UptimeKuma | 172.18.0.20 | 3001→3001 | uptime.xtrm-lab.org | +| NetAlertX | NetAlertX | host | - | netalert.xtrm-lab.org | +| Speedtest | speedtest-tracker | 172.18.0.21 | 1180→80 | speedtest.xtrm-lab.org | + +### Media & Storage +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Plex | plex | host | 32400 | plex.xtrm-lab.org | +| Nextcloud | Nextcloud | 172.18.0.24 | 8666→80 | nextcloud.xtrm-lab.org | +| Transmission | transmission | bridge | 9091, 51413 | - | +| Time Machine | TimeMachine | 192.168.31.12 | SMB/AFP | - | + +### Productivity +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Actual Budget | actual-budget | 172.18.0.16 | 5006→5006 | actual.xtrm-lab.org | +| n8n | n8n | 172.18.0.17 | 5678 | n8n.xtrm-lab.org | +| Karakeep | karakeep | 172.18.0.25 | 3000 | karakeep.xtrm-lab.org | + +### Remote Access +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| RustDesk ID | rustdesk-hbbs | bridge | 21115-21119 | rustdesk.xtrm-lab.org | +| RustDesk Relay | rustdesk-hbbr | bridge | - | - | + +### Home Automation & Backup +| Service | Container | IP | Ports | URL | +|---------|-----------|-----|-------|-----| +| Home Assistant | HomeAssistant_inabox | host | - | ha.xtrm-lab.org | +| UrBackup | UrBackup | host | - | urbackup.xtrm-lab.org | +| Portainer | portainer | bridge | 9002 | 192.168.31.2:9002 | + +--- + +## Encrypted DNS Endpoints + +| Protocol | Endpoint | Port | +|----------|----------|------| +| DoH | https://dns.xtrm-lab.org/dns-query | 443 | +| DoT | tls://dns.xtrm-lab.org | 853 | +| DoQ | quic://dns.xtrm-lab.org | 8853 | +| Plain DNS | 192.168.31.1 (LAN only) | 53 | + +--- + +## Docker Networks Summary + +| Network | Subnet | Purpose | +|---------|--------|---------| +| dockerproxy | 172.18.0.0/16 | Traefik-accessible services | +| netbox | 172.24.0.0/16 | NetBox stack isolation | +| slurpit_slurpit-network | Auto | Slurpit discovery stack | +| br0 | 192.168.31.0/24 | LAN macvlan (direct LAN IPs) | +| bridge | 172.17.0.0/16 | Default Docker bridge | +| host | - | Host network stack | + +--- + +## Quick Reference + +**SSH Access:** +- Unraid: `ssh -i ~/.ssh/id_ed25519_unraid root@192.168.31.2 -p 422` +- MikroTik: `ssh -i /root/.ssh/mikrotik_key -p 2222 unraid@192.168.31.1` + +**Key URLs:** +- Dashboard: https://xtrm-lab.org +- Auth: https://auth.xtrm-lab.org +- Git: https://git.xtrm-lab.org +- CI/CD: https://ci.xtrm-lab.org