markdown
NAT-a-port-forwarding.md
markdown
# NAT a port forwarding NAT je záplata na to, že IPv4 adresy došly. Funguje tak dobře, že si na ni všichni zvykli jako na samozřejmost, a pak jsou zmatení, když se s [IPv6](Jak-funguje-IPv6) najednou ztratí. ## Problém IPv4 má 32 bitů, což je asi 4,3 miliardy adres. Došly někdy kolem roku 2011. Domácností s deseti připojenými zařízeními jsou přitom stovky milionů. Řešení: vyhradily se rozsahy, které se na internetu nepoužívají a každý si je může doma nasadit, kolikrát chce. | Rozsah | Velikost | Kde se potkáš ||---|---|---|| `10.0.0.0/8` | 16,7 mil. | firmy, VPN || `172.16.0.0/12` | 1 mil. | Docker, méně časté || `192.168.0.0/16` | 65 tisíc | domácnosti | K tomu `169.254.0.0/16`, což je adresa, kterou si zařízení přidělí samo, když nedostane odpověď od DHCP. Když ji vidíš, znamená to „DHCP nefunguje". ## Jak NAT funguje Router má jednu veřejnou adresu a za sebou třeba dvacet zařízení. Když jedno z nich pošle paket ven, router přepíše zdrojovou adresu na svoji vlastní a poznamená si to. Klíčová finta je v tom, že si zároveň mění i **zdrojový port**. Bez toho by nevěděl, komu patří odpověď. Tabulka v routeru pak vypadá takhle: | Vnitřní | Vnější | Cíl ||---|---|---|| `192.168.1.10:54321` | `85.207.12.34:41001` | `77.75.79.222:443` || `192.168.1.20:33445` | `85.207.12.34:41002` | `77.75.79.222:443` | Když přijde odpověď na port `41001`, router se podívá do tabulky, zjistí, komu patří, přepíše adresu zpátky a doručí. Přesně proto je NAT technicky vzato NAPT, tedy překlad adres *i portů*. Podrobný průchod paketu je v [cestě paketu](Cesta-paketu). ## Proč tě zvenku nikdo nevidí Ta tabulka se plní **jen odchozími** spojeními. Když někdo zvenku pošle paket na tvou veřejnou adresu, router se podívá do tabulky, nic nenajde a paket zahodí. Nemá komu ho dát. To je celý důvod, proč tvoje zařízení nejsou z internetu dostupná. Není to bezpečnostní rozhodnutí, je to vedlejší efekt toho, že router nemá jak uhodnout, komu paket patří. ## Port forwarding Port forwarding je ruční předvyplnění té tabulky. Řekneš routeru: cokoliv, co přijde na port 443, posílej na `192.168.1.10`, i když si to nikdo nevyžádal. Nastavuje se to skoro všude stejně: - vnější port (na kterém posloucháš z internetu)- vnitřní IP adresa- vnitřní port (může se lišit od vnějšího)- protokol (TCP, UDP nebo obojí) ### Praktické poznámky **Vnitřní zařízení musí mít stabilní adresu.** Udělej [DHCP rezervaci](DHCP-a-DNS). Bez ní ti to přestane fungovat, jakmile se něco restartuje ve špatném pořadí. **Nevystavuj ven, co nemusíš.** Každý otevřený port je něco, co musíš aktualizovat a hlídat. SMB (445), RDP (3389) a databázové porty se ven nevystavují nikdy. Pro tyhle věci použij [VPN](WireGuard). **Vnější port nemusí být stejný.** Přesun SSH z 22 na nějaké vysoké číslo neposkytuje skutečnou bezpečnost, ale radikálně zmenší množství pokusů v logu. **Ověř si to zvenku.** Test z domácí sítě ti nic neřekne — mnoho routerů neumí správně obsloužit přístup na vlastní veřejnou adresu zevnitř (tomu se říká hairpin NAT nebo NAT loopback). Použij mobil na datech. ## UPnP UPnP umožňuje aplikacím vytvářet si port forwarding samy, bez ptaní. Konzole a hry ho používají rády. Bezpečnostně je to nešťastné: jakýkoliv software u tebe v síti, včetně malwaru, si může sám otevřít cestu z internetu dovnitř. Bez tvého vědomí a bez záznamu. Doporučení je vypnout ho a v případě potřeby udělat pravidla ručně. Pokud ho necháš zapnuté kvůli hraní, minimálně ho omez jen na [VLANu](VLANy), kde jsou konzole. ## Dvojitý NAT Když máš router poskytovatele a za ním svůj vlastní, provoz prochází NATem dvakrát. Port forwarding pak musíš nastavit na obou, jinak nefunguje. Poznáš to snadno: veřejná adresa, kterou vidíš na `ifconfig.co`, se liší od té, kterou má tvůj router na WAN rozhraní. Řešení je přepnout krabici poskytovatele do režimu **bridge**, čímž z ní uděláš hloupý modem a NAT dělá jen tvůj router. ## CGNAT Horší varianta téhož. Poskytovatel ti nedá veřejnou adresu vůbec — dostaneš adresu z rozsahu `100.64.0.0/10` a NAT probíhá až u něj, sdílený s dalšími stovkami zákazníků. Port forwarding v takové situaci nefunguje a fungovat nemůže. Nemáš vlastní veřejnou adresu, na které bys mohl poslouchat. Co s tím, je v [poskytovatel, CGNAT a veřejná IP](Poskytovatel-CGNAT-a-verejna-IP). ## NAT není firewall Tohle stojí za zdůraznění, protože je to nejrozšířenější omyl v domácích sítích. NAT se chová ochranně jako vedlejší efekt, ale nikdo ho tak nenavrhoval a spoléhat se na něj je chyba. Nechrání tě proti ničemu, co vzniklo zevnitř — a to jsou dnes prakticky všechny útoky. Malware ve tvé síti si spojení ven naváže sám a NAT mu v tom ochotně pomůže. Skutečnou ochranu dělá [firewall](Firewall-a-zony). V IPv4 je schovaný za NATem a nevidíš ho. V IPv6 NAT není a firewall je vidět. Není to tím, že by IPv6 bylo méně bezpečné — jen je poctivější.