Det behøver ikke være så underligt at app'en kan uden portforwarding.
Som udgangspunkt lukker en forbrugerrouter af for samtlige porte udefra, mens den som udgangspunkt lader klienter indefra åbne alle de porte de har lyst til, dog kun midlertidigt.
Eksempel:
Lad os sige din routers eksterne ipnummer er 200.10.20.30 og internt hedder den 192.168.1.1.
På dit interne net har du en pc der hedder 192.168.1.22.
På din pc åbner du en browser og vil gerne hente et tv program fra dr.dk. Din pc laver en pakke der i grove træk ser således ud:
Modtager: dr.dk:80 (fordi port 80 normalt er til websider) Afsender: 192.168.1.22:50017 (hvor 50017 er et dynamisk portnummer valgt "tilfældigt" af din pc)
Din pc ved ikke lige hvor dr.dk bor, det er ikke en lokal computer, så den giver pakken til din router og siger "Den må du lige hitte ud af".
Din router kigger på modtageradressen og siger "Hmm, den adresse er ikke her hos mig" og sender den videre til ISP'en med et "Den må du lige hitte ud af". Samtidigt retter den lige i adresselabelen så der nu står:
Modtager: dr.dk:80 Afsender 200.10.20.30:50017
Grunden er, at 192.168.1.22 er en lokal adresse der ikke kan routes på internettet. Din router låner sit eksterne ip nummer ud til din pc midlertidigt.
ISP'en kigger i en router tabel for at finde en god rute til dr.dk og sender den i en passende retning gennem skyen.
På et tidspunkt når pakken frem til DR's webserver, hvorefter webserveren laver en fin html side med et tv program og pakker den ind i en pakke med addresselabel:
Modtager 200.10.20.30:50017 Afsender dr.dk:80
DR's router sender pakken videre til DR's ISP og ISP'en finder en god route gennem skyen hen til 200.10.20.30 (som er dig).
Din router modtager pakken til 200.10.20.30:50017 fra dr.dk:80, kigger i sin liste over udgående forbindelser og ser at det faktisk var 192.168.1.22:50017 der bad om det tv program, så den omdøber adresselabelen til:
Fra: dr.dk:80 Til : 192.168.1.22:50017
..og sender den til din pc.
Din pc tager imod pakken og bruger portnummer 50017 til at afgøre at det var din browser der skulle bruge svaret.
Pointen med portnumrene er at holde styr på hvilken applikation der ønskede data, så hvis du åbner fx. 4 browservinduer, et skype opkald og har gang i et download, så sørger din pc for at bruge forskellige dynamiske porte til hver forbindelse, sådan at når der kommer data retur ved den hvem der skal have hvad - så slipper du for at modtage din tv oversigt midt i din youtube stream og den slags.
I bund og grund ganske smart.
Din router laver en liste over hvilke ipnumre og porte på dit private netværk der laver kontakt til hvem på ydersiden, fx:
"192.168.1.22:50017 fik lov at låne 200.10.20.30:50017 for at kontakte dr.dk:80, så hvis der kommer noget retur fra dr.dk:80 til 200.10.20.30:50017 lader jeg det komme ind og giver det til 192.168.1.22:50017"
Hvis der kommer trafik udefra der ikke står på listen, så bliver det ikke lukket ind - altså, det er okay at portvagten lukker tømrer Mortensen ind fordi han kan se at Hr. Jørgensen på tredie har ringet efter ham, men andre der ikke står på listen får ikke lov at komme ind.
Hvis du nu sætter noget webserversoftware op på en pc der hedder 192.168.1.50 kan du lave en permanent portforwarding i din router, så hvis den modtager pakker til 200.10.20.30:80 udefra skal de altid hen til 192.168.1.50:80 - så kan folk udefra komme til din webserver døgnet rundt, også uden at du har ringet efter dem i forvejen - det var det du brugte for at komme til kameraboksens webside udefra. Du kan ikke have to services på samme port, for hvordan kan din router vide om folk udefra vil have fat i kameraboksen eller routerens konfigurationsside når de tager fra i 200.10.20.30:80 - det var derfor jeg foreslog at bruge fx. :81 til kameraboksen.
Hvorfor kan den der android app så få adgang udefra uden der er sat port forward op? Ja, det burde den jo egentlig ikke kunne, jævnfør den forklaring jeg lige har lavet, men jeg tror at softwaren i kameraboksen er sat til at ringe hjem til producentens server med korte mellemrum - det skaber en forbindelse indefra og ud og giver android appen mulighed for at lægge en besked på producentens server om at den gerne vil "ringes op".
Håber det gav mening.
|