Demandu al iOS-a aplikaĵo, ĉu la telefono estas en VPN, kaj la honesta respondo estas, ke ĝi ne povas scii tion tiel, kiel vi celas. La SDK ne elmetas flagon por «la aparato estas en tunelo», kaj la privataj interfacoj, kiuj povus proksimiĝi al tio, estas fermitaj por publikigataj aplikaĵoj. Vi povas observi la propran agordon de via aplikaĵo, la staton ligitan al ĝi, kaj unu aŭ du nerektajn indikojn el la reta stako. Ĉiu respondas al malsama demando, kaj plej multaj rompitaj kontroloj venas de tio, ke oni prenas unu el ili kiel la tutan respondon.

La mito de la ununura VPN-flago

La kredo estas, ke ie en la SDK ekzistas eco, kiu raportas, ĉu la aparato estas en tunelo, same kiel atingebla flago raportas, ĉu gastiganto respondas. Tia publika eco ne ekzistas. Eĉ se ĝi ekzistus, «tunelo ekzistas» kaj «mia trafiko uzas ĝin» estas malsamaj asertoj, kaj por plej multaj aplikaĵoj gravas nur la dua.

Ĝuste tiu manko estas kial bibliotekoj, kiuj reklamas unulinian VPN-detektilon, kutime legas ion fragilan, kiel interfacan nomon aŭ prokuran ŝlosilon, kaj prezentas ĝin kiel verdikton.

Ŝargu la preferojn antaŭ ol fidi nil

La komuna administrila kazo ekzistas tuj kiam vi petas ĝin, sed ĝia protokola eco restas nil ĝis la ŝarga reaĵo finiĝas. Do nil-protokolo signifas «ankoraŭ ne ŝargita» almenaŭ same ofte kiel «ne instalita». Faru la legadon ene de la kompletiga bloko, kaj nur poste decidu: protokola objekto, kiu ekzistas, kun la enŝaltita flago, estas kiel aspektas «instalita».

Dua signalo sidas sur la konekta objekto: la nevalida stato, kiun la sistemo raportas, kiam ĉi tiu aplikaĵo havas neniun instalitan agordon. Nevalida stato kune kun nil-protokolo post kompletigita ŝargo estas vera foresto, ne temporaba konkurso.

Konektaj ŝanĝoj alvenas kiel sciigoj

La traktiloj pasigitaj al load kaj save raportas, kio okazis al la agordo, ne kion faras la tunelo. Atendi, ke unu el ili ekfunkcios ĉe konekto, estas konkurso, kiu neniam solviĝas. Anstataŭe observu la sciigon pri statusa ŝanĝo, kaj legu la nunan valoron de la konekta objekto, kiam ĝi alvenas.

Post kiam agordo estas instalita, la konekta stato trapasas mallongan sinsekvon: malkonektita, konektanta, konektita, reasertanta, malkonektanta. «Konektita» priskribas la tunelon kaj ne la servilon malantaŭ ĝi, do ĝi ne pruvas, ke trafiko fluas. On-demand ankaŭ povas levi tunelon dum la aplikaĵo estas suspendita, kaj tiam la sciigo alvenas antaŭ ol vi havas ion por ĝisdatigi.

La limigita prokura momentfoto estas indiko, ne verdikto

CFNetwork povas doni al la aplikaĵo la nunajn sistemajn prokurajn agordojn, kaj ene de tiu rezulto estas limigita vortaro ŝlosilita laŭ interfaca nomo. Vidi nomon komenciĝantan per tun, utun, ppp, ipsec aŭ tap estas indiko, ke tunelo ĉeestas. Ĝi restas momentfoto de tio, kion ĉi tiu aplikaĵo povas vidi, ne aserto pri tio, kien paketoj vojaĝas.

Provizantoj malkonsentas pri nomado, do mankanta prefikso pruvas nenion, kaj ĉeestanta interfaco povas ekzisti sen porti trafikon. Atingebleco estas eĉ pli malforta: sukcesa peto al privata adreso montras, ke la vojo funkciis por tiu peto en tiu momento, ne ke VPN estas instalita.

La simulilo prunteprenas la Mac, kaj aliaj aplikaĵoj restas nevideblaj

La simulilo havas neniun propran retan stakon; ĉiu konekto, kiun ĝi faras, estas la Mac-a. VPN kuranta sur la gastiga Mac do jam efikas por la simulita aplikaĵo, kaj la propraj agordoj de la simulilo montras nenion. Se la tunelo leviĝis post la starto de la simulilo, restartigi ĝin kutime pli rapidas ol sencimigi la aplikaĵon. Gastiganto sur neordinara pordo bezonas tiun pordon en la URL, aŭ lokan plusendadon kiel socat TCP-LISTEN:12345,fork TCP:host:12345.

Publikaj API-oj ne listigos VPN-profilojn, kiuj apartenas al aliaj aplikaĵoj aŭ al agordaj profiloj. Por unu konata aplikaĵo, la portebla lertaĵo estas URL-skema provo per canOpenURL, kaj ekde iOS 9 la demandita skemo devas esti deklarita en via Info.plist; se vi forlasos ĝin, la voko redonos false. OpenVPN Connect respondas sur openvpn://, kio faras ĝin bona ekzemplo kaj malbona ĝenerala detektilo.

Kombinu tri observojn kaj diru, kion ili signifas

En la praktiko stakigu tri rezultojn: agordon, kiu ŝargiĝis kaj estas ŝaltita, konektan staton, kiu ne estas nevalida, kaj peton al adreso atingebla nur tra la tunelo. Ĉiu unuope misgvidas; kune ili diras, kion la aplikaĵo povas scii, anstataŭ kion la uzanto supozas.

Skribu la rezulton kiel tri liniojn en via diagnozaro, ne kiel unu boolean. Kiam uzanto diras, ke la VPN estas malŝaltita dum via aplikaĵo malkonsentas, la tri linioj montras, kiu observo deflankiĝis, kaj tio estas la diferenco inter subtena bileto, pri kiu vi povas agi, kaj unu, kiu finiĝas per «ĉe mi ĝi funkcias».

Rilataj artikoloj