Što i zašto

Posljednji tjedan na TechPrognozi dotaknuli smo se Home Assistant na N100 serveru, Frigate NVR-a, Immicha za fotografije i Vaultwarden password managera. Svi ti servisi imaju zajednički nedostatak: ako želite pristup van kuće, morate ih izložiti internetu.

A izlažu internetu su tri loša načina:

  • Port forwarding na ruteru — direktno otvarate 443 prema kućnoj LAN-i. Bot-skeneri vas pronađu za < 1 sat. Single CVE u Vaultwardenu/Frigateu i napadač je u vašoj mreži.
  • Dyno DNS + Cloudflare Tunnel — bolje od port forwardinga, ali Cloudflare vidi cijeli HTTPS promet (TLS terminacija na njihovoj strani). Privatnost? Manja.
  • Apache reverse proxy + Let's Encrypt + basic auth — funkcionalno ali ostavlja vas izložene 0-day napadima na Apache i otvara DDoS surface.

Bolji pristup u 2026.: postavite WireGuard ili Tailscale između vaših uređaja i homelaba, i ne izlažite NIŠTA javno na internetu osim VPN porta. Telefon, laptop, work-laptop dolaze preko šifrirane VPN cijevi i pristupaju homelab servisima kao da su na lokalnoj mreži.

Brza razlika: WireGuard vs Tailscale

Karakteristika WireGuard (čisti) Tailscale
Open source Da (GPLv2, kernel modul) Klijent da, koordinator ne
Cijena 0 EUR 0 EUR (osobno), 6 USD/mj per user (poslovno)
Setup složenost Srednje-visoka Niska
NAT/CGNAT traversal Ručno (port forward) Automatski (DERP relay)
Mobile app Da, official Da, izvrsna
MagicDNS Ne (manuelno) Da (TS-DNS, hostname-based)
Mesh ili hub-and-spoke Hub-and-spoke uobičajen Mesh (P2P između peer-ova)
Coordinator Vaš ručno Tailscale Inc. (ili Headscale)
Trošak za 5 uređaja 0 EUR 0 EUR
Trošak za 100 uređaja 0 EUR 0 EUR (osobni plan)
Ovisnost o cloud servisu Nikakva Tailscale.com (login + DERP)
Vrijeme do prvog peera 30–60 min (početnik) 5 min

WireGuard — minimalan, brz, ali ručan

WireGuard je VPN protokol koji je 2020. ušao u Linux kernel kao prvi novi VPN module u dvije dekade. Zamjena za bloated OpenVPN (200k+ linija C koda, ranjivosti svake druge godine) i stari IPSec (komplicirano kao ničija stvar). WireGuard je oko 4000 linija C koda, prošao je javni cryptographic audit (Trail of Bits, 2020.), i koristi moderne primitive (ChaCha20, Poly1305, Curve25519, BLAKE2s).

Kako WireGuard radi (mentalni model)

  • Svaki uređaj ima par ključeva (privatni + javni, kao SSH)
  • Konfiguracijska datoteka sadrži moj privatni ključ + popis peer-ova s njihovim javnim ključevima
  • Promet se šifrira end-to-end između peer-ova — server u sredini je samo "router" koji ne može dekriptirati
  • Zato se i mora ručno upisati svaki peer u svaku konfiguraciju (mesh) ili jedan server kao "hub" (hub-and-spoke)

Setup primjer: WireGuard hub na N100 serveru

# 1. Instalacija (Ubuntu 24.04 ili Debian 12)
sudo apt install wireguard wireguard-tools qrencode

# 2. Generiraj ključeve za server
cd /etc/wireguard
sudo umask 077
sudo wg genkey | tee server.key | wg pubkey > server.pub

# 3. /etc/wireguard/wg0.conf na serveru
sudo tee /etc/wireguard/wg0.conf > /dev/null <<EOF
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = $(cat server.key)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]   # mobitel-toni
PublicKey = AbCdEf12...=
AllowedIPs = 10.10.0.2/32

[Peer]   # laptop-toni
PublicKey = XyZ123...=
AllowedIPs = 10.10.0.3/32
EOF

# 4. Pokreni
sudo systemctl enable --now wg-quick@wg0

Na ruteru otvarate UDP 51820 prema serveru (to je jedini izloženi port). WireGuard ne odgovara na promet bez važećeg krpto-handshakea — port-scaneri ga ne vide. To je "stealth" karakteristika koju OpenVPN nema.

Konfiguracija klijenta (mobitel)

[Interface]
PrivateKey = mobitel.privatni.kljuc=
Address = 10.10.0.2/32
DNS = 10.10.0.1            # rute kroz Pi-hole / AdGuard Home na serveru

[Peer]
PublicKey = server.javni.kljuc=
Endpoint = vase-ime.ddns.net:51820
AllowedIPs = 10.10.0.0/24, 192.168.1.0/24    # samo homelab promet kroz VPN
PersistentKeepalive = 25                       # za mobitele iza CGNAT-a

Posljednji red — AllowedIPs — je ključ. Ako stavite 0.0.0.0/0, sav internet promet ide kroz VPN (full tunnel — radi za privatnost, ali pogađa baterija + brzina). Ako stavite samo svoje LAN i WireGuard subnet, samo homelab promet ide kroz VPN (split tunnel) — Netflix, Spotify, brave-browser-ovi sve direktno.

Brzo dodavanje peer-a kroz QR kod

wg genkey | tee mobitel.key | wg pubkey > mobitel.pub
qrencode -t ansiutf8 < mobitel.conf

Skenirate QR kod s WireGuard official mobile app i to je to.

Gdje WireGuard puca

  • NAT/CGNAT traversal je vaš problem. Ako vam ISP ne daje statički IP (T-com mobilni operater u HR npr. = CGNAT), trebate VPS u sredini ili Tailscale.
  • Dinamički IP = morate koristiti DDNS (No-IP, DuckDNS, vlastiti CNAME). Ako vam IP padne na 10 min, klijenti se sami restartaju kad ConnectivityChange, ali dok DDNS update ne propagira (TTL), ne radi.
  • MagicDNS-ekvivalent ne postoji. Morate ručno koristiti IP adrese (10.10.0.1, 10.10.0.2) ili napraviti vlastiti DNS na hubu.
  • Sve ručno. Novi laptop = generiraj ključeve, doadj u server config, restartaj wg, slanje konfiguracije. Tailscale to čini u 30 sekundi.

Tailscale — WireGuard pod haubom, ali sve automatizirano

Tailscale je proizvod tvrtke Tailscale Inc. (osnivači: Crawford Currie, Avery Pennarun — bivši Google, CoreOS), koji gradi mesh mrežu na vrh WireGuard protokola. Glavna magija: koordinacija ključeva, NAT traversal, MagicDNS, ACL — sve preko cloud kontrolne ravnine.

Što Tailscale radi za vas

  1. Login s Google/Microsoft/GitHub/Apple ID-em — nema VPN passworda, nema certifikata. SSO je auth.
  2. Automatska razmjena ključeva — Tailscale koordinator vidi sve javne ključeve, ali ne i privatne. Privatni ostaju na svakom uređaju. Tailscale ne može dekriptirati promet između vaših peer-ova.
  3. DERP relay servere u 22 lokacije svijetom (Frankfurt, Amsterdam, Beč najbliži HR) — koriste se samo ako P2P NAT traversal ne uspije.
  4. MagicDNS — pristupate svojim uređajima imenom: homeassistant.crow-rabbit.ts.net, vaultwarden.crow-rabbit.ts.net. Bez /etc/hosts zafrkavanja.
  5. Subnet routing — jedan uređaj može "predstaviti" cijeli LAN drugim peer-ovima (npr. N100 server izloži cijeli 192.168.1.0/24 vašem mobitelu).
  6. Exit nodes — bilo koji peer može biti "default gateway" za bilo kojeg drugog peera (poslovica: "moj laptop u Norveškoj prikaze TV iz CRO Netflixa preko Tailscale exit node na mom homelabu").

Tailscale brzi setup

# Na N100 serveru (Ubuntu)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --advertise-routes=192.168.1.0/24 --advertise-exit-node

# Na mobitelu / laptopu / drugom uređaju
# Instalirate Tailscale app, ulogirate se istim Google računom
# I to je to.

Tailscale autocoordinator vam pošalje uređaje, oni razmijene ključeve, NAT traversal radi P2P kad može (UDP hole punching), DERP relay kad ne.

Headscale — Tailscale bez Tailscale Inc.

Ako vam smeta da Tailscale Inc. servera koordinira vaše ključeve, postoji Headscale — open-source reimplementacija Tailscale kontrolne ravnine. Vi je hostate.

# /opt/headscale/docker-compose.yml
services:
  headscale:
    image: headscale/headscale:0.26
    container_name: headscale
    restart: always
    command: serve
    volumes:
      - ./config:/etc/headscale
      - ./data:/var/lib/headscale
    ports:
      - "127.0.0.1:8080:8080"
      - "127.0.0.1:9090:9090"

Klijenti se onda u tailscale up parametrima preusmjere na vaš Headscale URL (--login-server https://headscale.vasdom.hr). Sve ostalo radi isto — MagicDNS, ACL, mesh.

Tko treba Headscale? Vrlo paranoidni ljudi i firme s GDPR-strogim policy-em. Za 99 % homelab korisnika, original Tailscale (besplatni Personal plan, do 100 uređaja) je dovoljan.

Realan TCO za 5 godina, 5 uređaja

Komponenta WireGuard čisti (na N100) Tailscale Personal Headscale na N100
Software 0 EUR 0 EUR 0 EUR
Dynamic DNS (DuckDNS / No-IP) 0 EUR nije potrebno 0 EUR (vlastita domena)
Domena (.hr) 17 EUR/god (za DDNS subdomenu) 0 EUR 17 EUR/god
VPS za NAT traversal (ako CGNAT) 4 EUR/mj (Hetzner CX22) 0 EUR (DERP free) 4 EUR/mj (mora biti javan)
5-godišnji ukupni trošak 240 EUR (samo VPS) 0 EUR 240 EUR (VPS) + 85 EUR (.hr) = 325 EUR

Tailscale je u lijenom slučaju jeftiniji, što je counter-intuitivno za open-source enthusiast. Razlog: DERP relay je infrastruktura koju oni plaćaju.

Sigurnosne preporuke (oba rješenja)

  1. Nikad ne izložite SSH (port 22) na javni IP. Pristupajte SSH-om samo unutar VPN-a. Bot-scani na port 22 = stotine napada svake minute.
  2. Promijenite default WireGuard port (51820) na nešto random (npr. 41934) — ne sprečava napadače ali smanjuje "noise".
  3. Tailscale ACL-ovi (acl.hujson na admin panelu): podijelite uređaje u grupe (group:family, group:work), dozvolite samo potrebno (laptop-rad → samo servis-A na N100, ne cijeli LAN).
  4. MFA na Tailscale account (Google/MS SSO automatski to čini ako imate).
  5. Audit logging: Tailscale admin panel ima "Connection log" — pregledajte mjesečno za nepoznate uređaje. Headscale ima headscale users list + headscale nodes list.
  6. Pi-hole/AdGuard Home unutar VPN-a kao DNS — sva DNS upiti vaših uređaja idu kroz vaše filtere, ne kroz T-com/A1 dns (ili kako god ISP-a).

Preporuka po profilu korisnika

Profil Preporuka
Početnik u homelabu, želim "samo da radi" Tailscale Personal
Imam statičnu IP adresu kod ISP-a (A1 statički, M+statička) WireGuard čisti
Imam mobilni ISP / CGNAT (T-mobile mobilni LTE/5G) Tailscale Personal
Privacy maksimalist, sumnjam Tailscale Inc. Headscale na vlastitom VPS-u
Mali tim 3–10 ljudi koji dijele homelab Tailscale Personal (do 100 uređaja)
Firma > 10 ljudi, treba SCIM, audit, RBAC Tailscale Business (6 USD/mj per user)

5 najčešćih grešaka

  1. AllowedIPs = 0.0.0.0/0 na mobitelu bez split-tunnel namjere. Battery drain + slower Spotify + (na nekim mobilnim ISP) gubitak signala jer ne ide kroz njihove relay-e.
  2. Otvore port 22 na ruteru "samo na 5 min". I zaborave zatvoriti. Bot-skeneri pamte.
  3. Nemaju MFA na Tailscale account. Google account hack = napadač dobije pristup cijelom homelabu.
  4. Koriste isti WireGuard ključ na više uređaja. Ako jedan curi, svi curu. Svaki uređaj vlastiti par ključeva, uvijek.
  5. Zaborave PersistentKeepalive = 25 na mobilnom WireGuard klijentu. Mobilni NAT zatvori sesiju nakon 1–2 min neaktivnosti, peer postaje "unreachable" dok ne pošaljete promet. Keepalive svake 25s drži cijev otvorenu.

Zaključak

  • Tailscale = "Apple iCloud za VPN": lijepo, lijeno, radi out-of-the-box, ali ovisite o tvrtki.
  • WireGuard = "Linux iz 1995.": cijela sloboda, cijela odgovornost, najveći payoff za onoga koji uloži vrijeme.
  • Headscale = "imate kolač i pojedete ga" — Tailscale UX, vlastiti coordinator, dvostruko više posla setupa.

Za 90 % čitatelja TechPrognoze — Tailscale Personal je pravi odgovor. Otvorite homelab WireGuard config tek kad vam Tailscale počne smetati zbog principa. Većini ne smeta.

Povezani članci


Cijene VPS-a i domena vrijede svibanj 2026. (Hetzner Cloud CX22 EU, Cloudflare/Namecheap domain registrar). Tailscale i Headscale projekti su trgovinske marke svojih nositelja. Članak nije sponzoriran.