# Vzdálený přístup

Chceš se z venku dostat domů — na NAS, na kameru, na server. Existují čtyři přístupy a liší se hlavně tím, jak velkou plochu vystavuješ internetu.

## Přehled

| Metoda | Vystavuje ven | Náročnost | Vhodné pro |
|---|---|---|---|
| Port forward | konkrétní službu | nejnižší | jedna veřejná služba |
| VPN | jeden UDP port | nízká | přístup k celé síti pro sebe |
| Reverse proxy | jeden port pro víc služeb | střední | víc webů na jedné adrese |
| Tunel přes třetí stranu | nic | nízká | když nemáš veřejnou IP |

Doporučení, když se nechceš rozhodovat: **[VPN](WireGuard) pro sebe, reverse proxy pro to, co má být veřejné.**

## Předpoklad: veřejná adresa

Nic z prvních tří možností nefunguje bez veřejné IP adresy. Ověř si to:

```
curl -4 https://ifconfig.co
```

a porovnej s tím, co ukazuje tvůj router na WAN rozhraní. Když se to liší, jsi za [CGNATem nebo dvojitým NATem](Poskytovatel-CGNAT-a-verejna-IP) a musíš to nejdřív vyřešit.

Pokud máš funkční [IPv6](Jak-funguje-IPv6), máš veřejnou adresu vždycky, bez ohledu na CGNAT. To je jeden z nejlepších praktických důvodů, proč ho zapnout.

## Dynamické DNS

Domácí adresa se obvykle občas mění. DDNS znamená, že si držíš doménu, která ukazuje na tvou aktuální adresu, a klient ji při změně aktualizuje.

Většina routerů má DDNS klienta zabudovaného. Z poskytovatelů jsou běžné DuckDNS (zdarma), Cloudflare (zdarma, když u nich máš doménu) a No-IP.

Dvě věci, na které se zapomíná:

**AAAA záznam.** Když máš IPv6, musí se aktualizovat zvlášť. Ne každý klient to umí.

**TTL.** Nastav ho nízko, třeba 60 vteřin. Když je vysoký, po změně adresy se na tebe půl dne nikdo nedostane.

## 1. Port forward

Nejjednodušší a nejrizikovější. Otevřeš port a služba je z internetu dostupná pro každého.

Popsané v [NAT a port forwarding](NAT-a-port-forwarding).

Použij ho, když je služba **navržená k tomu být veřejná** a ty ji udržuješ aktualizovanou. Web, veřejný Git server, herní server.

Nepoužívej ho pro SMB, RDP, databáze, administrační rozhraní a cokoliv, co má přihlašovací formulář a nemá dvoufaktorové ověření. Tyhle věci patří za VPN.

Když už, tak minimálně:

- silné heslo nebo klíč, nikdy výchozí přihlašovací údaje
- fail2ban nebo obdoba proti hrubé síle
- pravidelné aktualizace, protože veřejnou službu skenují roboti nepřetržitě

## 2. VPN

Postavíš šifrovaný tunel a přes něj se chováš, jako bys byl doma. Ven vystavuješ jediný UDP port, na kterém bez správného klíče nedostaneš ani odpověď.

Tohle je správná odpověď pro **přístup k vlastním věcem**. Podrobný návod je ve [WireGuardu](WireGuard).

Výhody jsou zásadní. Nic dalšího nevystavuješ. Dostaneš se na všechno včetně věcí, které by veřejné být nikdy neměly. A ve veřejné WiFi máš šifrovaný provoz zadarmo.

Nevýhoda je, že to musíš mít nastavené na každém zařízení, ze kterého se chceš připojit. Pro sdílení s kamarády se nehodí.

## 3. Reverse proxy

Jedna služba poslouchá na portu 443 a podle **doménového jména** rozhoduje, kam požadavek přepošle.

```mermaid
flowchart LR
    I[Internet] --> P[Reverse proxy<br/>port 443]
    P -->|nas.example.cz| A[NAS :5000]
    P -->|foto.example.cz| B[Immich :2283]
    P -->|home.example.cz| C[Home Assistant :8123]
```

Řeší několik problémů naráz. Máš jeden otevřený port místo pěti. Certifikáty od Let's Encrypt spravuje proxy centrálně a automaticky. Můžeš před služby přidat jednotné přihlášení. A vnitřní služby nemusí umět HTTPS vůbec.

Běžné volby: **Caddy** (nejjednodušší, certifikáty řeší sám bez konfigurace), **Nginx Proxy Manager** (klikací rozhraní), **Traefik** (nejlepší pro Docker, umí se konfigurovat sám podle štítků kontejnerů).

Minimální konfigurace v Caddy vypadá takhle a to je opravdu všechno:

```
nas.example.cz {
    reverse_proxy 192.168.1.10:5000
}
```

Certifikát si vyřídí sám při prvním spuštění.

## 4. Tunel přes třetí stranu

Když nemáš veřejnou adresu a nemůžeš ji získat. Služba běžící u tebe naváže spojení ven k poskytovateli a ten pak funguje jako tvoje veřejná tvář.

**Cloudflare Tunnel** je zdarma a funguje dobře pro weby. Nevýhoda: veškerý provoz jde přes Cloudflare, který ho vidí rozšifrovaný.

**Tailscale** je WireGuard s automatickým prostupem přes NAT. Technicky je to VPN, ale funguje i tam, kde běžná VPN ne. Pro osobní použití zdarma. Pokud jsi za CGNATem a chceš se dostat domů, tohle je nejjednodušší cesta.

**ngrok** a podobné se hodí na dočasné vystavení něčeho při vývoji, ne na trvalý provoz.

**Reverzní tunel přes SSH** je varianta, kterou si postavíš sám na jakékoliv laciné VPS. `ssh -R` otevře port na cizím stroji a provoz vyleze u tebe doma, takže veřejnou adresu potřebuje jen ta VPS. Detaily i s trvalým provozem přes systemd jsou v [SSH do hloubky](SSH#vzdálený--r).

## Pátá možnost: jen SSH

Pro leccos nepotřebuješ ani jedno z toho. SSH samo umí přesměrovat porty oběma směry i fungovat jako SOCKS proxy, takže se přes jediné spojení dostaneš na administrační rozhraní, které záměrně poslouchá jen na `127.0.0.1`:

```bash
ssh -N -L 8080:localhost:80 server     # web serveru u sebe na localhost:8080
ssh -N -D 1080 server                  # SOCKS proxy do domácí sítě
ssh -J brana vnitrni-server            # skok přes bránu bez přeposílání agenta
```

Na jednorázovou potřebu je to rychlejší než cokoliv jiného. Na každodenní pohodlí je lepší [WireGuard](WireGuard). Viz [SSH do hloubky](SSH#tunely-a-přesměrování-portů).

## Co bych udělal

Pro naprostou většinu domácností:

1. Zapni [IPv6](Jak-funguje-IPv6), protože ti dá veřejné adresy nezávisle na tom, co dělá poskytovatel s IPv4
2. Postav [WireGuard](WireGuard) a přes něj se dostávej ke všemu osobnímu
3. Reverse proxy jen pro to, co má být opravdu veřejné
4. Port forward téměř nikdy

A cokoliv, co vystavíš ven, měj v [oddělené VLANě](VLANy) s pravidlem, které mu zakazuje iniciovat spojení dovnitř. Když to někdo prolomí, ať se nedostane dál.
