Waarom jou iPhone-app een IP wys en die bediener 'n ander een aanteken
'n Koppelvlakadres, 'n sok-eindpunt en die bron wat 'n bediener aanteken, beantwoord verskillende vrae. 'n VPN voeg konteks by; dit maak hulle nie een nommer nie.
Daar kom ondersteuningskaartjies wat sê die app wys een adres terwyl die bediener 'n ander een aangeteken het, en dan vra watter een lieg. Nie een van hulle nie; dit is twee waarnemings van twee verskillende dinge. 'n Adres wat aan 'n koppelvlak gebind is, 'n adres wat aan 'n sok gebind is, en 'n bronadres wat 'n afgeleë diens sien, beantwoord drie afsonderlike vrae. 'n VPN voeg 'n netwerkkonteks by die selfoon en verval nie daardie drie tot een toestelwye nommer nie. Lees die veldname in die kaartjie voordat jy die adresse lees.
Wat die kaartjie gewoonlik beskryf
Stel jou 'n selfoon op Wi-Fi voor met 'n tonnel wat op is. Die Wi-Fi-koppelvlak hou 'n LAN-adres, die tonnelkoppelvlak hou 'n toegewysde binne-adres, en 'n versoek wat deur die tonnel uitgaan, kom by 'n publieke diens aan met watter bron ook al enige vertaling op die pad oorleef. 'n App wat die binne-adres druk en 'n bediener wat die vertaalde bron aanteken, rapporteer albei akkuraat, en die twee waardes sal nooit ooreenstem nie.
Die drie waarnemings verskil in wat hulle kan bewys, nie net in wat hulle beskryf nie.
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any other interface on the phone |
Hou daardie tabel by die kode wat hierdie waardes in 'n kaartjie invul, want die meeste verwarring hier is 'n kolomverwarring eerder as 'n netwerkfout.
Wat 'n sok-oproep kan antwoord en wat nie
Op API-vlak rapporteer getsockname die plaaslike eindpunt wat tans aan 'n spesifieke sok gebind is. Vir 'n gekoppelde sok is dit die bron wat die kern vir daardie verbinding gekies het, wat alreeds meer spesifiek is as enige koppelvlaklys. Dit is nie 'n opsoek van 'n publieke adres nie, en om dit op 'n ongebonde sok te roep, sê jou amper niks. Wat dit ook al teruggee, kan later in die pad herskryf word, so net die diens se eie waarneming is gesaghebbend oor wat die diens ontvang het.
Op Apple-platforms het die koppelvlakkant 'n aparte oppervlak: tonnelinstellings lys die adresse wat aan die tonnelkoppelvlak toegewys is. Om dit te lees, sê jou hoe die tonnel opgestel is, en dit sê jou nie watter pad 'n gegewe versoek gevolg het nie, want roetering en per-app-reëls besluit dit per verbinding.
Gesplete tonneling maak die gaping sigbaar. Een versoek kan deur die tonnel uitgaan terwyl die volgende, gemik op 'n ander bestemming of adresfamilie, dit nie doen nie, so twee resultate van dieselfde app sekondes uitmekaar kan eerlik en verskillend wees.
Kies die waarneming wat by die vraag pas
Kies doelbewus eerder as om alles te instrumenteer. Vir wat die backend sien, teken die bron by die backend aan, en waar 'n omgekeerde proxy voor sit, lees die kliëntadres uit die deurstuur-kop wat jou ontplooiing werklik stel eerder as uit enigiets wat die kliënt gestuur het.
Vir of die tonnel opgestel is, lees die koppelvlak. Vir of hierdie app se verkeer dit gebruik het, stuur verkeer van daardie app na 'n bestemming wat jy beheer en vergelyk die bron aan beide kante.
Per-app-reëls verdien hulle eie sin. 'n Blaaierresultaat is bewys oor daardie blaaier, en 'n bestuurde per-app-tonnel kan twee apps op dieselfde selfoon op dieselfde oomblik op verskillende paaie plaas. Om dekking te verifieer beteken om verkeer van die betrokke app te stuur, in die betrokke adresfamilie.
Koppelvlakname is nie 'n detektor nie
Moet ook nie 'n koppelvlaknaam as 'n VPN-kontrole gebruik nie. Die name is nie 'n publieke kontrak nie, en 'n selfoon kan verskeie aanhegsels hê terwyl net een van hulle jou versoek dra.
Noem die veld na die waarneming wat dit hou. local_interface_address, socket_local_endpoint en service_observed_source is lomp en ondubbelsinnig, en ondubbelsinnig is wat jy wil hê wanneer die waarde 'n week later in 'n ondersteuningskaartjie beland. 'n Enkele kolom met die naam toestel-IP sal al drie versamel en dan vertrou word asof dit een is.
Hou identiteit uit die adreskolom
'n Gedeelde VPN-uitgang is nie 'n gebruikeridentiteit nie, en 'n private adres is nie 'n toegangsbewys nie. Albei beskryf 'n pad eerder as 'n persoon, en om enigeen as verifikasie te behandel, maak 'n roeteringsongeluk 'n magtigingsbesluit.
Wanneer iemand vra watter adres die selfoon het, is die nuttige antwoord 'n vraag oor watter verbinding en watter waarnemer. Die getsockname-definisie is die moeite werd om vir die middelgeval aan te haal, want dit besleg die sokvraag sonder om voor te gee dat dit die ander twee besleg.
Skryf dan neer watter van die drie jou produk werklik moet wys, en verwyder die ander twee uit die koppelvlak.