9.7. Sieci prywatne i NAT

IPv4 zaprojektowano z czterema miliardami adresów, co w tamtym czasie wydawało się wystarczające. Tak nie jest. Każdy podłączony do internetu dom, biuro i fabryka potrzebuje własnej puli adresów dla swoich wewnętrznych urządzeń, a dodanie wszystkich kamer, telefonów i sprzętów AGD świata sprawia, że cztery miliardy to za mało.

Obejściem, na które zdecydował się internet, są sieci prywatne: większość urządzeń w sieci lokalnej używa adresów, które nie są unikalne globalnie, lecz tylko wewnątrz tej sieci, a pojedyncze urządzenie na jej brzegu tłumaczy między tymi dwoma światami. Kamera prawie zawsze znajduje się w jednej z takich sieci prywatnych.

9.7.1. Zakresy adresów prywatnych

Trzy zakresy IPv4 są zarezerwowane jako nieroutowalne w publicznym internecie. Każda sieć lokalna może swobodnie korzystać z adresów z tych zakresów bez uzgadniania tego z kimkolwiek, ponieważ żaden router poza siecią lokalną nigdy nie będzie próbował dostarczyć do nich pakietu:

  • 10.0.0.010.255.255.255 (16 milionów adresów; powszechne w większych sieciach korporacyjnych).

  • 172.16.0.0172.31.255.255 (około miliona adresów; rzadziej spotykane w praktyce).

  • 192.168.0.0192.168.255.255 (65 tysięcy adresów; domyślne dla niemal każdego domowego routera).

W typowej sieci domowej zarówno kamera, jak i komunikujący się z nią laptop mają adresy 192.168.x.x, ponieważ to ten zakres wybiera domowy router dla obsługiwanej przez siebie sieci.

9.7.1.1. Jak używana jest maska sieci

Strona Adresy IP wprowadziła notację /24. Ma ona tutaj znaczenie, ponieważ maska sieci to to, czego każde urządzenie używa do podjęcia decyzji, dokąd ma trafić pakiet w następnej kolejności. Za każdym razem, gdy kamera wysyła pakiet, stosuje własną maskę sieci do adresu docelowego i sprawdza wynik:

  • Jeśli adres docelowy współdzieli bity sieci z własnym adresem kamery, to znajduje się w tej samej sieci lokalnej. Kamera wysyła pakiet bezpośrednio do niego.

  • Jeśli adres docelowy nie współdzieli bitów sieci, musi znajdować się w jakiejś innej sieci. Kamera wysyła pakiet do swojej bramy domyślnej (routera skonfigurowanego automatycznie podczas nawiązywania połączenia) i pozwala bramie zająć się resztą.

Ten jeden test – „czy współdzielimy bity sieci?” – to właśnie zadanie maski sieci. To także powód, dla którego sieci domowe domyślnie używają /24: limit 254 urządzeń wygodnie mieści gospodarstwo domowe i utrzymuje prostotę sieci.

9.7.2. Translacja adresów sieciowych (NAT)

Kamera o adresie 192.168.1.50 nie może po prostu wysłać pakietu do serwera w publicznym internecie – publiczny internet nie routuje do 192.168.x.x. Domowy router rozwiązuje ten problem za pomocą translacji adresów sieciowych, czyli NAT, i robi to w sposób przezroczysty.

Diagram z trzema blokami. Po lewej dwa urządzenia w sieci prywatnej oznaczone „kamera 192.168.1.50” i „laptop 192.168.1.51”, oba podłączone do centralnego pudełka oznaczonego „router”. Router ma dwie strony -- prywatną stronę oznaczoną „192.168.1.1” zwróconą ku urządzeniom oraz publiczną stronę oznaczoną „203.0.113.5” zwróconą ku internetowi. Internet narysowany jest jako chmura po prawej. Strzałki od urządzeń przechodzą przez router i wyłaniają się tak, jakby pochodziły z adresu publicznego.

NAT przepisuje adres źródłowy pakietów wychodzących na publiczny adres routera i odwraca to przepisanie w przychodzących odpowiedziach, dzięki czemu urządzenia prywatne wyglądają, jakby współdzieliły jeden adres publiczny.

Router ma dwa adresy: prywatny w sieci lokalnej (zwykle 192.168.1.1) oraz publiczny przydzielony przez dostawcę internetu. Gdy kamera wysyła pakiet na adres publiczny, router

  1. zapisuje prywatny adres kamery wraz z portem i paruje go z tymczasowym własnym portem wychodzącym;

  2. przepisuje adres źródłowy pakietu na własny adres publiczny (a port źródłowy na wybrany port wychodzący);

  3. wysyła przepisany pakiet stroną publiczną.

Gdy odpowiedź wraca zaadresowana na publiczny adres i port routera, router odszukuje parowanie, przepisuje adres docelowy z powrotem na prywatny adres i port kamery oraz dostarcza go po stronie lokalnej. Kamera nigdy nie wie, że doszło do przepisania; serwer nigdy nie zna oryginalnego źródła.

To właśnie NAT sprawia, że sieci domowe są praktyczne. Ma on także dwie konsekwencje, o których warto wiedzieć.

9.7.3. Co zmienia NAT

Ruch wychodzący jest łatwy. Kamera w sieci prywatnej może swobodnie komunikować się na zewnątrz. Za każdym razem, gdy otwiera połączenie TCP lub wysyła pakiet UDP do zdalnego serwera, NAT automatycznie ustawia parowanie. Większość aplikacji kamerowych działa w tym kierunku: przechwyć obraz, wyślij go gdzieś na serwer, odbierz odpowiedź.

Ruch przychodzący jest trudny. Urządzenie w publicznym internecie nie może bezpośrednio połączyć się z kamerą w sieci prywatnej. Nie istnieje żadne parowanie, które router mógłby odszukać, gdy niezamówiony pakiet dociera na jego adres publiczny, więc pakiet nie ma dokąd trafić. Router albo go odrzuca, albo przekazuje usłudze działającej na samym routerze.

Powszechne są trzy obejścia dla przypadku ruchu przychodzącego, w mniej więcej rosnącej kolejności praktyczności:

  • Przekierowanie portów. Skonfiguruj router tak, aby kierował wszystkie pakiety przychodzące na wybranym porcie publicznym do konkretnego urządzenia prywatnego. Wymaga dostępu administracyjnego do routera; zawodne, gdy publiczny adres routera się zmienia.

  • VPN. Uruchom wirtualną sieć prywatną, która umieszcza kamerę w tej samej sieci logicznej co osoba, która potrzebuje do niej dotrzeć. Rozwiązanie ciężkie; poza zakresem dla większości wdrożeń kamerowych.

  • Połączenie inicjowane wychodzące. Kamera łączy się na zewnątrz ze znanym serwerem gdzieś w publicznym internecie i utrzymuje to połączenie otwarte; serwer wykorzystuje istniejące połączenie do odsyłania wiadomości z powrotem. Tak właśnie działają powiadomienia push i większość protokołów urządzeń podłączonych do chmury, i jest to wzorzec, który ostatecznie przyjmuje większość aplikacji kamerowych.

NAT jest niewidoczny dla kodu Python na kamerze. Skrypt po prostu komunikuje się z dowolnym adresem docelowym, którego potrzebuje; router obsługuje translację za kulisami. Ale kierunek połączenia ma znaczenie, i to właśnie NAT sprawia, że „kamera sięga do serwera chmurowego” jest znacznie łatwiejszym układem niż „serwer chmurowy sięga do kamery”.