Zašto vaša iPhone aplikacija prikazuje jedan IP, a poslužitelj bilježi drugi
Adresa sučelja, krajnja točka socketa i izvor koji poslužitelj bilježi odgovaraju na različita pitanja. VPN dodaje kontekst; ne pravi od njih jedan broj.
U podršku dolaze tiketi u kojima piše da aplikacija prikazuje jednu adresu dok je server zabilježio drugu, a zatim pitaju koja laže. Nije nijedna; to su dva opažanja dvije različite stvari. Adresa vezana za interfejs, adresa vezana za socket i izvorna adresa koju vidi udaljena usluga odgovaraju na tri odvojena pitanja. VPN dodaje mrežni kontekst telefonu i ne sažima te tri u jedan broj na razini uređaja. Pročitajte nazive polja u tiketu prije nego što pročitate adrese.
Šta tiket obično opisuje
Zamislite telefon na Wi-Fi mreži s podignutim tunelom. Wi-Fi interfejs drži LAN adresu, interfejs tunela drži dodijeljenu unutrašnju adresu, a zahtjev koji izlazi kroz tunel stiže do javne usluge s kojim god izvorom preživi bilo kakvo prevođenje na putu. Aplikacija koja ispisuje unutrašnju adresu i server koji bilježi prevedeni izvor oboje izvještavaju tačno, i te dvije vrijednosti nikada se neće poklopiti.
Tri opažanja razlikuju se po tome šta mogu dokazati, a ne samo po tome šta opisuju.
| 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 |
Držite tu tabelu uz kod koji te vrijednosti upisuje u tiket, jer je većina zabune ovdje zamjena kolona, a ne mrežna greška.
Na šta poziv socket-a može i ne može odgovoriti
Na razini API-ja getsockname prijavljuje lokalnu krajnju tačku koja je trenutno vezana za određeni socket. Za povezani socket to je izvor koji je jezgro odabralo za tu vezu, što je već konkretnije od bilo kojeg popisa interfejsa. To nije traženje javne adrese, a pozivanje na nepovezanom socketu ne kaže vam gotovo ništa. Šta god vrati, to može biti prepisano kasnije na putu, pa je samo vlastito opažanje usluge mjerodavno za ono što je usluga primila.
Na Apple platformama strana interfejsa ima odvojenu površinu: postavke tunela navode adrese dodijeljene interfejsu tunela. Čitanje njih kaže kako je tunel konfigurisan i ne kaže koji je put pojedini zahtjev prešao, jer usmjeravanje i pravila po aplikacijama odlučuju o tome za svaku vezu.
Podijeljeni tunel čini razliku vidljivom. Jedan zahtjev može izaći kroz tunel, a sljedeći, usmjeren na drugu destinaciju ili porodicu adresa, ne mora, pa dva rezultata iste aplikacije u razmaku od sekundi mogu biti iskrena i različita.
Odaberite opažanje koje odgovara pitanju
Birajte namjerno umjesto da instrumentirate sve. Za ono što backend vidi, bilježite izvor na backendu, a kad je naprijed obrnuti proxy, čitajte adresu klijenta iz zaglavlja za prosljeđivanje koje vaša implementacija zaista postavlja, a ne iz bilo čega što je klijent poslao.
Za to je li tunel konfigurisan, čitajte interfejs. Za to je li ga saobraćaj ove aplikacije koristio, pošaljite saobraćaj iz te aplikacije na destinaciju koju kontrolišete i uporedite izvor na oba kraja.
Pravila po aplikacijama zaslužuju svoju rečenicu. Rezultat preglednika dokaz je o tom pregledniku, a upravljani tunel po aplikacijama može staviti dvije aplikacije na istom telefonu na različite puteve u istom trenutku. Provjera pokrivenosti znači slanje saobraćaja iz dotične aplikacije, u dotičnoj porodici adresa.
Nazivi interfejsa nisu detektor
Ne koristite naziv interfejsa ni kao provjeru VPN-a. Nazivi nisu javni ugovor, a telefon može držati nekoliko priključaka dok samo jedan od njih nosi vaš zahtjev.
Nazovite polje po opažanju koje drži. local_interface_address, socket_local_endpoint i service_observed_source su nespretni i nedvosmisleni, a nedvosmislenost je ono što želite kad vrijednost nedjelju dana kasnije završi u tiketu podrške. Jedan stupac nazvan device IP skupit će sva tri i onda mu se vjerovati kao jednome.
Držite identitet izvan stupca adrese
Zajednički VPN izlaz nije korisnički identitet, a privatna adresa nije pristupna vjerodajnica. Oboje opisuju put, a ne osobu, i tretiranje bilo čega od toga kao autentifikacije pretvara usputnu nesreću usmjeravanja u odluku o ovlaštenju.
Kad neko pita koju adresu telefon ima, koristan odgovor je pitanje o tome koja veza i koji posmatrač. Definiciju getsockname vrijedi citirati za srednji slučaj, jer rješava pitanje socket-a bez pretvaranja da rješava druga dva.
Zatim zapišite koju od tri vaš proizvod zaista treba prikazivati, i izbrišite druge dvije iz interfejsa.