Proč vaše aplikace pro iPhone ukazuje jednu IP a server zaznamenává jinou
Adresa rozhraní, koncový bod socketu a zdroj, který server zaznamenává, odpovídají na různé otázky. VPN přidává kontext; nedělá z nich jedno číslo.
Do podpory chodí tikety, že aplikace ukazuje jednu adresu, zatímco server zaznamenal jinou, a pak se ptají, která z nich lže. Nelže ani jedna; jsou to dvě pozorování dvou různých věcí. Adresa vázaná na rozhraní, adresa vázaná na socket a zdrojová adresa, kterou vidí vzdálená služba, odpovídají na tři oddělené otázky. VPN přidává telefonu síťový kontext a neslévá ty tři do jednoho čísla pro celé zařízení. Přečtěte si názvy polí v tiketu dřív, než přečtete adresy.
Co tiket obvykle popisuje
Představte si telefon na Wi-Fi se zvednutým tunelem. Rozhraní Wi-Fi drží LAN adresu, rozhraní tunelu drží přidělenou vnitřní adresu a požadavek, který vyjde tunelem, dorazí do veřejné služby s jakýmkoli zdrojem, který přežije případný překlad na cestě. Aplikace, která vypisuje vnitřní adresu, a server, který zaznamenává přeložený zdroj, obě hlásí přesně, a ty dvě hodnoty se nikdy nesejdou.
Tři pozorování se liší v tom, co mohou prokázat, ne jen v tom, co popisují.
| 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 |
Mějte tu tabulku u kódu, který tyto hodnoty plní do tiketu, protože většina zmatku je tu záměna sloupců, ne síťová závada.
Na co volání socketu odpoví a na co ne
Na úrovni API getsockname hlásí místní koncový bod, který je právě vázán k určitému socketu. U připojeného socketu je to zdroj, který jádro pro to spojení vybralo, což je už konkrétnější než jakýkoli seznam rozhraní. Není to hledání veřejné adresy a volání na nepřipojeném socketu vám neřekne téměř nic. Cokoli vrátí, může být později na cestě přepsáno, takže o tom, co služba přijala, je směrodatné jen její vlastní pozorování.
Na platformách Apple má strana rozhraní samostatný povrch: nastavení tunelu vypisuje adresy přidělené rozhraní tunelu. Jejich čtení vám řekne, jak byl tunel nakonfigurován, a neřekne, kterou cestou se daný požadavek vydal, protože směrování a pravidla pro jednotlivé aplikace to rozhodují pro každé spojení.
Rozdělený tunel mezeru zviditelní. Jeden požadavek může vyjít tunelem, zatímco následující, mířící na jiné cílové místo nebo rodinu adres, ne, takže dva výsledky téže aplikace pár sekund od sebe mohou být poctivé a různé.
Vyberte pozorování, které odpovídá otázce
Vybírejte záměrně, místo abyste instrumentovali všechno. Pro to, co vidí backend, zaznamenávejte zdroj na backendu, a kde vpředu stojí reverzní proxy, čtěte adresu klienta z předávací hlavičky, kterou vaše nasazení skutečně nastavuje, a ne z čehokoli, co poslal klient.
Zda je tunel nakonfigurován, zjistíte z rozhraní. Zda jej provoz této aplikace použil, zjistíte tak, že z té aplikace pošlete provoz na cíl, který ovládáte, a porovnáte zdroj na obou koncích.
Pravidla pro jednotlivé aplikace si zaslouží vlastní větu. Výsledek prohlížeče je důkaz o tom prohlížeči a spravovaný tunel pro jednotlivé aplikace může postavit dvě aplikace na stejném telefonu na různé cesty ve stejný okamžik. Ověření pokrytí znamená poslat provoz z dotyčné aplikace, v dotyčné rodině adres.
Názvy rozhraní nejsou detektor
Nepoužívejte název rozhraní ani jako kontrolu VPN. Názvy nejsou veřejná smlouva a telefon může mít několik připojení, zatímco jen jedno z nich nese váš požadavek.
Pojmenujte pole podle pozorování, které drží. local_interface_address, socket_local_endpoint a service_observed_source jsou neohrabané a jednoznačné, a jednoznačnost je to, co chcete, když hodnota o týden později skončí v tiketu podpory. Jeden sloupec nazvaný device IP posbírá všechny tři a pak se mu bude věřit jako jednomu.
Držte identitu mimo sloupec adresy
Sdílený výstup VPN není identita uživatele a soukromá adresa není přístupový údaj. Obě popisují cestu, ne člověka, a zacházení s kteroukoli z nich jako s autentizací mění směrovací náhodu v rozhodnutí o oprávnění.
Když se někdo ptá, jakou adresu telefon má, užitečná odpověď je otázka, které spojení a který pozorovatel. Definici getsockname stojí za to citovat pro prostřední případ, protože řeší otázku socketu, aniž by předstírala, že řeší ty dvě ostatní.
Pak si zapište, kterou ze tří má váš produkt skutečně zobrazovat, a ostatní dvě z rozhraní smažte.