9.7. Privata nätverk och NAT¶
IPv4 konstruerades med fyra miljarder adresser, vilket lät tillräckligt vid den tidpunkten. Det är det inte. Varje internetanslutet hem, kontor och fabrik behöver sitt eget block av adresser för sina interna enheter, och att lägga till världens samlade kameror, telefoner och hushållsapparater lämnar inte fyra miljarder kvar att fördela.
Lösningen som internet enades om är privata nätverk: de flesta enheter på ett lokalt nätverk använder adresser som inte är globalt unika utan endast unika inom det nätverket, och en enda enhet i kanten översätter mellan de två världarna. Kameran sitter, nästan alltid, på ett av dessa privata nätverk.
9.7.1. De privata adressintervallen¶
Tre IPv4-intervall är reserverade som icke routbara på det publika internet. Vilket lokalt nätverk som helst får fritt använda adresser från dessa intervall utan att samordna med någon, eftersom ingen router utanför det lokala nätverket någonsin kommer att försöka leverera till dem:
10.0.0.0–10.255.255.255(16 miljoner adresser; vanligt i större företagsnätverk).172.16.0.0–172.31.255.255(ungefär en miljon adresser; mindre vanligt i praktiken).192.168.0.0–192.168.255.255(65 tusen adresser; standardvalet för nästan varje hemmarouter).
På ett typiskt hemmanätverk sitter både kameran och den dator som kommunicerar med den på 192.168.x.x-adresser, eftersom det är det intervall som hemmaroutern väljer för det nätverk den är värd för.
9.7.1.1. Hur nätmasken används¶
Sidan IP-adresser introducerade /24-notationen. Anledningen till att den spelar roll här är att nätmasken är det som varje enhet använder för att avgöra vart ett paket måste skickas härnäst. Varje gång kameran skickar ett paket tillämpar den sin egen nätmask på destinationsadressen och tittar på resultatet:
Om destinationen delar nätverksbitarna med kamerans egen adress finns destinationen på samma lokala nätverk. Kameran skickar paketet direkt till den.
Om destinationen inte delar nätverksbitarna måste den finnas på något annat nätverk. Kameran skickar paketet till sin standardgateway (routern som konfigureras automatiskt vid uppkoppling) och låter gatewayen sköta resten.
Det enda testet – ”delar vi nätverksbitar?” – är vad nätmasken är till för. Det är också anledningen till att hemmanätverk har /24 som standard: en gräns på 254 enheter rymmer ett hushåll bekvämt och håller nätverket enkelt.
9.7.2. Network Address Translation¶
En kamera på 192.168.1.50 kan inte bara skicka ett paket till en server på det publika internet – det publika internet routar inte till 192.168.x.x. Hemmaroutern löser detta med Network Address Translation, eller NAT, och den gör det transparent.
NAT skriver om källadressen på utgående paket till routerns publika adress och vänder omskrivningen på inkommande svar, så att privata enheter framstår som om de delar en enda publik adress.¶
Routern har två adresser: en privat på det lokala nätverket (vanligen 192.168.1.1) och en publik som tilldelas av internetleverantören. När kameran skickar ett paket till en publik adress gör routern följande
registrerar kamerans privata adress + port och parar ihop den med en tillfällig utgående port av sin egen;
skriver om källadressen på paketet till sin egen publika adress (och källporten till den valda utgående porten);
skickar ut det omskrivna paketet på den publika sidan.
När svaret kommer tillbaka adresserat till routerns publika adress + port slår routern upp parningen, skriver om destinationen tillbaka till kamerans privata adress + port och levererar det på den lokala sidan. Kameran får aldrig veta att omskrivningen skedde; servern får aldrig veta den ursprungliga källan.
NAT är det som gör hemmanätverk praktiskt genomförbara. Det har också två konsekvenser som är värda att känna till.
9.7.3. Vad NAT förändrar¶
Utgående är enkelt. En kamera på ett privat nätverk kan kommunicera utåt fritt. Varje gång den öppnar en TCP-anslutning eller skickar ett UDP-paket till en fjärrserver upprättar NAT parningen automatiskt. De flesta kameraapplikationer fungerar i denna riktning: ta en bild, skicka den till en server någonstans, ta emot svaret.
Inkommande är svårt. En enhet på det publika internet kan inte ansluta direkt till en kamera på ett privat nätverk. Det finns ingen parning för routern att slå upp när ett oönskat paket anländer till dess publika adress, så paketet har ingenstans att ta vägen. Routern antingen kastar det eller lämnar det till en tjänst som körs på routern själv.
Tre lösningar för det inkommande fallet är vanliga, i ungefär stigande ordning efter praktisk användbarhet:
Portvidarebefordran. Konfigurera routern att dirigera alla inkommande paket på en vald publik port till en specifik privat enhet. Kräver administratörsåtkomst till routern; skört när routerns publika adress ändras.
VPN. Kör ett virtuellt privat nätverk som placerar kameran på samma logiska nätverk som den som behöver nå den. Tungrott; utanför omfånget för de flesta kameradistributioner.
Utgående-initierad anslutning. Kameran ansluter utåt till en känd server någonstans på det publika internet och håller den anslutningen öppen; servern använder den befintliga anslutningen för att skicka meddelanden tillbaka. Så här fungerar pushnotiser och de flesta molnanslutna enhetsprotokoll, och det är det mönster som de flesta kameraapplikationer slutligen använder.
NAT är osynligt för Python-koden på kameran. Skriptet kommunicerar bara med vilken destination det än behöver; routern sköter översättningen bakom kulisserna. Men riktningen på anslutningen spelar roll, och NAT är anledningen till att ”kameran sträcker sig ut till en molnserver” är en mycket enklare form än ”en molnserver sträcker sig in till kameran”.