9.7. Yksityiset verkot ja NAT

IPv4 suunniteltiin neljälle miljardille osoitteelle, mikä kuulosti tuolloin riittävältä. Niin ei ole. Jokainen internetiin kytketty koti, toimisto ja tehdas tarvitsee oman osoitelohkonsa sisäisille laitteilleen, ja kun mukaan lasketaan maailman kaikki kamerat, puhelimet ja kodinkoneet, neljä miljardia ei riitä jaettavaksi.

Internetin omaksuma kiertotie on yksityiset verkot: useimmat paikallisverkon laitteet käyttävät osoitteita, jotka eivät ole maailmanlaajuisesti yksilöllisiä vaan ainoastaan kyseisen verkon sisällä, ja yksi laite verkon reunalla kääntää näiden kahden maailman välillä. Kamera sijaitsee lähes aina jossakin tällaisessa yksityisessä verkossa.

9.7.1. Yksityiset osoitealueet

Kolme IPv4-aluetta on varattu ei-reititettäviksi julkisessa internetissä. Mikä tahansa paikallisverkko saa vapaasti käyttää näiden alueiden sisäisiä osoitteita ilman koordinointia kenenkään kanssa, koska mikään paikallisverkon ulkopuolinen reititin ei koskaan yritä toimittaa niihin paketteja:

  • 10.0.0.010.255.255.255 (16 miljoonaa osoitetta; yleinen suuremmissa yritysverkoissa).

  • 172.16.0.0172.31.255.255 (noin miljoona osoitetta; harvinaisempi käytännössä).

  • 192.168.0.0192.168.255.255 (65 tuhatta osoitetta; oletus lähes jokaisessa kotireitittimessä).

Tyypillisessä kotiverkossa sekä kamera että siihen yhteyttä pitävä kannettava tietokone sijaitsevat molemmat 192.168.x.x-osoitteissa, koska se on alue, jonka kotireititin valitsee isännöimälleen verkolle.

9.7.1.1. Miten verkkomaskia käytetään

Sivulla IP-osoitteet esiteltiin /24-merkintätapa. Syy sen merkitykseen tässä on se, että verkkomaski on se, jonka avulla jokainen laite päättää, minne paketin täytyy mennä seuraavaksi. Joka kerta kun kamera lähettää paketin, se soveltaa omaa verkkomaskiaan kohdeosoitteeseen ja tarkastelee tulosta:

  • Jos kohde jakaa verkko-osan bitit kameran oman osoitteen kanssa, kohde on samassa paikallisverkossa. Kamera lähettää paketin sille suoraan.

  • Jos kohde ei jaa verkko-osan bittejä, sen täytyy olla jossakin toisessa verkossa. Kamera lähettää paketin oletusyhdyskäytävälleen (reititin, joka määritetään automaattisesti yhteyden muodostuessa) ja antaa yhdyskäytävän hoitaa loput.

Tuo yksittäinen testi – ”jaammeko verkko-osan bitit?” – on se, mitä varten verkkomaski on olemassa. Se on myös syy siihen, miksi kotiverkot käyttävät oletuksena /24-maskia: 254 laitteen yläraja sopii kotitalouteen mukavasti ja pitää verkon yksinkertaisena.

9.7.2. Network Address Translation

Kamera osoitteessa 192.168.1.50 ei voi vain lähettää pakettia julkisessa internetissä olevalle palvelimelle – julkinen internet ei reititä osoitteisiin 192.168.x.x. Kotireititin ratkaisee tämän Network Address Translationin, eli NAT:n, avulla, ja se tekee sen läpinäkyvästi.

Kaavio kolmella lohkolla. Vasemmalla kaksi laitetta yksityisverkossa, merkitty "kamera 192.168.1.50" ja "kannettava 192.168.1.51", molemmat kytkettyinä keskellä olevaan laatikkoon, joka on merkitty "reititin". Reitittimellä on kaksi puolta -- yksityinen puoli merkitty "192.168.1.1" laitteita kohti, ja julkinen puoli merkitty "203.0.113.5" internetiä kohti. Internet on piirretty pilvenä oikealle. Nuolet laitteista kulkevat reitittimen läpi ja tulevat ulos ikään kuin julkisesta osoitteesta.

NAT kirjoittaa uudelleen lähtevien pakettien lähdeosoitteen reitittimen julkiseksi osoitteeksi ja peruuttaa uudelleenkirjoituksen saapuvissa vastauksissa, joten yksityiset laitteet näyttävät jakavan yhden julkisen osoitteen.

Reitittimellä on kaksi osoitetta: yksityinen paikallisverkossa (yleensä 192.168.1.1) ja internetpalveluntarjoajan myöntämä julkinen osoite. Kun kamera lähettää paketin julkiseen osoitteeseen, reititin

  1. kirjaa kameran yksityisen osoitteen ja portin ja parittaa ne oman tilapäisen lähtevän porttinsa kanssa;

  2. kirjoittaa paketin lähdeosoitteen uudelleen omaksi julkiseksi osoitteekseen (ja lähdeportin valituksi lähteväksi portiksi);

  3. lähettää uudelleenkirjoitetun paketin ulos julkista puolta pitkin.

Kun vastaus palaa osoitettuna reitittimen julkiseen osoitteeseen ja porttiin, reititin etsii parituksen, kirjoittaa kohteen takaisin kameran yksityiseksi osoitteeksi ja portiksi ja toimittaa sen paikallispuolelle. Kamera ei koskaan tiedä uudelleenkirjoituksen tapahtuneen; palvelin ei koskaan tiedä alkuperäistä lähdettä.

NAT on se, mikä tekee kotiverkoista käytännöllisiä. Sillä on myös kaksi seurausta, jotka kannattaa tietää.

9.7.3. Mitä NAT muuttaa

Lähtevä on helppoa. Yksityisverkossa oleva kamera voi keskustella vapaasti ulospäin. Aina kun se avaa TCP-yhteyden tai lähettää UDP-paketin etäpalvelimelle, NAT muodostaa parituksen automaattisesti. Useimmat kamerasovellukset toimivat tähän suuntaan: ota kuva, työnnä se jollekin palvelimelle, vastaanota vastaus.

Saapuva on vaikeaa. Julkisessa internetissä oleva laite ei voi muodostaa suoraa yhteyttä yksityisverkossa olevaan kameraan. Reitittimellä ei ole parikkia, jota etsiä, kun pyytämätön paketti saapuu sen julkiseen osoitteeseen, joten paketilla ei ole minne mennä. Reititin joko hylkää sen tai luovuttaa sen itse reitittimellä toimivalle palvelulle.

Saapuvaan tapaukseen on kolme yleistä kiertotietä, suunnilleen kasvavassa käytännöllisyysjärjestyksessä:

  • Porttiohjaus. Määritä reititin ohjaamaan kaikki valitulle julkiselle portille saapuvat paketit tietylle yksityiselle laitteelle. Vaatii järjestelmänvalvojan käyttöoikeuden reitittimeen; hauras, kun reitittimen julkinen osoite muuttuu.

  • VPN. Käytä virtuaalista yksityisverkkoa, joka asettaa kameran samaan loogiseen verkkoon kuin se, jonka täytyy päästä siihen käsiksi. Raskas; useimpien kameratoteutusten ulkopuolella.

  • Lähtevästä aloitettu yhteys. Kamera muodostaa yhteyden ulospäin tunnettuun palvelimeen jossakin julkisessa internetissä ja pitää yhteyden auki; palvelin käyttää olemassa olevaa yhteyttä viestien työntämiseen takaisin. Näin push-ilmoitukset ja useimmat pilviyhteyttä käyttävät laiteprotokollat toimivat, ja se on malli, jota useimmat kamerasovellukset päätyvät käyttämään.

NAT on näkymätön kameran Python-koodille. Skripti vain keskustelee minkä tahansa tarvitsemansa kohteen kanssa; reititin hoitaa kääntämisen kulissien takana. Mutta yhteyden suunnalla on merkitystä, ja NAT on syy siihen, miksi ”kamera ottaa yhteyttä pilvipalvelimeen” on paljon helpompi muoto kuin ”pilvipalvelin ottaa yhteyttä kameraan”.