9.7. Privát hálózatok és NAT

Az IPv4-et négymilliárd címmel tervezték, ami akkoriban elégnek tűnt. Nem az. Minden internetre csatlakozó otthonnak, irodának és gyárnak saját címblokkra van szüksége a belső eszközeihez, és ha hozzáadjuk a világ összes kameráját, telefonját és háztartási készülékét, akkor nem marad négymilliárd, ami körbeérne.

Az a megoldás, amelyben az internet végül megállapodott, a privát hálózatok: a helyi hálózaton lévő legtöbb eszköz olyan címeket használ, amelyek nem globálisan egyediek, hanem csak azon a hálózaton belül, és a hálózat szélén egyetlen eszköz fordít a két világ között. A kamera szinte mindig az egyik ilyen privát hálózaton helyezkedik el.

9.7.1. A privát címtartományok

Három IPv4 tartomány fenntartott mint a nyilvános interneten nem útválasztható. Bármely helyi hálózat szabadon használhat címeket ezekből a tartományokból anélkül, hogy bárkivel egyeztetnie kellene, mert a helyi hálózaton kívüli útválasztó soha nem fog megpróbálni hozzájuk kézbesíteni:

  • 10.0.0.010.255.255.255 (16 millió cím; gyakori a nagyobb vállalati hálózatokban).

  • 172.16.0.0172.31.255.255 (körülbelül egymillió cím; a gyakorlatban kevésbé elterjedt).

  • 192.168.0.0192.168.255.255 (65 ezer cím; szinte minden otthoni útválasztó alapértelmezése).

Egy tipikus otthoni hálózaton a kamera és a vele kommunikáló laptop egyaránt 192.168.x.x címeken helyezkedik el, mert ez az a tartomány, amelyet az otthoni útválasztó választ az általa üzemeltetett hálózathoz.

9.7.1.1. Hogyan használja a rendszer a hálózati maszkot

Az IP-címek oldal bemutatta a /24 jelölést. Az, hogy itt miért számít, abban rejlik, hogy a hálózati maszkkal dönti el minden eszköz, hová kell legközelebb mennie egy csomagnak. Minden alkalommal, amikor a kamera csomagot küld, a saját hálózati maszkját alkalmazza a célcímre, és megnézi az eredményt:

  • Ha a cél osztozik a hálózati bitekben a kamera saját címével, akkor a cél ugyanazon a helyi hálózaton van. A kamera közvetlenül elküldi neki a csomagot.

  • Ha a cél nem osztozik a hálózati bitekben, akkor valamelyik másik hálózaton kell lennie. A kamera elküldi a csomagot az alapértelmezett átjárójának (a kapcsolat felépülésekor automatikusan konfigurált útválasztónak), és hagyja, hogy az átjáró kezelje a többit.

Ez az egyetlen teszt – „osztozunk-e a hálózati biteken?” – az, amire a hálózati maszk való. Ez az oka annak is, hogy az otthoni hálózatok alapértelmezése a /24: a 254 eszközös korlát kényelmesen elegendő egy háztartásnak, és egyszerűen tartja a hálózatot.

9.7.2. Hálózati címfordítás (NAT)

Egy 192.168.1.50 címen lévő kamera nem tud csak úgy csomagot küldeni egy szervernek a nyilvános interneten – a nyilvános internet nem útválasztja a 192.168.x.x címeket. Az otthoni útválasztó ezt a hálózati címfordítással (Network Address Translation), vagyis NAT-tal oldja meg, mégpedig átlátszó módon.

Egy ábra három blokkal. Bal oldalon két eszköz egy privát hálózaton, "kamera 192.168.1.50" és "laptop 192.168.1.51" felirattal, mindkettő egy középső dobozhoz csatlakozik, amelynek felirata "router". Az útválasztónak két arca van -- egy privát arc "192.168.1.1" felirattal az eszközök felé, és egy nyilvános arc "203.0.113.5" felirattal az internet felé. Az internetet egy felhő ábrázolja jobb oldalon. Az eszközökből induló nyilak áthaladnak az útválasztón, és úgy lépnek ki, mintha a nyilvános címről jönnének.

A NAT a kimenő csomagok forráscímét átírja az útválasztó nyilvános címére, és a beérkező válaszokon visszafordítja az átírást, így a privát eszközök egyetlen nyilvános címen osztoznak, kifelé úgy tűnve.

Az útválasztónak két címe van: egy privát a helyi hálózaton (általában 192.168.1.1) és egy nyilvános, amelyet az internetszolgáltató rendel hozzá. Amikor a kamera csomagot küld egy nyilvános címre, az útválasztó

  1. rögzíti a kamera privát címét és portját, és párosítja egy saját, ideiglenes kimenő porttal;

  2. átírja a csomag forráscímét a saját nyilvános címére (a forrásportot pedig a kiválasztott kimenő portra);

  3. kiküldi az átírt csomagot a nyilvános oldalon.

Amikor a válasz visszaérkezik az útválasztó nyilvános címére és portjára címezve, az útválasztó kikeresi a párosítást, visszaírja a célt a kamera privát címére és portjára, és kézbesíti a helyi oldalon. A kamera soha nem tudja, hogy megtörtént az átírás; a szerver soha nem tudja meg az eredeti forrást.

A NAT teszi gyakorlatban használhatóvá az otthoni hálózatokat. Két olyan következménye is van, amelyet érdemes ismerni.

9.7.3. Mit változtat meg a NAT

A kimenő irány egyszerű. Egy privát hálózaton lévő kamera szabadon kommunikálhat kifelé. Valahányszor TCP-kapcsolatot nyit vagy UDP-csomagot küld egy távoli szervernek, a NAT automatikusan beállítja a párosítást. A legtöbb kameraalkalmazás ebben az irányban működik: készít egy képet, feltölti valahol egy szervernek, fogadja a választ.

A bejövő irány nehéz. Egy nyilvános interneten lévő eszköz nem tud közvetlenül csatlakozni egy privát hálózaton lévő kamerához. Amikor egy kéretlen csomag érkezik az útválasztó nyilvános címére, nincs párosítás, amelyet kikereshetne, így a csomagnak nincs hová mennie. Az útválasztó vagy eldobja, vagy átadja egy magán az útválasztón futó szolgáltatásnak.

A bejövő esetre három megkerülő megoldás gyakori, nagyjából a gyakorlati alkalmazhatóság növekvő sorrendjében:

  • Porttovábbítás. Konfiguráld úgy az útválasztót, hogy egy kiválasztott nyilvános porton érkező összes bejövő csomagot egy adott privát eszközhöz irányítsa. Adminisztrátori hozzáférést igényel az útválasztóhoz; törékeny, ha az útválasztó nyilvános címe megváltozik.

  • VPN. Üzemeltess egy virtuális magánhálózatot, amely a kamerát ugyanarra a logikai hálózatra helyezi, mint azt, akinek el kell érnie. Nehézkes; a legtöbb kamerás telepítésnél kívül esik a tárgyalt kereteken.

  • Kimenő irányból kezdeményezett kapcsolat. A kamera kapcsolódik kifelé egy ismert szerverhez valahol a nyilvános interneten, és nyitva tartja ezt a kapcsolatot; a szerver a meglévő kapcsolatot használja az üzenetek visszaküldésére. Így működnek a push értesítések és a legtöbb felhőcsatlakoztatott eszközprotokoll, és ez az a minta, amelyet a legtöbb kameraalkalmazás végül használ.

A NAT láthatatlan a kamerán futó Python kód számára. A szkript egyszerűen kommunikál azzal a céllal, amelyikkel kell; az útválasztó kezeli a fordítást a háttérben. A kapcsolat iránya viszont számít, és a NAT az oka annak, hogy „a kamera kinyúl egy felhőszerverhez” sokkal könnyebb forma, mint „egy felhőszerver benyúl a kamerához”.