ഫോൺ VPN-ലുണ്ടോ എന്ന് ഒരു iOS ആപ്പിനോട് ചോദിക്കുക, സത്യസന്ധമായ ഉത്തരം എന്നാൽ നിങ്ങൾ ഉദ്ദേശിക്കുന്ന അർത്ഥത്തിൽ അതിന് അറിയാൻ കഴിയില്ല എന്നാണ്. «ഉപകരണം ഒരു ടണലിലുണ്ട്» എന്നതിന് SDK ഒരു ഫ്ലാഗും നൽകുന്നില്ല, അതിനോട് അടുക്കാൻ കഴിയുമായിരുന്ന സ്വകാര്യ ഇന്റർഫേസുകൾ പ്രസിദ്ധീകരിക്കുന്ന ആപ്പുകൾക്ക് അടച്ചിരിക്കുന്നു. നിങ്ങളുടെ ആപ്പിന്റെ സ്വന്തം കോൺഫിഗറേഷൻ, അതിനോട് ബന്ധിപ്പിച്ച അവസ്ഥ, നെറ്റ്വർക്ക് സ്റ്റാക്കിൽ നിന്നുള്ള ഒന്നോ രണ്ടോ പരോക്ഷ സൂചനകൾ എന്നിവ നിരീക്ഷിക്കാം. ഓരോന്നും വ്യത്യസ്ത ചോദ്യത്തിന് ഉത്തരം നൽകുന്നു, കേടായ പരിശോധനകളിൽ ഭൂരിഭാഗവും അവയിലൊന്നിനെ മുഴുവൻ ഉത്തരമായി കണക്കാക്കുന്നതിൽ നിന്നാണ് വരുന്നത്.

ഒരൊറ്റ VPN ഫ്ലാഗിന്റെ മിത്ത്

എവിടെയോ SDK-യിൽ ഉപകരണം ടണലിലുണ്ടോ എന്ന് റിപ്പോർട്ട് ചെയ്യുന്ന ഒരു പ്രോപ്പർട്ടി ഉണ്ടെന്നാണ് വിശ്വാസം, റീച്ചബിലിറ്റി ഫ്ലാഗ് ഒരു ഹോസ്റ്റ് ഉത്തരം നൽകുന്നുണ്ടോ എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നതുപോലെ. അത്തരം ഒരു പൊതു പ്രോപ്പർട്ടി നിലവിലില്ല. ഉണ്ടായിരുന്നെങ്കിൽപ്പോലും, «ഒരു ടണൽ നിലവിലുണ്ട്», «എന്റെ ട്രാഫിക് അത് ഉപയോഗിക്കുന്നു» എന്നിവ വ്യത്യസ്ത അവകാശവാദങ്ങളാണ്, മിക്ക ആപ്പുകൾക്കും രണ്ടാമത്തേത് മാത്രമാണ് പ്രധാനം.

ഈ വിടവാണ് ഒരു വരി VPN ഡിറ്റക്ടർ പരസ്യപ്പെടുത്തുന്ന ലൈബ്രറികൾ ഇന്റർഫേസ് പേരോ പ്രോക്സി കീയോ പോലുള്ള ദുർബലമായ എന്തെങ്കിലും വായിച്ച് അത് വിധിയായി അവതരിപ്പിക്കുന്നതിന് കാരണം.

nil-നെ വിശ്വസിക്കുന്നതിന് മുമ്പ് മുൻഗണനകൾ ലോഡ് ചെയ്യുക

പങ്കിട്ട മാനേജർ ഇൻസ്റ്റൻസ് നിങ്ങൾ ആവശ്യപ്പെടുമ്പോൾത്തന്നെ ഉണ്ട്, പക്ഷേ അതിന്റെ പ്രോട്ടോക്കോൾ പ്രോപ്പർട്ടി ലോഡ് കോൾബാക്ക് പൂർത്തിയാകുന്നതുവരെ nil ആയി തുടരും. അതിനാൽ nil പ്രോട്ടോക്കോൾ «ഇതുവരെ ലോഡ് ചെയ്തിട്ടില്ല» എന്നതിനെ «ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല» എന്നതിനെക്കാൾ കുറവല്ലാതെ അർത്ഥമാക്കുന്നു. വായന പൂർത്തീകരണ ബ്ലോക്കിനുള്ളിൽ നടത്തുക, അതിനുശേഷം മാത്രം തീരുമാനിക്കുക: നിലവിലുള്ള പ്രോട്ടോക്കോൾ ഒബ്ജക്റ്റ്, എനേബിൾ ഫ്ലാഗ് ഓണായി — «ഇൻസ്റ്റാൾ ചെയ്തത്» ഇങ്ങനെയാണ് കാണുന്നത്.

രണ്ടാമത്തെ സൂചന കണക്ഷൻ ഒബ്ജക്റ്റിലുണ്ട്: ഈ ആപ്പിന് ഇൻസ്റ്റാൾ ചെയ്ത കോൺഫിഗറേഷൻ ഇല്ലാത്തപ്പോൾ സിസ്റ്റം റിപ്പോർട്ട് ചെയ്യുന്ന അസാധുവായ അവസ്ഥ. പൂർത്തിയായ ലോഡിനുശേഷം അസാധുവായ അവസ്ഥയും nil പ്രോട്ടോക്കോളും ഒരുമിച്ച് യഥാർത്ഥ അഭാവമാണ്, സമയത്തിന്റെ ഓട്ടമല്ല.

കണക്ഷൻ മാറ്റങ്ങൾ അറിയിപ്പുകളായി വരുന്നു

load-ലേക്കും save-ലേക്കും നൽകുന്ന ഹാൻഡ്ലറുകൾ കോൺഫിഗറേഷനോട് എന്ത് സംഭവിച്ചു എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നു, ടണൽ എന്ത് ചെയ്യുന്നു എന്നല്ല. കണക്ട് ചെയ്യുമ്പോൾ അവയിലൊന്ന് ഫയർ ചെയ്യുന്നതിനായി കാത്തിരിക്കുന്നത് ഒരിക്കലും പരിഹരിക്കപ്പെടാത്ത ഓട്ടമാണ്. പകരം സ്റ്റാറ്റസ് മാറ്റത്തിന്റെ അറിയിപ്പ് നിരീക്ഷിക്കുക, അത് എത്തുമ്പോൾ കണക്ഷൻ ഒബ്ജക്റ്റിന്റെ നിലവിലെ മൂല്യം വായിക്കുക.

ഒരു കോൺഫിഗറേഷൻ ഇൻസ്റ്റാൾ ചെയ്തുകഴിഞ്ഞാൽ, കണക്ഷൻ അവസ്ഥ ഒരു ചെറിയ ക്രമത്തിലൂടെ കടന്നുപോകുന്നു: വിച്ഛേദിച്ചു, കണക്ട് ചെയ്യുന്നു, കണക്ട് ചെയ്തു, വീണ്ടും സ്ഥിരീകരിക്കുന്നു, വിച്ഛേദിക്കുന്നു. «കണക്ട് ചെയ്തു» ടണലിനെ വിവരിക്കുന്നു, അതിന് പിന്നിലെ സെർവറിനെയല്ല, അതിനാൽ ട്രാഫിക് ഒഴുകുന്നു എന്നതിന് അത് തെളിവല്ല. ആപ്പ് സസ്പെൻഡ് ചെയ്തിരിക്കുമ്പോഴും On-demand ഒരു ടണൽ ഉയർത്തിയേക്കാം, അപ്പോൾ അപ്ഡേറ്റ് ചെയ്യാൻ എന്തെങ്കിലും ഉണ്ടാകുന്നതിന് മുമ്പ് അറിയിപ്പ് എത്തുന്നു.

പരിമിതമായ പ്രോക്സി സ്നാപ്പ്ഷോട്ട് ഒരു സൂചനയാണ്, വിധിയല്ല

CFNetwork-ന് സിസ്റ്റത്തിന്റെ നിലവിലെ പ്രോക്സി ക്രമീകരണങ്ങൾ ആപ്പിന് നൽകാൻ കഴിയും, ആ ഫലത്തിനുള്ളിൽ ഇന്റർഫേസ് പേര് കീയായുള്ള ഒരു പരിമിതമായ നിഘണ്ടുവുണ്ട്. tun, utun, ppp, ipsec അല്ലെങ്കിൽ tap എന്നിവയിൽ തുടങ്ങുന്ന ഒരു പേര് കാണുന്നത് ഒരു ടണൽ നിലവിലുണ്ട് എന്നതിന്റെ സൂചനയാണ്. അത് ഈ ആപ്പിന് കാണാൻ കഴിയുന്നതിന്റെ സ്നാപ്പ്ഷോട്ടായി തുടരുന്നു, പാക്കറ്റുകൾ എവിടേക്ക് പോകുന്നു എന്നതിന്റെ പ്രസ്താവനയല്ല.

ദാതാക്കൾ നാമകരണത്തിൽ യോജിക്കുന്നില്ല, അതിനാൽ പ്രിഫിക്സ് ഇല്ലാത്തത് ഒന്നും തെളിയിക്കുന്നില്ല, നിലവിലുള്ള ഒരു ഇന്റർഫേസിന് ട്രാഫിക് വഹിക്കാതെയും നിലനിൽക്കാം. റീച്ചബിലിറ്റി അതിലും ദുർബലമാണ്: ഒരു സ്വകാര്യ വിലാസത്തിലേക്കുള്ള വിജയകരമായ അഭ്യർത്ഥന ആ നിമിഷത്തിൽ ആ അഭ്യർത്ഥനയ്ക്ക് പാത പ്രവർത്തിച്ചു എന്ന് കാണിക്കുന്നു, VPN ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ട് എന്നല്ല.

സിമുലേറ്റർ Mac കടം വാങ്ങുന്നു, മറ്റ് ആപ്പുകൾ അദൃശ്യമായി തുടരുന്നു

സിമുലേറ്റർക്ക് സ്വന്തമായി ഒരു നെറ്റ്വർക്ക് സ്റ്റാക്ക് ഇല്ല; അത് ഉണ്ടാക്കുന്ന ഓരോ കണക്ഷനും Mac-ന്റേതാണ്. അതിനാൽ ഹോസ്റ്റ് Mac-ൽ പ്രവർത്തിക്കുന്ന VPN സിമുലേറ്റ് ചെയ്ത ആപ്പിന് ഇതിനകം പ്രാബല്യത്തിലുണ്ട്, സിമുലേറ്ററിന്റെ സ്വന്തം ക്രമീകരണങ്ങൾ ഒന്നും കാണിക്കുന്നുമില്ല. സിമുലേറ്റർ ആരംഭിച്ചതിന് ശേഷം ടണൽ ഉയർന്നതാണെങ്കിൽ, ആപ്പ് ഡീബഗ് ചെയ്യുന്നതിനേക്കാൾ അത് പുനരാരംഭിക്കുന്നത് സാധാരണയായി വേഗമാണ്. നോൺ-സ്റ്റാൻഡേർഡ് പോർട്ടിലുള്ള ഹോസ്റ്റിന് ആ പോർട്ട് URL-ൽ വേണം, അല്ലെങ്കിൽ socat TCP-LISTEN:12345,fork TCP:host:12345 പോലുള്ള ഒരു പ്രാദേശിക ഫോർവേഡിംഗ് വേണം.

പൊതു API-കൾ മറ്റ് ആപ്പുകൾക്കോ കോൺഫിഗറേഷൻ പ്രൊഫൈലുകൾക്കോ ഉള്ള VPN പ്രൊഫൈലുകൾ ലിസ്റ്റ് ചെയ്യില്ല. ഒരു അറിയപ്പെടുന്ന ആപ്പിന് canOpenURL വഴിയുള്ള URL സ്കീം പരിശോധനയാണ് കൊണ്ടുപോകാവുന്ന തന്ത്രം, iOS 9 മുതൽ ചോദിക്കുന്ന സ്കീം നിങ്ങളുടെ Info.plist-ൽ പ്രഖ്യാപിക്കണം; അത് ഒഴിവാക്കിയാൽ കോൾ false നൽകും. OpenVPN Connect openvpn://-ൽ പ്രതികരിക്കുന്നു, അത് അതിനെ നല്ല ഉദാഹരണവും മോശം പൊതു ഡിറ്റക്ടറുമാക്കുന്നു.

മൂന്ന് നിരീക്ഷണങ്ങൾ സംയോജിപ്പിച്ച് അവ എന്താണ് അർത്ഥമാക്കുന്നതെന്ന് പറയുക

പ്രായോഗികമായി മൂന്ന് ഫലങ്ങൾ അടുക്കിവയ്ക്കുക: ലോഡ് ചെയ്ത് സജീവമായ കോൺഫിഗറേഷൻ, അസാധുവല്ലാത്ത കണക്ഷൻ അവസ്ഥ, ടണലിലൂടെ മാത്രം എത്താൻ കഴിയുന്ന വിലാസത്തിലേക്കുള്ള അഭ്യർത്ഥന. ഓരോന്നും ഒറ്റയ്ക്ക് തെറ്റിദ്ധരിപ്പിക്കുന്നു; ഒരുമിച്ച് അവ ആപ്പിന് അറിയാൻ കഴിയുന്നത് പറയുന്നു, ഉപയോക്താവ് അനുമാനിക്കുന്നതല്ല.

ഫലം നിങ്ങളുടെ ഡയഗ്നോസ്റ്റിക്സിൽ ഒരു boolean ആയല്ല, മൂന്ന് വരികളായി എഴുതുക. ഉപയോക്താവ് VPN ഓഫ് ആണെന്ന് പറയുമ്പോൾ നിങ്ങളുടെ ആപ്പ് യോജിക്കുന്നില്ലെങ്കിൽ, ഏത് നിരീക്ഷണമാണ് വ്യതിചലിച്ചതെന്ന് ആ മൂന്ന് വരികൾ കാണിക്കുന്നു, നിങ്ങൾക്ക് പ്രവർത്തിക്കാവുന്ന ഒരു സപ്പോർട്ട് ടിക്കറ്റും «എന്റെ സ്ഥലത്ത് ഇത് പ്രവർത്തിക്കുന്നു» എന്ന് അവസാനിക്കുന്ന ഒന്നും തമ്മിലുള്ള വ്യത്യാസം അതാണ്.

അനുബന്ധ ലേഖനങ്ങൾ