NAT a port forwarding
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 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.
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. 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.
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, 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.
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. 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ší.