9.7. Privátní sítě a NAT¶
IPv4 bylo navrženo se čtyřmi miliardami adres, což v té době znělo jako dostatek. Není to dostatek. Každá domácnost, kancelář a továrna připojená k internetu potřebuje vlastní blok adres pro svá interní zařízení, a když přidáme všechny kamery, telefony a spotřebiče na světě, čtyři miliardy zdaleka nestačí.
Řešení, na kterém se internet ustálil, jsou privátní sítě: většina zařízení v lokální síti používá adresy, které nejsou globálně jedinečné, ale platí pouze uvnitř dané sítě, a jediné zařízení na okraji sítě překládá mezi oběma světy. Kamera téměř vždy sedí v jedné z těchto privátních sítí.
9.7.1. Rozsahy privátních adres¶
Tři rozsahy IPv4 jsou rezervovány jako neroutovatelné na veřejném internetu. Jakákoli lokální síť může volně používat adresy z těchto rozsahů, aniž by to s kýmkoli koordinovala, protože žádný router mimo lokální síť se na ně nikdy nepokusí doručit:
10.0.0.0–10.255.255.255(16 milionů adres; běžné ve větších firemních sítích).172.16.0.0–172.31.255.255(asi milion adres; v praxi méně časté).192.168.0.0–192.168.255.255(65 tisíc adres; výchozí pro téměř každý domácí router).
V typické domácí síti sedí kamera i notebook, který s ní komunikuje, na adresách 192.168.x.x, protože to je rozsah, který si domácí router volí pro síť, kterou hostuje.
9.7.1.1. Jak se používá síťová maska¶
Stránka IP adresy představila zápis /24. Důvod, proč zde záleží, je ten, že síťová maska je to, co každé zařízení používá k rozhodnutí, kam má paket putovat dál. Pokaždé, když kamera odesílá paket, aplikuje svou vlastní síťovou masku na cílovou adresu a podívá se na výsledek:
Pokud cíl sdílí síťové bity s vlastní adresou kamery, je cíl ve stejné lokální síti. Kamera mu paket pošle přímo.
Pokud cíl síťové bity nesdílí, musí být v nějaké jiné síti. Kamera pošle paket své výchozí bráně (router automaticky nakonfigurovaný při navázání spojení) a nechá bránu, ať se postará o zbytek.
Právě tento jediný test – „sdílíme síťové bity?“ – je to, k čemu síťová maska slouží. Je to také důvod, proč mají domácí sítě výchozí /24: limit 254 zařízení pohodlně pokryje domácnost a udržuje síť jednoduchou.
9.7.2. Network Address Translation¶
Kamera na adrese 192.168.1.50 nemůže jen tak poslat paket serveru na veřejném internetu – veřejný internet na 192.168.x.x neroutuje. Domácí router to řeší pomocí Network Address Translation, neboli NAT, a dělá to transparentně.
NAT přepisuje zdrojovou adresu odchozích paketů na veřejnou adresu routeru a u příchozích odpovědí přepis obrací, takže se privátní zařízení jeví, jako by sdílela jednu veřejnou adresu.¶
Router má dvě adresy: privátní v lokální síti (běžně 192.168.1.1) a veřejnou přidělenou poskytovatelem internetu. Když kamera odešle paket na veřejnou adresu, router
zaznamená privátní adresu + port kamery a spáruje je s dočasným vlastním odchozím portem;
přepíše zdrojovou adresu na paketu na svou vlastní veřejnou adresu (a zdrojový port na zvolený odchozí port);
odešle přepsaný paket na veřejnou stranu.
Když se vrátí odpověď adresovaná na veřejnou adresu + port routeru, router vyhledá párování, přepíše cíl zpět na privátní adresu + port kamery a doručí jej na lokální straně. Kamera nikdy neví, že k přepisu došlo; server nikdy nezná původní zdroj.
Právě NAT činí domácí sítě praktickými. Má také dva důsledky, které stojí za to znát.
9.7.3. Co NAT mění¶
Odchozí komunikace je snadná. Kamera v privátní síti může volně komunikovat ven. Kdykoli otevře TCP spojení nebo pošle UDP paket vzdálenému serveru, NAT párování automaticky nastaví. Většina kamerových aplikací funguje právě v tomto směru: pořídit obraz, odeslat jej na nějaký server, přijmout odpověď.
Příchozí komunikace je obtížná. Zařízení na veřejném internetu se nemůže přímo připojit ke kameře v privátní síti. Když na veřejnou adresu routeru dorazí nevyžádaný paket, neexistuje žádné párování, které by router mohl vyhledat, takže paket nemá kam jít. Router jej buď zahodí, nebo předá službě běžící na samotném routeru.
Pro případ příchozí komunikace jsou běžná tři řešení, zhruba ve vzestupném pořadí podle praktičnosti:
Přesměrování portů (port forwarding). Nakonfigurujte router tak, aby směroval všechny příchozí pakety na zvoleném veřejném portu na konkrétní privátní zařízení. Vyžaduje administrátorský přístup k routeru; je křehké, když se veřejná adresa routeru změní.
VPN. Provozujte virtuální privátní síť, která umístí kameru do stejné logické sítě jako toho, kdo k ní potřebuje přistupovat. Těžkopádné; mimo rozsah většiny nasazení kamer.
Spojení iniciované zevnitř. Kamera se připojí ven ke známému serveru někde na veřejném internetu a toto spojení udržuje otevřené; server používá existující spojení k odesílání zpráv zpět. Takto fungují push notifikace a většina protokolů cloudově připojených zařízení a je to vzor, který nakonec používá většina kamerových aplikací.
NAT je pro Python kód na kameře neviditelný. Skript prostě komunikuje s libovolným cílem, který potřebuje; router se o překlad stará na pozadí. Ale na směru spojení záleží, a NAT je důvod, proč je „kamera se obrací ven na cloudový server“ mnohem snazší podoba než „cloudový server se obrací dovnitř ke kameře“.