Telefonappen og fjernserveren begynner med forskjellige fakta, og ingen av dem kan låne den andres. Appen kan spørre operativsystemet om nettverket den bruker, mens serveren bare vet hva som kommer inn over forbindelsen. Kjører du ditt eget endepunkt, skrives det andre om, og det første forblir urørt. Hvilket av dem som svarer på spørsmålet ditt, avhenger av spørsmålet selv.

To observasjonspunkter, to slags bevis

Lokale bevis beskriver enheten. De dekker grensesnittet som bærer trafikken, transporten plattformen rapporterer, og det den kallende appen har lov til å spørre om. Fjernbevis beskriver forbindelsen: kildeadresse, protokoll, tidspunkt og alt appen velger å sende. Ingen observasjonspunkt er en overmengde av det andre.

Å blande de to gir påstander som høres presise ut og ikke kan kontrolleres. Et merke beviser noe om et nettobjekt på enheten, ikke om hvordan en ekstern tjeneste klassifiserer forespørselen.

Før du argumenterer om gjenkjenning, skriv ned hvilket punkt spørsmålet gjelder. Er spørsmålet om en bestemt app kan se at en tunnel er aktiv, eller om en tjeneste kan slutte hvor forespørselen kom fra? Det er separate undersøkelser, og et svar på det ene sier ingenting om det andre.

Hva et lokalt plattformgrensesnitt kan rapportere

Android tilbyr et bestemt merke. Objektet NetworkCapabilities kan rapportere TRANSPORT_VPN, og hasTransport tester om den transporten er til stede på objektet. Appen henter objektet fra tilkoblingstjenesten og leser det, underlagt tillatelse for nettverkstilstand.

Resultatet er lokal plattforminformasjon, ikke et oppslag i en leverandørs adresseområder. Det beskriver nettverket den kallende appen bruker.

To grenser betyr noe. En splitt-tunnel-regel som utelukker en app, kan gi et annet svar på samme telefon enn det en kollega ser, fordi appen kan være bundet et annet sted. Merket finnes også fordi operativsystemet modellerer VPN-grensesnitt, ikke fordi en bestemt app samler det inn. Om en app leser feltet, videresender det eller ignorerer det, er en egenskap ved den appen. Manifestet og dokumentasjonen er de eneste pålitelige kildene til det spørsmålet.

adb shell dumpsys connectivity | grep -i -m5 vpn

Hva en ekstern tjeneste kan se

En server ser kildeadressen til forbindelsen, transporten og tidspunktet, og den kan berike adressen med register- eller rutingsdata. Den kan også motta alt appen sender, inkludert posisjon når appen ber om det og brukeren samtykker. De kanalene er atskilt, og bare én ligner på et adresseoppslag.

En adresse registrert hos en hostingleverandør antyder en tunnel, mens en registrert på et bolignett antyder en hjemmeforbindelse. Begge er statistiske hint, ikke fakta om enheten.

En boligadresse plasserer ikke personen på den adressen, og en hostingadresse navngir verken operatøren eller landet. En tjeneste som behandler slutningen som sikkerhet, vil noen ganger ta feil uten å kunne oppdage det. Hvis kravet er pålitelighet framfor en heuristikk, kan adressedata ikke levere det, og et design som sier det, er ærligere enn et som skjuler gjetningen.

BevisHva det svarer påHva det ikke kan vise
Lokalt transportmerkeOm dette nettobjektet er en VPNHvem som driver utgangen, eller hvor enheten er
Ekstern kildeadresseHvilken adresse som nådde tjenestenOm enheten også bærer en tunnel
ApplikasjonsdataHva appen valgte å sendeAlt appen ikke sendte

Hvorfor en selvhostet utgang bare endrer den ene siden

Å kjøre ditt eget endepunkt endrer kildeadressen en ekstern tjeneste ser, noe som kan flytte den utenfor områdene den tjenesten forbinder med kommersielle leverandører. Det endrer ingenting i den lokale nettmodellen, fordi tunnelen forblir en tunnel og operativsystemet fortsatt rapporterer den.

Den ene siden av bevisene flytter seg, den andre står fast. Gapet mellom dem er der forventningene brister.

En nettleser er et tredje tilfelle med egne grensesnitt og begrensninger. Nettinnhold kan ikke lese et nativt kapasitetsobjekt, og å behandle en mobil operativsystemfunksjon som tilgjengelig for en nettside er en kategorifeil. Hvis spørsmålet gjelder et nettsted, undersøk hva et nettsted faktisk kan få, i stedet for å translitterere et plattform-API.

Avgjør med spørsmålet du stiller

Hvis spørsmålet er om en bestemt app kan observere tunnelens tilstand, er plattformgrensesnittet det rette stedet å se, og svaret ligger i den appens kode og tillatelser. Hvis spørsmålet er hva en tjeneste kan slutte, er tilkoblingsmetadata beviset. Et juridisk eller kontraktsmessig spørsmål avgjøres av ingen av dem.

Navngi spørsmålet i én setning før du samler inn noe. Den setningen avgjør hvilket observasjonspunkt som betyr noe, og holder undersøkelsen fra å gli over i en annen diskusjon.

Merk hver observasjon med kilden når du rapporterer den, fordi en umerket påstand ikke kan gjennomgås. Et lokalt merke og en adresseslutning er begge nyttige, og ingen av dem er avgjørende, derfor er det en feil å smelte dem sammen til én dom.

Når en tjeneste avviser en autorisert forbindelse, bruk dens støttede gjennomgangsvei i stedet for å endre en lokal innstilling for å skjule et signal. Å fjerne én observasjon beviser aldri at de andre forsvant.

Relaterte artikler