Opýtajte sa aplikácie pre iOS, či je telefón na VPN, a úprimná odpoveď je, že to nemôže vedieť tak, ako to myslíte. SDK neponúka žiadny príznak pre «zariadenie je v tuneli» a súkromné rozhrania, ktoré by sa k tomu mohli priblížiť, sú pre publikované aplikácie uzavreté. Môžete pozorovať vlastnú konfiguráciu aplikácie, stav, ktorý je k nej pripojený, a jeden či dva nepriame náznaky zo sieťového zásobníka. Každý odpovedá na inú otázku a väčšina pokazených kontrol vzniká tým, že sa jeden z nich vezme za celú odpoveď.

Mýtus jediného príznaku VPN

Verí sa, že niekde v SDK existuje vlastnosť, ktorá hlási, či je zariadenie v tuneli, podobne ako príznak dostupnosti hlási, či hostiteľ odpovedá. Taká verejná vlastnosť neexistuje. A aj keby existovala, «tunel existuje» a «môj provoz ho používa» sú rôzne tvrdenia a pre väčšinu aplikácií je dôležité len to druhé.

Práve kvôli tejto medzere knižnice, ktoré inzerujú jednoriadkový detektor VPN, zvyčajne čítajú niečo krehké, napríklad názov rozhrania alebo kľúč proxy, a vydávajú to za rozsudok.

Načítajte predvoľby, skôr než uveríte nil

Zdieľaná inštancia správcu existuje, hneď ako o ňu požiadate, ale jej vlastnosť protokolu zostáva nil, kým sa nedokončí zavolanie načítania. Preto nil protokol znamená «ešte nenačítané» prinajmenšom rovnako často ako «nenainštalované». Čítajte vo vnútri bloku dokončenia a až potom rozhodnite: objekt protokolu, ktorý existuje a má zapnutý príznak povolenia, tak vyzerá «nainštalované».

Druhý signál je na objekte pripojenia: neplatný stav, ktorý systém hlási, keď táto aplikácia nemá nainštalovanú žiadnu konfiguráciu. Neplatný stav spolu s nil protokolom po dokončenom načítaní je skutočná neprítomnosť, nie časový pretek.

Zmeny pripojenia prichádzajú ako oznámenia

Obslužné rutiny odovzdané do load a save hlásia, čo sa stalo s konfiguráciou, nie čo robí tunel. Čakať, kým sa jedna z nich spustí pri pripájaní, je pretek, ktorý sa nikdy nevyrieši. Sledujte namiesto toho oznámenie o zmene stavu a prečítajte aktuálnu hodnotu objektu pripojenia, keď dorazí.

Keď je konfigurácia nainštalovaná, stav pripojenia prejde krátkou sekvenciou: odpojené, pripája sa, pripojené, znovu potvrdzuje, odpája sa. «Pripojené» opisuje tunel, nie server za ním, takže to nie je dôkaz, že provoz tečie. On-demand môže tunel zdvihnúť aj vtedy, keď je aplikácia pozastavená, a vtedy oznámenie dorazí skôr, než máte čo aktualizovať.

Obmedzený snímok proxy je náznak, nie rozsudok

CFNetwork môže aplikácii odovzdať aktuálne systémové nastavenia proxy a vnútri toho výsledku je obmedzený slovník s kľúčom podľa názvu rozhrania. Názov začínajúci na tun, utun, ppp, ipsec alebo tap je náznak, že tunel existuje. Zostáva snímkom toho, čo táto aplikácia vidí, nie tvrdením o tom, kadiaľ pakety putujú.

Poskytovatelia sa nezhodnú na pomenovaní, takže chýbajúci prefix nič nedokazuje a prítomné rozhranie môže existovať bez prenosu provozu. Dostupnosť je ešte slabšia: úspešná požiadavka na súkromnú adresu ukazuje, že cesta pre tú požiadavku v tej chvíli fungovala, nie že je nainštalovaná VPN.

Simulátor si požičiava Mac a ostatné aplikácie zostávajú neviditeľné

Simulátor nemá vlastný sieťový zásobník; každé spojenie, ktoré nadviaže, je Macu. VPN bežiaca na hostiteľskom Macu teda už platí aj pre simulovanú aplikáciu a nastavenia samotného simulátora nič neukazujú. Ak tunel vznikol po spustení simulátora, reštartovať ho je zvyčajne rýchlejšie než ladiť aplikáciu. Hostiteľ na neštandardnom porte potrebuje ten port v URL, alebo miestne presmerovanie ako socat TCP-LISTEN:12345,fork TCP:host:12345.

Verejné API nevyjmenujú profily VPN, ktoré patria iným aplikáciám alebo konfiguračným profilom. Pre jednu známu aplikáciu je prenosný trik sonda schémy URL cez canOpenURL a od iOS 9 musí byť dopytovaná schéma deklarovaná vo vašom Info.plist; ak ju vynecháte, volanie vráti false. OpenVPN Connect odpovedá na openvpn://, čo z neho robí dobrý príklad a zlý všeobecný detektor.

Spojte tri pozorovania a povedzte, čo znamenajú

V praxi naskladajte tri výsledky: konfiguráciu, ktorá sa načítala a je povolená, stav pripojenia, ktorý nie je neplatný, a požiadavku na adresu dostupnú len cez tunel. Každé samo o sebe zavádza; spolu hovoria, čo aplikácia môže vedieť, a nie čo používateľ predpokladá.

Zapíšte výsledok ako tri riadky v diagnostike, nie ako jeden boolean. Keď používateľ tvrdí, že VPN je vypnutá, a vaša aplikácia nesúhlasí, tri riadky ukážu, ktoré pozorovanie sa rozišlo, a to je rozdiel medzi tiketom podpory, na ktorý môžete reagovať, a tiketom, ktorý skončí pri «mne to funguje».

Súvisiace články