Zakaj vaša aplikacija za iPhone prikazuje en IP, strežnik pa beleži drugega
Naslov vmesnika, končna točka socketa in vir, ki ga strežnik zabeleži, odgovarjajo na različna vprašanja. VPN doda kontekst; ne naredi iz njih ene številke.
Prihajajo zahtevki za podporo, ki pravijo, da aplikacija prikazuje en naslov, medtem ko je strežnik zabeležil drugega, in nato vprašajo, kateri od njiju laže. Nobeden; to sta dve opazovanji dveh različnih stvari. Naslov, vezan na vmesnik, naslov, vezan na socket, in izvorni naslov, ki ga vidi oddaljena storitev, odgovarjajo na tri ločena vprašanja. VPN doda telefonu omrežni kontekst in ne strne teh treh v eno številko za celotno napravo. Preberite imena polj v zahtevku, preden preberete naslove.
Kaj zahtevek običajno opisuje
Predstavljajte si telefon v omrežju Wi-Fi z dvignjenim tunelom. Vmesnik Wi-Fi ima naslov LAN, vmesnik tunela ima dodeljen notranji naslov, zahteva, ki gre skozi tunel, pa prispe do javne storitve iz vira, ki preživi kakršen koli prevod na poti. Aplikacija, ki izpiše notranji naslov, in strežnik, ki zabeleži prevedeni vir, oba poročata natančno, in ti dve vrednosti se ne bosta nikoli ujemali.
Tri opazovanja se razlikujejo po tem, kaj lahko dokažejo, ne le po tem, kaj opisujejo.
| 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 |
Imejte to tabelo ob kodi, ki te vrednosti vpiše v zahtevek, ker je večina zmede tukaj zamenjava stolpcev in ne omrežna napaka.
Na kaj lahko klic socket odgovori in na kaj ne
Na ravni API getsockname poroča o lokalni končni točki, ki je trenutno vezana na določen socket. Pri povezanem socketu je to vir, ki ga je jedro izbralo za to povezavo, kar je že bolj specifično kot kateri koli seznam vmesnikov. To ni iskanje javnega naslova, in klic nanj na nepovezanem socketu vam ne pove skoraj nič. Kar koli vrne, je lahko pozneje na poti prepisano, zato je le lastno opazovanje storitve verodostojno glede tega, kaj je storitev prejela.
Na platformah Apple ima stran vmesnikov ločeno površino: nastavitve tunela naštejejo naslove, dodeljene vmesniku tunela. Branje teh vam pove, kako je bil tunel konfiguriran, in vam ne pove, katero pot je ubrala določena zahteva, ker usmerjanje in pravila na aplikacijo to odločajo za vsako povezavo.
Razdeljeni tunel naredi razliko vidno. Ena zahteva lahko gre skozi tunel, medtem ko naslednja, usmerjena na drug cilj ali drugo družino naslovov, ne gre, zato sta lahko dva rezultata iste aplikacije nekaj sekund narazen iskrena in različna.
Izberite opazovanje, ki ustreza vprašanju
Izberite namerno, namesto da merite vse. Za tisto, kar vidi backend, beležite vir v backendu, in kjer spredaj stoji obratni proxy, berite naslov odjemalca iz glave za posredovanje, ki jo vaša namestitev dejansko nastavi, in ne iz česar koli, kar je poslal odjemalec.
Ali je tunel konfiguriran, preberite na vmesniku. Ali ga je promet te aplikacije uporabil, ugotovite tako, da pošljete promet iz te aplikacije na cilj, ki ga nadzorujete, in primerjate vir na obeh koncih.
Pravila na aplikacijo si zaslužijo svoj stavek. Rezultat brskalnika je dokaz o tem brskalniku, in upravljani tunel na aplikacijo lahko postavi dve aplikaciji na istem telefonu na različne poti v istem trenutku. Preverjanje pokritosti pomeni pošiljanje prometa iz zadevne aplikacije, v zadevni družini naslovov.
Imena vmesnikov niso detektor
Tudi imena vmesnika ne uporabljajte kot preverjanje VPN. Imena niso javna pogodba, in telefon ima lahko več priključkov, medtem ko samo eden od njih nosi vašo zahtevo.
Polje poimenujte po opazovanju, ki ga hrani. local_interface_address, socket_local_endpoint in service_observed_source so nerodni in nedvoumni, in nedvoumnost je tisto, kar želite, ko vrednost teden dni pozneje pristane v zahtevku za podporo. En stolpec z imenom device IP bo zbral vse tri in nato mu bodo zaupali, kot da je en.
Ohranite identiteto zunaj stolpca naslova
Skupni izhod VPN ni uporabniška identiteta, zasebni naslov pa ni poverilnica za dostop. Oba opisujeta pot in ne osebo, in obravnavanje katerega koli od njiju kot preverjanje pristnosti spremeni usmerjevalno nezgodo v odločitev o dovoljenju.
Ko nekdo vpraša, kateri naslov ima telefon, je koristen odgovor vprašanje, katera povezava in kateri opazovalec. Definicijo getsockname velja citirati za srednji primer, ker reši vprašanje socketa, ne da bi se pretvarjala, da rešuje drugi dve.
Nato zapišite, katero od treh mora vaš izdelek v resnici prikazovati, in druga dva izbrišite iz vmesnika.