Domácí infrastruktura

Po čtyřech letech: dvouuzlový Proxmox cluster, HA reverse proxy, šest VLAN a 25+ self-hosted služeb, z nichž některé denně používají i lidé mimo tuto domácnost. Webové služby jsou dostupné bez jediného otevřeného portu; herní a hlasové servery, které port potřebují, jsou izolované ve vlastní VLAN. Vše níže je navrženo, postaveno a provozováno ručně.

Výpočetní výkon & úložiště

Dvouuzlový Proxmox VE cluster se sdíleným TrueNAS úložištěm, dedikovaným backup serverem a Raspberry Pi jako quorum zařízením, které zabraňuje split-brain situacím při výpadku jednoho uzlu.

lenovo1 · primární
Proxmox icon
Proxmox VE
infra VLAN · node 1
Primární uzel clusteru. Hostuje většinu produkčních LXC kontejnerů. Veškeré DNS směřuje na keepalived VIP sdílenou oběma Traefik uzly.
Proxmox 9 VLAN 169 cluster primary
lenovo2 · sekundární
Proxmox icon
Proxmox VE
infra VLAN · node 2
Sekundární uzel a HA failover cíl. Hostuje druhý Traefik node a jeho keepalived protějšek, takže reverse proxy už není single point of failure.
Proxmox 9 VLAN 169 HA failover Traefik node 2
truenas · hlavní úložiště
TrueNAS icon
TrueNAS SCALE
infra VLAN · datastore
Sdílené úložiště přes NFS a SMB. Nativně vystavuje vlastní ACME certifikáty. Jediný zdroj pravdy pro persistentní data.
NFS SMB ACME certs VLAN 169
pbs · backup
Proxmox Backup Server icon
Proxmox Backup Server
infra VLAN · backup
Pravidelné inkrementální zálohy všech LXC a VM s deduplikací. Kritické konfigurační cesty jsou ověřovány. Data jsou ukládána na oddělený hardware mimo výpočetní uzly.
incremental dedup scheduled VLAN 169
rpi5b · quorum
Raspberry Pi icon
Raspberry Pi 5B
infra VLAN · quorum
Quorum zařízení clusteru — zabraňuje split-brain situacím při výpadku jednoho uzlu. U dvouuzlového clusteru je tiebreaker nutný pro správnou funkci HA.
quorum split-brain prevention
ubiquiti · routing & switching
UniFi icon
UniFi Network
všechny VLANy
Veškerý routing a switching běží na UniFi hardware. Zone-based firewall s default-deny mezi VLANy a pouze explicitně povolenými pravidly. Žádná implicitní důvěra mezi VLAN segmenty.
zone firewall default-deny 6 VLANs

Segmentace pomocí VLAN

Každá třída workloadů běží ve vlastní VLAN se specifickými firewall pravidly. Tím se minimalizuje blast radius při kompromitaci služby a zároveň se vynucuje least-privilege networking jako výchozí stav.

VLAN mapa — šest segmentů
20
proxy
10.20.0.0/16
Ingress vrstva — jediný vstupní bod pro veškerý proxovaný provoz
Traefik Cloudflared keepalived VIP
30
media
10.30.0.0/16
Media stack — izolovaný, bez outbound komunikace do jiných VLAN
Plex Sonarr Radarr Prowlarr Seerr qBittorrent
40
game
10.40.0.0/16
Herní servery — izolované, port-forwardované přímo (mimo Traefik)
TeamSpeak 6 AMP
50
services
10.50.0.0/16
Hlavní aplikační VLAN — interní a split-horizon služby
Immich Authentik OpenWebUI Docmost FoundryVTT Netbox N8N CrowdSec +more
55
exposed
10.55.0.0/16
Internet-facing služby s přísnější izolací od VLAN 50
NextcloudForgejoForgejo runnerPortfolio
169
infra
10.169.0.0/16
Infrastruktura — hypervizory, storage, DNS a monitoring
Proxmox TrueNAS PBS Technitium Prometheus Grafana Loki Wazuh
Firewall pravidla

Inter-VLAN pravidla

ALLOWDNS dotazy z libovolné VLAN → Technitium (VLAN 169)
ALLOWVLAN 20 → backend VLANy pouze na specifických portech
ALLOWCloudflare IP adresy → pouze VLAN 20
DENYVLAN 30 (Media) → jakákoliv jiná VLAN
DENYVLAN 40 (Game) → jakákoliv jiná VLAN
DENYVeškerý ostatní inter-VLAN provoz (default)

WAN ingress

ALLOW9987/UDP → TS6 (voice)
ALLOW32400/TCP → Plex (direct streaming)
ALLOW3478, 5349 → Nextcloud (STUN/TURN)
DENYVeškerý ostatní inbound WAN provoz
Split-horizon DNS

Technitium DNS server

primární
sekundární
offsite failover
Autoritativní pro local.screedy.com. Forwarder zóna pro screedy.com — lokální override směřuje na Traefik VIP, neznámé záznamy jsou přeposílány na Cloudflare. Sekundární Technitium synchronizuje zónu pomocí zone transferu.

Konvence domén

*.local.screedy.com
Pouze interní. Autoritativní v Technitium. Nikdy není publikováno do Cloudflare DNS. Z principu nedostupné z internetu.
*.screedy.com
Veřejné nebo split-horizon. Technitium override pro interní klienty + Cloudflare DNS pro externí. Stejná doména, rozdílné IP adresy v závislosti na zdroji dotazu.

Nasazené aplikace

25+ self-hosted služeb napříč šesti VLANy, všechny dostupné přes Traefik s wildcard TLS certifikáty vydanými pomocí Cloudflare DNS challenge — bez potřeby otevřených WAN portů pro webový přístup.

Produktivita & znalosti
Nextcloud icon
Nextcloud
split-horizon
nextcloud.screedy.com
Kompletní self-hosted cloud — synchronizace souborů, kalendář, kontakty, kolaborativní editace a videohovory. STUN/TURN port-forwardy obcházejí Traefik kvůli real-time komunikaci.
VLAN 55 Cloudflare tunnel STUN/TURN
Docmost icon
Docmost
split-horizon
docmost.screedy.com
Kolaborativní wiki a dokumentační platforma dostupná externě přes Cloudflare tunnel.
VLAN 50 Cloudflare tunnel
Immich icon
Immich
internal
immich.local.screedy.com
Self-hosted alternativa ke Google Photos s ML rozpoznáváním obličejů, EXIF vyhledáváním a mobilním backupem. Data uložená přes NFS na TrueNAS. Migrace z VLAN 169 do VLAN 50.
VLAN 50 NFS storage ML faces
Booklore icon
Booklore
internal
booklore.local.screedy.com
Self-hosted správa knihovny a čtečka e-booků s metadata enrichmentem a sledováním průběhu čtení.
VLAN 50
Kiwix icon
Kiwix
internal
wiki.local.screedy.com
Offline Wikipedia a referenční obsah. Využitelné při nedostupnosti internetu.
VLAN 50 Doomsday Preparation
AI & automatizace
OpenWebUI icon
OpenWebUI
split-horizon
ai.screedy.com
Webové rozhraní pro lokální LLM běžící přes LiteLLM proxy. Podporuje přepínání modelů, historii konverzací a RAG pipeline, dostupné přes Cloudflare tunnel.
VLAN 50 Cloudflare tunnel LiteLLM
N8N icon
N8N
internal
n8n.local.screedy.com
Low-code platforma pro automatizaci workflow.
VLAN 50 migrating
Changedetection icon
Changedetection
internal
changedetection.local.screedy.com
Monitoring změn webových stránek s alertingem. Sleduje upstream změny, CVE a infrastrukturní advisories.
VLAN 50 monitoring
Infrastruktura & provoz
Traefik icon
Traefik v3
internal
traefik.local.screedy.com
traefik.screedy.com
Reverse proxy a TLS termination pro všechny interní i split-horizon služby. Wildcard certifikáty přes Cloudflare DNS challenge. Dynamická konfigurace bez restartu. Běží jako dvouuzlová active/passive dvojice se sdílenou keepalived VRRP virtuální IP, failover zhruba do 4 sekund. Konfigurace a certifikáty se jednosměrně synchronizují z traefik-01 na traefik-02 pomocí rsync na systemd timeru, takže pasivní uzel je vždy připraven převzít provoz. Access logy odesílá do Loki přes OpenTelemetry a plugin CrowdSec bounceru odmítne zablokované IP dřív, než se dostanou k jakékoli službě.
VLAN 20 keepalived VIP 2 uzly wildcard TLS metrics CrowdSec bouncer OTLP logs
CrowdSec icon
CrowdSec
internal
services VLAN · detekce + LAPI
Prevence průniku založená na chování. Čte access logy Traefiku z Loki, rozpozná skenování, pokusy o zneužití CVE a brute force a bany posílá pluginu (bounceru) na obou uzlech Traefiku. Navíc vynucuje komunitní blocklist CrowdSec s přibližně 15 000 známými útočníky. Jeho komponenta AppSec funguje jako inline WAF s pravidly virtual patching pro známé CVE.
VLAN 50bouncercommunity blocklistfail-open
Authentik icon
Authentik
internal
auth.screedy.com
Identity provider a SSO. Plánovaný forward auth middleware pro Traefik — ochrana služeb bez vlastního auth. Expozice přes Cloudflare tunnel je v plánu.
VLAN 50 SSO forward auth planned
Netbox icon
Netbox
internal
netbox.local.screedy.com
Source of truth pro síť — dokumentace VLAN, inventář zařízení a rack diagramy.
VLAN 50
Technitium DNS icon
Technitium DNS
internal
infra VLAN · primary DNS
Primární DNS server se split-horizon zónami. Autoritativní pro local.screedy.com, forwarder pro screedy.com. Sekundární uzel zajišťuje HA pro DNS resolution.
VLAN 169 split-horizon zone transfer
Forgejo icon
Forgejo
split-horizon
forgejo.screedy.com
Vlastní git forge. Hostuje veškerý kód infrastruktury a aplikací, včetně CI/CD pipeline, která nasazuje toto portfolio. Actions runner ve VLAN 55 se připojuje přes SSH do cílových LXC kontejnerů pro bezprostojové nasazení.
VLAN 55Cloudflare tunnelActions runner
Media (VLAN 30 — izolovaná)
Plex icon
Plex
split-horizon
plex.screedy.com
Media server. Port-forward pro přímý streaming — záměrně obchází Traefik kvůli minimalizaci overheadu u velkých streamů. Izolováno ve VLAN 30.
VLAN 30 port-forward isolated
Arr stack
internal
*.local.screedy.com
Sonarr, Radarr, Prowlarr, Seerr, qBittorrent, Flaresolverr — plně automatizovaný pipeline pro získávání médií. Vše běží ve VLAN 30 bez přístupu do ostatních VLAN.
VLAN 30 isolated NFS storage
Gaming a zábava
FoundryVTT icon
FoundryVTT
split-horizon
vtt.screedy.com
Self-hosted virtual tabletop pro TTRPG. Externě dostupné přes Cloudflare tunnel s WebSocket podporou přes Traefik. Split-horizon DNS zajišťuje nízkou latenci pro lokální hráče.
VLAN 50 WebSocket Cloudflare tunnel
TeamSpeak 6 icon
TeamSpeak 6
port-forward
ts6.screedy.com
Voice server pro gaming. Přímý port-forward pro minimální latenci.
VLAN 40 port-forward isolated

Security posture

Defence in depth přístup — od segmentace sítě na úrovni VLAN přes zero-trust přístup, automatizované TLS, webový aplikační firewall, automatickou prevenci průniku, SIEM monitoring až po řízení přístupu na úrovni jednotlivých služeb.

Segmentace sítě
  • Šest VLAN odděluje workloady podle rizika a účelu
  • Default-deny mezi všemi VLAN — pouze explicitní allow pravidla
  • VLAN 30 (Media) a 40 (Game) nemají outbound přístup do interních služeb
  • VLAN 55 (Exposed) dále izoluje veřejně dostupné služby od VLAN 50
  • Traefik HA dvojice (VIP) ve VLAN 20 je jediný ingress bod pro webový provoz
Zero-trust přístup
  • Cloudflare Tunnel — žádné inbound WAN porty pro webové služby
  • Veškerý externí provoz končí na Cloudflare edge
  • *.local.screedy.com není nikdy publikováno do veřejného DNS — z principu nedostupné z internetu
  • Cloudflared LXC je izolovaný od backend VLAN — povolen pouze přístup k Traefiku
TLS všude
  • Wildcard certifikáty pro *.local.screedy.com a *.screedy.com přes Cloudflare DNS challenge
  • Bez HTTP-01 challenge — WAN porty 80/443 zůstávají uzavřené
  • Certifikáty spravované na traefik-01 a synchronizované na záložní uzel, automatická obnova před expirací
  • HTTPS backendy využívají serversTransport s odpovídající validací certifikátů
  • HSTS, XSS protection, frame options a referrer policy vynuceny pomocí Traefik middleware
SIEM & monitoring přístupu
  • Wazuh agent na Traefik LXC odesílá access logy a daemon logy ve formátu JSON
  • Custom Wazuh pravidla pro brute force, 5xx výkyvy, blokované přístupy, anomálie v odezvě
  • Traefik access log obsahuje ClientHost, X-Forwarded-For, DownstreamStatus, Duration, RouterName
  • Prometheus sbírá metriky z Traefiku — Grafana dashboardy pro request rate a error spiky
  • Rate-limit middleware v Traefiku: 100 req/s průměr, burst 50
  • Basic auth pro Prometheus endpoint vynucen přes Traefik middleware
Prevence průniku
  • CrowdSec analyzuje access logy Traefiku z Loki a hledá skenování, pokusy o zneužití CVE a brute force
  • Útočící IP jsou do zhruba minuty zablokované na obou uzlech Traefiku
  • Vedle lokálních detekcí se vynucuje komunitní blocklist ~15 000 známých útočníků
  • Skutečná IP klienta se bere z Cf-Connecting-Ip jen u požadavků z tunelového konektoru
  • Pravidla Cloudflare WAF podrobí provoz ze sítí cloudových poskytovatelů kontrole už na edge
Webový aplikační firewall
  • CrowdSec AppSec kontroluje každý veřejný požadavek inline, dřív než dorazí ke službě
  • Pravidla virtual patching blokují exploity známých CVE hned při prvním požadavku
  • Blokuje jen škodlivý požadavek, ne celého návštěvníka — jedna podivná URL tak nikdy nezablokuje skutečného uživatele
  • Fail-open — když je CrowdSec nebo jeho WAF nedostupný, provoz běží dál a pozastaví se jen detekce
  • Obecná pravidla OWASP (SQL injection, XSS) čekají na kontrolu falešných poplachů

Monitoring & alerting

Metriky, logy a bezpečnostní události agregované do jednotné observability pipeline — problémy se tak projeví dříve, než ovlivní dostupnost služeb.

Prometheus
Sběr metrik
Sbírá metriky z Traefiku (/metrics na :8080), CrowdSec, Unpolleru (UniFi metriky) i sebe samotného. Basic auth vynucen pomocí Traefik middleware.
Grafana
Dashboards
Datasources míří přímo na Prometheus a Loki (mimo autentizační vrstvu Traefiku). Dashboardy pro metriky UniFi AP/klientů, počty požadavků a chyb Traefiku, percentily odezvy, access logy s geolokací návštěvníků a detekce CrowdSec.
Wazuh
SIEM / EDR
Agent na Traefik LXC s custom JSON decoderem pro Traefik access logy. Vlastní rule ID detekují brute-force patterny, nárůsty 5xx chyb, blokované přístupy a anomálie v odezvě.
Unpoller
Metriky sítě
Exporter pro UniFi controller napojený na Prometheus. Sleduje per-client a per-AP provoz, kvalitu signálu a využití kanálů. Pouze exporter — bez UI.
Beszel
Host monitoring
Lightweight agent-based monitoring hostů. Sleduje CPU, paměť, disk I/O a síť na úrovni LXC a VM. Nižší overhead než plné node_exporter řešení.
Loki
Log aggregation
Přijímá access logy Traefiku z obou proxy uzlů přes OpenTelemetry (OTLP), označené podle uzlu, s retencí 30 dní. Grafana se nad ním dotazuje vedle Promethea a CrowdSec z něj čte pro detekci útoků. Na řadě jsou logy z dalších LXC a VM.

Proč právě takto?

Klíčová architektonická rozhodnutí a trade-offy, které formovaly tento setup.

LXC místo VM pro většinu služeb
LXC kontejnery sdílí kernel hosta, díky čemuž startují výrazně rychleji a mají mnohem nižší nároky na RAM — což je u dvouuzlového clusteru zásadní omezení. Proxmox HA funguje i pro LXC, takže failover zůstává automatický. VM jsou vyhrazené pouze pro workloady, které skutečně vyžadují izolaci na úrovni kernelu, například Nextcloud.
Cloudflare Tunnel místo otevřených WAN portů
Pro webové služby nejsou potřeba žádná inbound WAN pravidla. Veškerý provoz končí na Cloudflare edge — origin IP není na tomto místě veřejně vystavena. DDoS ochrana, WAF i rate-limiting jsou řešeny na straně Cloudflare. Trade-offem je závislost na dostupnosti Cloudflare pro veřejně přístupné služby, což je v kontextu homelabu akceptovatelné riziko.
DNS challenge pro wildcard TLS
Použití Cloudflare DNS-01 ACME challenge znamená, že pro vydávání ani obnovu certifikátů není potřeba otevírat žádné porty. Jeden wildcard cert pokrývá všechny subdomény a jeho obnova je plně automatizovaná přímo v Traefiku — bez nutnosti manuálního zásahu.
VIP definovaná předem — přechod bez jediné změny DNS
Všechny DNS záznamy směřovaly na keepalived VIP dávno předtím, než vůbec existoval druhý Traefik node. Když byl na lenovo2 spuštěn traefik-02 a nakonfigurován keepalived, nebylo potřeba změnit jediný DNS záznam ani port forward — přechod na HA dvojici proběhl zcela transparentně. Zvolená nepřímost předem proměnila to, co bývá migrací, v pouhou změnu konfigurace.
Split-horizon DNS místo oddělených domén
Interní klienti dostávají privátní záznam pro service.screedy.com na Traefik VIP pomocí Technitium forwarder zóny, zatímco externí klienti dostávají veřejný záznam z Cloudflare. Stejná doména, rozdílné resolution path — žádný hairpin přes Cloudflare a žádný rozdíl v uživatelském zážitku.
Quorum zařízení pro dvouuzlový cluster
Proxmox vyžaduje quorum pro provádění HA operací. U dvou uzlů vzniká při rozdělení sítě situace — bez tiebreakeru není možné bezpečně rozhodnout, který uzel má převzít kontrolu. Raspberry Pi tuto situaci řeší s minimálními náklady i spotřebou energie.
Samostatná VLAN 55 pro internet-facing služby
Nextcloud využívá STUN/TURN port-forwardy přímo z WAN a běží jako AiO container, který vystavuje větší attack surface. Umístění do VLAN 55 místo VLAN 50 omezuje blast radius při kompromitaci — služba nemá přístup k ostatním aplikačním službám.
CrowdSec: detekce centrálně, vynucení v proxy
Jedna instance CrowdSec ve VLAN 50 čte logy Traefiku z Loki místo agentů na vystavených proxy uzlech — jedna konfigurace a nic navíc na edge. Plugin v Traefiku vynucuje bany z lokální kopie seznamu a je fail-open: výpadek CrowdSec nebo Loki jen pozastaví nové detekce, nikdy neshodí veřejné služby. Provoz z tunelu se přiřazuje skutečnému návštěvníkovi podle Cf-Connecting-Ip, kterému se věří jen od tunelového konektoru — jinak by každý návštěvník vypadal jako cloudflared a jeden ban by zablokoval všechny. AppSec přidává druhou, inline vrstvu: jednotlivé škodlivé požadavky blokuje okamžitě, opakované chování řeší bany IP.

Technologický stack

Přehled technologií, které v tomto prostředí aktivně používám, spravuji nebo provozuji.

Co dál

Aktuální migrace a plánovaná vylepšení směřující k plně HA a zero-trust architektuře.

Rozpracováno

Migrace Grafana, Prometheus, Loki, Wazuh a Immich do VLAN 50 — sjednocení všech aplikačních služeb mimo infrastrukturní VLAN

Plánováno

Authentik forward auth middleware v Traefiku — SSO ochrana pro služby bez vlastního autentizačního mechanismu
Loki pro všechny hosty — rozšířit sběr logů z Traefiku na všechna LXC a VM místo prohlížení logů na každém hostu zvlášť
Obecná WAF pravidla — ochrana proti SQL injection a XSS přes CrowdSec AppSec, po kontrole falešných poplachů na Nextcloudu a Docmostu
Aktivace Netbird — WireGuard mesh overlay pro bezpečný cross-VLAN admin přístup a remote management bez port-forwardingu
Expozice Authentiku — umožní SSO pro externí uživatele u split-horizon služeb přes Cloudflare tunnel